Как стать автором
Обновить
61
0.4
Дмитрий Федорков @Fedorkov

Программист

Отправить сообщение

Zombies: The Movie

Время на прочтение 4 мин
Количество просмотров 7.8K
Военный штаб. За столом сидят несколько человек в офицерской форме. Во главе стола — командир базы генерал Фред, грузный мужчина с резкими чертами лица.

Генерал Фред: Сообщения подтвердились. Нью-Йорк заполонён… зомби.
Полковник Тодд: Опять?! Но у нас уже были зомби, 28 дней назад!
Генерал Фред: Эти зомби… они другие. Это философские зомби.
Читать дальше →
Всего голосов 30: ↑21 и ↓9 +12
Комментарии 7

Почти во всех реализациях двоичного поиска и сортировки слиянием есть ошибка

Время на прочтение 3 мин
Количество просмотров 53K
Это перевод статьи Джошуа Блоха «Extra, Extra — Read All About It: Nearly All Binary Searches and Mergesorts are Broken» 2006 года.

Я живо помню первую лекцию Джона Бентли в университете Карнеги-Меллон, на которой он попросил нас, свежеиспечённых аспирантов, написать функцию двоичного поиска. Он взял одно из решений и разобрал его на доске, и, разумеется, в нём оказалась ошибка, как и во многих других наших попытках. Этот случай стал для меня наглядной демонстрацией к его книге «Жемчужины программирования». Мораль в том, чтобы внимательно расставлять инварианты в программе.

И вот, теперь 2006 год. Я был потрясён, узнав, что программа двоичного поиска, корректность которой Бентли доказывал формально и тестами, содержит ошибку. Не подумайте, что я придираюсь; по правде сказать, такая ошибка вполне может ускользать от тестеров десятилетиями. Более того, двоичный поиск, который я написал для JDK, тоже был багнутым лет девять. И только сейчас, когда она сломала кому-то программу, о ней сообщили в Sun.
Читать дальше →
Всего голосов 132: ↑84 и ↓48 +36
Комментарии 57

Задача о ранце и код Грея

Время на прочтение 4 мин
Количество просмотров 41K
Не так давно на Хабре была статья «Коды Грея и задачи перебора». Статья эта скорее, математическая, нежели программистская, и мне, как простому программисту, читать её было невыносимо тяжело. Но сама тема мне знакома, поэтому я решил описать её своим взглядом, а так же рассказать о том, как использовал её в решении задачи о ранце.

image
КДПВ: задача о ранце на живом примере

Предыстория


Всё началось 10 лет назад, когда я учился в девятом классе. Я случайно подслушал разговор учителя по информатике, рассказывающего задачку кому-то из старших: дан набор чисел, и ещё одно число — контрольное. Надо найти максимальную сумму чисел из набора, которая не превышала бы контрольное число.

Задача почему-то запала мне в душу. Вернувшись домой, я быстро накатал решение: наивный перебор всех возможных сумм с выбором наилучшего. Сочетания я получал, перебирая все N-разрядные двоичные числа и беря суммы тех исходных чисел, которым соответствуют единицы. Но я с огорчением обнаружил, что при количестве элементов начиная где-то с 30, программа работает очень долго. Оно и не удивительно, ведь время работы такого алгоритма — n*2n (количество сочетаний, умноженное на длину суммы).
Чем же всё закончилось?
Всего голосов 72: ↑63 и ↓9 +54
Комментарии 18

Информация

В рейтинге
1 670-й
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Работает в
Зарегистрирован
Активность