Всем доброго времени суток!

Публикую обзор книги "Грокаем алгоритмы".

Автор: Адитья Бхаргава

Стоит читать? Да! Почему? Опишу в статье.

Алгоритмы - важны для программиста, а это лучшая книга для начала их изучения с нуля.

Кто целевая аудитория книги?

Книга отлично подойдет для тех, кто решил для себя познакомиться с тематикой алгоритмизации.

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

Что в книге?

Книга состоит из 11 глав, что затрагивает такие темы как бинарный поиск, сортировка, рекурсия, хеш-таблицы, динамическое программирование и многое, многое другое.

Для начала, чтобы было предметное понимание, что представлено в книге, ознакомимся с её оглавлением.

Рис.1. Оглавление
Рис.1. Оглавление
Рис.1.2. Оглавление
Рис.1.2. Оглавление
Рис.1.3. Оглавление
Рис.1.3. Оглавление

Каждая глава по своему уникальна и ценна , вследствие чего предлагаю рассмотреть каждую главу отдельно.

Глава.1. Знакомство с алгоритмами

Рис.1.5. Разговорот первой главы
Рис.1.5. Разговорот первой главы

В данной главе, автор знакомит нас с алгоритмами и это знакомство начинается с бинарного поиска.

Бинарный поиск прекрасно рассмотрен на примере игры "Угадай число". Автором предложено читателю загадать число от 1 до 100. При каждой попытке угадать число, ваша задача ответить "много", "мало" или же "угадал".

Плохим способом в данном случае является перебор всех чисел подряд, что влечет за собой сценарий из 100 попыток.

Пример бинарного поиска в задаче "Угадай число".

Начинать угадывать искомое число с числа "50". Мало? Пробуем число "75". Много? Пробуем сузить диапазон возможного расположения искомого числа и пробуем "63". Основная особенность в том, что благодаря бинарного поиску, какое бы число в диапазоне от "1" до "100" вы бы не загадали, его можно будет угадать не более чем за 7 попыток.

В этом и есть магия бинарного поиска, что раскрывается в этой книге. Идём дальше.

Глава.2. Сортировка выбором

Рис.2.1 Глава 2 - сортировка выбором
Рис.2.1 Глава 2 - сортировка выбором

В этой главе автор рассказывает о том, как устроена память компьютера,что из себя представляют массивы и связные списки и то, как устроен алгоритм сортировки выбором. Обо всём по порядку.

Как устроена память

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

Сортировка выбором.

Возможно, самый простой в реализации алгоритм сортировки. Как и в большинстве других подобных алгоритмов, в его основе лежит операция сравнения. Сравнивая каждый элемент с каждым, и в случае необходимости производя обмен, метод приводит последовательность к необходимому упорядоченному виду.

Достаточно легкий для понимания алгоритм, но его недостатком является то, что он очень медленно работает.

Глава 3. Рекурсия

Рис.3.1 Глава 3 - рекурсия
Рис.3.1 Глава 3 - рекурсия

В третьей главе автор подробно и довольно таки удачно рассказывает о том, что такое рекурсия на примере старого бабушкиного чемодана.

Рис.3.2 Рекурсия
Рис.3.2 Рекурсия

Глава 4. Быстрая сортировка

Рис.4. Глава 4 - быстрая сортировка.
Рис.4. Глава 4 - быстрая сортировка.

Автор предлагает нам познакомиться со стратегией "Разделяй и властвуй", что отлично подходит для тех случаев, когда решаемая вами задача, не решается ни одним из ранее известных алгоритмов. Предлагаю вам ознакомиться с этой удивительной стратегией, что сопровождается соответствующими иллюстрациями.

Рис.4.2 Стратегия "Разделяй и властвуй"
Рис.4.2 Стратегия "Разделяй и властвуй"
Рис.4.3 Стратегия "Разделяй и властвуй"
Рис.4.3 Стратегия "Разделяй и властвуй"
Рис.4.4 Быстрая сортировка
Рис.4.4 Быстрая сортировка

Также в 4-й главе автором подробно рассматривает алгоритм быстрой сортировки, что часто применяется на практике и как раз таки успешно успешно использует стратегию "Разделяй и властвуй".

Глава.5. Хеш-таблицы

Рис.5.1 Глава 5 - хеш-таблицы
Рис.5.1 Глава 5 - хеш-таблицы

Хэш-функция - функция, что получает строку ( набор байтов ) и возвращает обратно число. Хэш-таблицы - это структура данных, что связывает между собой ключи со значениями.

Коллизия - та ситуация, когда двум ключам назначают один элемент массива. Простейшее решение данной ситуации - это связный список в этом же элементе.

