Грокаем алгоритмы

Александр Шитик
Александр Шитик

Пишу свои посты и книги, делаю обзоры на фильмы и книги. Эксперт в области космологии и астрономии, IT, продуктивности и планирования.

Грокаем алгоритмы
Адитья Бхаргава
Жанры: Программирование
Год издания: 2017
Год прочтения: 2020
Моя оценка: Наивысшая
Количество прочтений: 1
Количество страниц: 290
Конспект (страниц): 5
Первоначальный язык издания: Английский
Переводы на другие языки: Русский, Испанский, Португальский

Обзор

Книга состоит из 11 глав, хотя первая — это что-то вроде введения (глава так и называется "Знакомство с алгоритмами"), а последняя — это скорее про то, что можно (и по-хорошему нужно) изучать далее и то, что эта книга не покрыла в полной мере (например, MapReduce, фильтр Блума, SHA и прочее). А что же эта книга покрыла? Давайте немного разберёмся.

Во-первых, в книге упоминается про сложность алгоритмов и так называемое «О» большое. И поверьте, подавляющее большинство курсов, рассказывающих о программировании, учат чему-то узкоспециализированному, но лишь в очень редких случаях рассказывают о сложности выполнения алгоритма и оптимизации кода.

Что касается затрагиваемых тем, то постараюсь их бегло разобрать в этом абзаце.

Сначала идёт глава про массивы и связные списки и о том, как с ними работать (в плане сортировки и поиска информации). Перечисляются преимущества и недостатки списков (с точки зрения скорости чтения, записи и хранения информации).

После этого идёт небольшая глава про рекурсию. Затрагиваются тематики стека и стека вызовов.

Далее идёт быстрая сортировка (на примере подхода "разделяй и властвуй"). Для большего закрепления понимания алгоритма "разделяй и властвуй" автор приводит три примера. Затрагивается тематика опорного элемента, и в виде графиков сравниваются скорости выполнения различных вариантов сортировок (в том числе и из прошлых глав).

Следующий раздел посвящён новому типу данных, а скорее базовой структуре — хеш-таблицам. Перечисляются случаи, когда и где нужно их использовать (например, исключение дубликатов, кэширование, моделирование отношений между объектами). Рассмотрены и описаны случаи коллизий.

Далее начинается знакомство с такой структурой данных, как графы. Нет, здесь и близко не покрыты все тематики, которые я изучал на предмете "Математическое моделирование", но по крайней мере затронуты основные понятия графа, его назначение и область применения, рассмотрена и направленность графа. Ну и так как графы — это про "пути", то среди алгоритмов здесь разобраны поиск в ширину и нахождение кратчайшего пути. Именно в этой главе идёт упоминание о очередях и снова о стеке, разобраны FIFO и LIFO, хотя, как по мне, это стоило бы рассмотреть в предыдущих главах. Кстати, на графы отведены сразу 2 главы. И если в первой мы искали кратчайший путь в невзвешенном графе, то во второй главе речь идёт о поиске кратчайшего пути во взвешенном. Для такого поиска использовался алгоритм Дейкстры. Ну и примеров также несколько: сначала абстрактный, а потом уже непосредственно на языке программирования. Про алгоритм Беллмана-Форда (нахождение кратчайшего пути в графах, содержащих рёбра с отрицательным весом) автор ничего не показал и оставил на самоизучение.

В завершении книги идут реже используемые в классическом и повседневном программировании задачи и алгоритмы. Например, разобраны "жадные алгоритмы" и описано то, как браться за невозможные задачи, не имеющие быстрого алгоритмического решения (NP-полные задачи), динамическое программирование — метод решения сложных задач, разбиваемых на подзадачи, и алгоритм k ближайших соседей, используемый в машинном обучении.

Особенности

В книге есть иллюстрации, которые помогают, дополняют и визуализируют информацию. Также в каждой главе можно встретить по 5–7 практических вопросов. Фактически это просто вопросы без кода (хотя в некоторых случаях и с кодом), в конце книги есть ответы на вопросы для самопроверки. По завершении каждой главы есть так называемая "шпаргалка" — некое саммари главы в виде 4–5 предложений.

По объёму книга около 300 страниц, плюс главы не сильно большие, а значит, велика вероятность, что любой, кто её открыл, дочитает до конца. Читается легко и быстро.

Заключение

Хорошая книга для тех, кто вошёл в программирование без технического образования. Достаточно простым языком рассказывается про возможные варианты сортировок и поиска (бинарный поиск, поиск в глубину и ширину). Затрагивается важная тема сложности/скорости выполнения алгоритма «О» большое. Есть даже такие темы, как графы и нахождение кратчайших путей, алгоритм k ближайших соседей и некоторые другие темы, которые обязан хотя бы на базовом уровне знать каждый программист.

Вверх