Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих | Бхаргава Адитья

Алгоритмы - это всего лишь последовательность решения задач, и большинство таких задач уже были кем-то решены, протестированы и проверены. Можно, конечно, погрузиться в глубокую философию гениального Кнута, изучить многостраничные фолианты с доказательствами и обоснованиями, но хотите ли вы тратить на это свое время? Откройте великолепно иллюстрированную книгу и вы сразу поймете, что алгоритмы - это просто. А грокать алгоритмы - это веселое и увлекательное занятие.
Описание (О книге)
Я прежде всего стремился к тому, чтобы книга легко читалась. Я избегаю неожиданных поворотов; каждый раз, когда в книге упоминается новая концепция, я либо объясняю ее сразу, либо говорю, где буду объяснять. Основные концепции подкрепляются упражнениями и повторными объяснениями, чтобы вы могли проверить свои предположения и убедиться в том, что не потеряли нить изложения.

В книге приводится множество примеров. Моя цель — не вывалить на читателя кучу невразумительных формул, а упростить наглядное представление этих концепций. Я также считаю, что мы лучше всего учимся тогда, когда можем вспомнить что-то уже известное, а примеры помогают освежить память. Так, когда вы вспоминаете, чем массивы отличаются от связанных списков (глава 2), просто вспомните, как ищете места для компании в кинотеатре. Наверное, вы уже поняли, что я сторонник визуального стиля обучения, — в книге полно рисунков.
Содержимое книги было тщательно продумано. Нет смысла писать книгу с описанием всех алгоритмов сортировки — для этого есть такие источники, как Википедия и Khan Academy. Все алгоритмы, описанные в книге, имеют практическую ценность. Я применял их в своей работе программиста, и они закладывают хорошую основу для изучения более сложных тем.
Характеристики
- Автор: Бхаргава Адитья
- Серия: Библиотека программиста
- Издательство: Питер
- Год выпуска: 2019
- Количество страниц: 288
- Язык издания: Русский
- ISBN: 978-5-4461-0923-4, 978-5-496-02541-6
- Оригинальное название: Grokking Algorithms: An illustrated guide for programmers and other curious people
Оглавление
- Предисловие
- Благодарности
- О книге
- Структура книги
- Как работать с этой книгой
- Для кого предназначена эта книга
- Условные обозначения и загружаемые материалы
- Об авторе
- От издательства
- Глава 1. Знакомство с алгоритмами
- Введение
- Что вы узнаете об эффективности алгоритмов
- Что вы узнаете о решении задач
- Бинарный поиск
- Более эффективный поиск
- Упражнения
- Время выполнения
- «О-большое»
- Время выполнения алгоритмов растет с разной скоростью
- Наглядное представление «О-большое»
- «О-большое» определяет время выполнения в худшем случае
- Типичные примеры «О-большого»
- Упражнения
- Задачаокоммивояжере
- Шпаргалка
- Глава 2. Сортировка выбором
- Как работает память
- Массивы и связанные списки
- Связанные списки
- Массивы
- Терминология
- Упражнения
- Вставка в середину списка
- Удаление
- Упражнения
- Сортировка выбором
- Пример кода
- Шпаргалка
- Глава 3. Рекурсия
- Рекурсия
- Базовый случай и рекурсивный случай
- Стек
- Стек вызовов
- Упражнения
- Стек вызовов с рекурсией
- Упражнения
- Шпаргалка
- Глава 4. Быстрая сортировка
- «Разделяй и властвуй»
- Упражнения
- Быстрая сортировка
- Снова об «О-большом»
- Сортировка слиянием и быстрая сортировка
- Средний и худший случай
- Упражнения
- Шпаргалка
- Глава 5. Хеш-таблицы
- Хеш-функции
- Упражнения
- Примеры использования
- Использование хеш-таблиц для поиска
- Исключениедубликатов
- Использование хеш-таблицы как кэша
- Шпаргалка
- Коллизии
- Быстродействие
- Коэффициент заполнения
- Хорошая хеш-функция
- Упражнения
- Шпаргалка
- Глава 6. Поиск в ширину
- Знакомство с графами
- Что такое граф?
- Поиск в ширину
- Поиск кратчайшего пути
- Очереди
- Упражнения
- Реализация графа
- Реализация алгоритма
- Время выполнения
- Упражнения
- Шпаргалка
- Глава 7. Алгоритм Дейкстры
- Работа с алгоритмом Дейкстры
- Терминология
- История одного обмена
- Ребра с отрицательным весом
- Реализация
- Упражнения
- Шпаргалка
- Глава 8. Жадные алгоритмы
- Задача составления расписания
- Задача о рюкзаке
- Упражнения
- Задача о покрытии множества
- Приближенные алгоритмы
- Упражнения
- NP-полные задачи
- Задача о коммивояжере — шаг за шагом
- Как определить, что задача является NP-полной?
- Упражнения
- Шпаргалка
- Глава 9. Динамическое программирование
- Задача о рюкзаке
- Простоерешение
- Динамическое программирование
- Задача о рюкзаке: вопросы
- Что произойдет при добавлении элемента?
- Упражнения
- Что произойдет при изменении порядка строк?
- Можно ли заполнять таблицу по столбцам, а не по строкам?
- Что произойдет при добавлении меньшего элемента?
- Можно ли взять часть предмета?
- Оптимизация туристического маршрута
- Взаимозависимые элементы
- Может ли оказаться, что решение требует более двух «подрюкзаков»? ....
- Возможно ли, что при лучшем решении в рюкзаке остается пустое место?. .
- Упражнения
- Самая длинная общая подстрока
- Построение таблицы
- Заполнение таблицы
- Решение
- Самая длинная общая подпоследовательность
- Самая длинная общая подпоследовательность — решение
- Упражнения
- Шпаргалка
- Глава 10. Алгоритм Я ближайших соседей
- Апельсины и грейпфруты
- Построение рекомендательной системы
- Извлечениепризнаков
- Упражнения
- Регрессия
- Выбор признаков
- Упражнения
- Знакомство с машинным обучением
- OCR
- Построение спам-фильтра
- Прогнозы на биржевых торгах
- Шпаргалка
- Глава 11. Что дальше?
- Деревья
- Инвертированные индексы
- Преобразование Фурье
- Параллельные алгоритмы
- MapReduce
- Для чего нужны распределенные алгоритмы?
- Функция map
- Функция reduce
- Фильтры Блума и HyperLogLog
- Фильтры Блума
- HyperLogLog
- Алгоритмы SHA
- Сравнениефайлов
- Проверка паролей
- Локально-чувствительное хеширование
- Обмен ключами Диффи—Хеллмана
- Линейное программирование
- Эпилог
- Ответы к упражнениям