Отличительной особенностью хорошей хэш-функции создает минимальное количество коллизий.

Отлично проиллюстрировано использование хеш-таблиц для поиска.

Рис.5.2. Использование хеш-таблиц для поиска
Рис.5.2. Использование хеш-таблиц для поиска
Рис.5.3. Шпаргалка
Рис.5.3. Шпаргалка

Хорошим преимуществом данной книги является тезисная выжимка по главе в виде шпаргалки, что имеется в конце каждой главы. Идем дальше.

Глава 6. Поиск в ширину

Рис.6.1. Глава 6 - Поиск в ширину
Рис.6.1. Глава 6 - Поиск в ширину

В данной главе автор предлагает нам научиться моделировать сети с помощью абстрактной структуру данных - графов. Автором прилагается достаточно подробное и удачно иллюстрированное описание того, что такое граф.

Рис.6.2. Подробно иллюстрированное знакомство с графами
Рис.6.2. Подробно иллюстрированное знакомство с графами

Глава 7. Алгоритмы Дейкстры

Рис.7.1. Глава 7 - алгоритм Дейкстры
Рис.7.1. Глава 7 - алгоритм Дейкстры

Алгоритм Де́йкстры — алгоритм на графах, изобретённый нидерландским учёным Эдсгером Дейкстрой в 1959 году. Находит кратчайшие пути от одной из вершин графа до всех остальных. Алгоритм работает только для графов без рёбер отрицательного веса. Алгоритм широко применяется в программировании, например, его используют протоколы маршрутизации OSPF и IS-IS.

Глава 8. Жадные алгоритмы

Рис.8.1 Глава 8 - Жадные алгоритмы
Рис.8.1 Глава 8 - Жадные алгоритмы

Жадный алгоритм — алгоритм, заключающийся в принятии локально оптимальных решений на каждом этапе, допуская, что конечное решение также окажется оптимальным. Известно, что если структура задачи задается матроидом, тогда применение жадного алгоритма выдаст глобальный оптимум. Штука нужная и для кругозора также полезна.

Глава 9. Динамическое программирование

Рис.9. Динамическое программирование
Рис.9. Динамическое программирование

Динамическое управление - является способом решения сложных задач посредством разбиения их на более простые задачи.

Практическая польза динамического программирования в том, чтобы сократить количество вычислений, благодаря решению каждой подзадачи лишь единожды.

Глава 10. Алгоритм k ближайших соседей

Рис.10. Глава 10 - Алгоритм k ближайших соседей
Рис.10. Глава 10 - Алгоритм k ближайших соседей

Метод k-ближайших соседей – популярный алгоритм классификации, который используется в разных типах задач машинного обучения. Наравне с деревом решений это один из самых понятных подходов к классификации. Поэтому, если интересуетесь машинным обучением, стоит изучить!

Глава 11. Что дальше?

По своему значению, возможно одна из самых важных глав этой книги, так как, в ней автор попытается подсказать дальнейшее направление в изучении алгоритмов и рассмотрит те алгоритмы, что не рассматривались в книге ранее.

Напишу тезисно то, о чем говорится в финальной главе:

1. Инвертированные индексы

2. Преобразование Фурье

3. Параллельные алгоритмы.

4. MapReduce

5. Для чего нужны распределенные алгоритмы?

6. Функция map

7. Функция Reduce

8. Фитльры Блума и HyperLogLog

Хотелось бы подвести итоги по книге.

Преимущества книги:

1. Средняя цена книги - до 1.000 рублей.

Цена на OZON - 975 р.

Цена на Wildberries - 945 р.

Цена на Читай-Город - 944 р.

Тот редкий случай, когда книга стоит своих денег. Безусловно, всегда хочется дешевле, но пока это одна из немногих книг, о приобритении которой я не пожалел. Сам покупал в марте за 1038 руб.

2. Подробно иллюстрированное описание всех алгоритмов и особенностей их работы. Зависит от человека, но лично я запоминаю информацию куда лучше, когда она идёт с описательными иллюстрациями. Тут уже индивидуально.

3. Реализация всех алгоритмов на Python.

Один из самых популярных ныне языков программирования, вследствие чего вариант реализации в книге всех алгоритмов на Python и достаточно подробное описание кода, является хорошим подспорьем для тех, кто учит Python и интересуется алгоритмами.

Недостатки книги:

Форма выполнения книги. Пожалуй, единственный недостаток книги.

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

Заключение по книге

