Предисловие
Благодарности
О книге
Как работать с этой книгой
Для кого предназначена эта книга
Условные обозначения и загружаемые материалы
Об авторе
От издательства
Глава 1. Знакомство с алгоритмами
Что вы узнаете об эффективности алгоритмов
Что вы узнаете о решении задач
Бинарный поиск
Упражнения
«О-большое»
Наглядное представление «О-большое»
«О-большое» определяет время выполнения в худшем случае
Типичные примеры «О-большого»
Упражнения
Шпаргалка
Глава 2. Сортировка выбором
Массивы и связанные списки
Массивы
Терминология
Упражнения
Удаление
Упражнения
Сортировка выбором
Пример кода
Шпаргалка
Глава 3. Рекурсия
Базовый случай и рекурсивный случай
Стек
Упражнения
Упражнения
Шпаргалка
Глава 4. Быстрая сортировка
Упражнения
Быстрая сортировка
Снова об «О-большом»
Средний и худший случай
Упражнения
Шпаргалка
Глава 5. Хеш-таблицы
Упражнения
Примеры использования
Исключение дубликатов
Использование хеш-таблицы как кэша
Шпаргалка
Коллизии
Быстродействие
Хорошая хеш-функция
Упражнения
Шпаргалка
Глава 6. Поиск в ширину
Что такое граф?
Поиск в ширину
Очереди
Упражнения
Реализация графа
Реализация алгоритма
Упражнения
Шпаргалка
Глава 7. Алгоритм Дейкстры
Терминология
История одного обмена
Ребра с отрицательным весом
Реализация
Упражнения
Шпаргалка
Глава 8. Жадные алгоритмы
Задача о рюкзаке
Упражнения
Задача о покрытии множества
Упражнения
NP-полные задачи
Как определить, что задача является NP-полной?
Упражнения
Шпаргалка
Глава 9. Динамическое программирование
Динамическое программирование
Задача о рюкзаке: вопросы
Упражнения . . .
Можно ли заполнять таблицу по аолбцам, а не по арокам?
Что произойдет при добавлении меньшего элемента?
Можно ли взять чааь предмета?
Оптимизация туриаического маршрута
Взаимозависимые элементы
Может ли оказаться, что решение требует более двух «подрюкзаков»?
Возможно ли, что при лучшем решении в рюкзаке оаается пуаое меао?
Упражнения
Самая длинная общая подарока
Заполнение таблицы
Решение
Самая длинная общая подпоследовательноаь
Самая длинная общая подпоследовательноаь — решение
Упражнения
Шпаргалка
Глава 10. Алгоритм к ближайших соседей
Поароение рекомендательной сиаемы
Упражнения
Выбор признаков
Упражнения
Знакомство с машинным обучением
Построение спам-фильтра
Прогнозы на биржевых торгах
Шпаргалка
Глава 11. Что дальше?
Инвертированные индексы
Преобразование Фурье
Параллельные алгоритмы
MapReduce
Функция тар
Функция reduce
Фильтры Блума и HyperLogLog
HyperLogLog
Алгоритмы SHA
Проверка паролей
Локально-чувствительное хеширование
Обмен ключами Диффи—Хеллмана
Линейное программирование
Эпилог
Ответы к упражнениям