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

Грокаем алгоритмы, пособие - Бхаргава Адитья

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

Описание (О книге)

Я прежде всего стремился к тому, чтобы книга легко читалась. Я избегаю неожиданных поворотов; каждый раз, когда в книге упоминается новая концепция, я либо объясняю ее сразу, либо говорю, где буду объяснять. Основные концепции подкрепляются упражнениями и повторными объяснениями, чтобы вы могли проверить свои предположения и убедиться в том, что не потеряли нить изложения.

Грокаем алгоритмы, Бхаргава Адитья

В книге приводится множество примеров. Моя цель — не вывалить на читателя кучу невразумительных формул, а упростить наглядное представление этих концепций. Я также считаю, что мы лучше всего учимся тогда, когда можем вспомнить что-то уже известное, а примеры помогают освежить память. Так, когда вы вспоминаете, чем массивы отличаются от связанных списков (глава 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
    • Сравнениефайлов
    • Проверка паролей
    • Локально-чувствительное хеширование
    • Обмен ключами Диффи—Хеллмана
    • Линейное программирование
    • Эпилог
  • Ответы к упражнениям