Изначально несколько раз пытался изучать программирование с книги "Алгоритмы. Построение и анализ." Но не смог преодолеть и сотни страниц. Не понравилось, что автор с самого начала обрушивал на читателя поток формул, от которых мозг начинал кипеть, сам же текст был наполнен тоской и унынием типичного университетского материала, вследствие чего необходимо было искать альтернативный источник концентрированной информации по алгоритмам и источник этот был найден в лице отличной книги под названием "Грокаем алгоритмы".

Более понятного объяснения алгоритмов ранее нигде не встречал. Всё расписано крайне подробно и объясняется буквально "на пальцах", дополнительно сопровождая объяснения работы алгоритмов информативными картинками, изображающими их работу.

Прочесть данную книгу советую абсолютно каждому программисту, независимо от уровня профессиональной подготовки.

Мой канал в телеграмм

Если статья показалась вам интересной, то буду благодарен за подписку на мой канал IT-старт t.me/it_begin , где я также публикую обзоры технической литературы и полезную информацию как для действующих, так и для начинающих программистов

Комментарии (15)


  1. iig
    14.07.2022 14:20
    +4

    1. KorP
      14.07.2022 14:51

      В питере на неё ещё и ценник более приятный (в поиске показывает 944, но при переходе на страницу книги - 726 за бумажную и 550 за электронную версию)


      1. sepetov
        14.07.2022 15:32

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


        1. skaynet4788 Автор
          15.07.2022 13:04
          +1

          кстати, аналогично нередко делаю. В моем любимом книжном магазине есть целый раздел с дисконтом, где книги дешевле в 2 , а то и в 3 раза, из за пострадавшего ( не всегда даже заметно ) внешнего облика


    1. skaynet4788 Автор
      15.07.2022 13:03

      опять же, хотелось более подробно рассмотреть книгу, нежили в тех вариантах, что находил ранее)


  1. Hivemaster
    15.07.2022 11:48
    +2

    Это не книга, а брошюра с поверхностным обзором самых часто упоминаемых алгоритмов.


  1. 402d
    15.07.2022 20:41
    +1

    Зашел в статью из-за ностальгии по юности (90x). Хайнлайн "Чужой в стране чужой". Институт фантастика и изучение алгоритмов. Вопрос а современная аудитория понимает отсылку "грокаем" ?


    1. yokotoka
      16.07.2022 00:56

      Я тоже в юности в конце 90-х проникся этой книгой. Правда тогда в голове отложилось, что Хайнлайн не просто так "сектантские" сюжет и идею туда положил, а отчасти будто попытался их "продать" современникам через сеттинг фантастики, как это блестяще сработало у Хаббарда. Спасибо что напомнили, прям захотелось перечитать.


    1. rinat_crone
      16.07.2022 01:07

      Раз уж интересуетесь, честно отвечу — только прочитав Ваш комментарий понял, что «грокаем» это отсылка и я её не понимаю (чуть младше вас, юность в нулевых). Ушел читать на выходных книгу из вашего коммента. Спасибо, что расширили кругозор! Может быть в дополнение ещё пару книг кинете, которые считаете классическими?


      1. 402d
        16.07.2022 08:50

        Не буду подглядывать в гугл. Просто из памяти попробую достать авторов или книги, которые помню и через 30-15 лет. Хайлайна прочитал всего (включая малые формы) (Дверь в лето. Луна жестокая хозяйка. Звездный десант. ) Гарисон со своей стальной крысой. Нортон королева солца. Желязный с амбером и ведьмак Сапковского не зашли. Но я про них помню :) Асприн "МИФы" Павел Шумил "Слово о драконе"

        Вот наверное самые яркие воспоминания.


        1. magiavr
          16.07.2022 20:20

          У Гарри Гаррисона много и других хороших произведений, также как и Роберта Желязны. Хотя эти произведения, наверное, самые их известные. Можно, конечно, ещё тысячу дописать фантастов-классиков. Сейчас же, эпоху легкодоступности выпуска книг, среднее качество фантастики резко упало.


    1. magiavr
      16.07.2022 20:10

      Хайнлайн уже не моден. Чужак мне очень понравился, а я читал его много - 25 томов дома иногда перечитываются. В 90-е и 00-е любили ит-ники так именовать книги. Книга же по гроканью алгоритмов тоже уже совсем не новая, хотя и не такая старая как "Искусство программирования" Д. Кнута.


  1. Ustas4
    16.07.2022 04:01

    А есть эта книга в электронном формате?


    1. Hivemaster
      16.07.2022 12:48

      Конечно. Можно приобрести на Литресе например.


  1. JustPeople
    16.07.2022 15:56

    Покупал в мае в лабиринте ее и "грокаем машинное обучение" обе за 1440 обошлись.