Обзор книги "Грокаем алгоритмы", поймёт даже кот
Публикую обзор книги "Грокаем алгоритмы".
Стоит читать? Да! Почему? Опишу в статье.
Алгоритмы - важны для программиста, а это лучшая книга для начала их изучения с нуля.
Книга отлично подойдет для тех, кто решил для себя познакомиться с тематикой алгоритмизации.
Также книга подойдет для тех людей, что ранее пробовали изучать данную тему, но утонули в океанах огромных книг и заумных сайтов, что по итогу, своей сложностью подачи материала, сбивали лишь с толку.
Книга состоит из 11 глав, что затрагивает такие темы как бинарный поиск, сортировка, рекурсия, хеш-таблицы, динамическое программирование и многое, многое другое.
Для начала, чтобы было предметное понимание, что представлено в книге, ознакомимся с её оглавлением.
Каждая глава по своему уникальна и ценна , вследствие чего предлагаю рассмотреть каждую главу отдельно.
Глава.1. Знакомство с алгоритмами.
В данной главе, автор знакомит нас с алгоритмами и это знакомство начинается с бинарного поиска.
Бинарный поиск прекрасно рассмотрен на примере игры "Угадай число". Автором предложено читателю загадать число от 1 до 100. При каждой попытке угадать число, ваша задача ответить "много", "мало" или же "угадал".
Плохим способом в данном случае является перебор всех чисел подряд, что влечет за собой сценарий из 100 попыток.
Пример бинарного поиска в задаче "Угадай число".
Начинать угадывать искомое число с числа "50". Мало? Пробуем число "75". Много? Пробуем сузить диапазон возможного расположения искомого числа и пробуем "63". Основная особенность в том, что благодаря бинарного поиску, какое бы число в диапазоне от "1" до "100" вы бы не загадали, его можно будет угадать не более чем за 7 попыток.
В этом и есть магия бинарного поиска, что раскрывается в этой книге. Идём дальше.
В этой главе автор рассказывает о том, как устроена память компьютера,что из себя представляют массивы и связные списки и то, как устроен алгоритм сортировки выбором. Обо всём по порядку.
Автор предлагает представить память компьютера в виде большого шкафа с огромным количеством ящиков внутри. Каждый ящик имеет свой собственный адрес. В случае, когда нам требуется сохранить что-либо в памяти, мы запрашиваем у компьютера место в его памяти, он в ответ нам выдает адрес для сохранения нашей информации. Для сохранения информации присутствуют два основных способа, массивы и сортировка.
Возможно, самый простой в реализации алгоритм сортировки. Как и в большинстве других подобных алгоритмов, в его основе лежит операция сравнения. Сравнивая каждый элемент с каждым, и в случае необходимости производя обмен, метод приводит последовательность к необходимому упорядоченному виду.
Достаточно легкий для понимания алгоритм, но его недостатком является то, что он очень медленно работает.
В третьей главе автор подробно и довольно таки удачно рассказывает о том, что такое рекурсия на примере старого бабушкиного чемодана.
Автор предлагает нам познакомиться со стратегией "Разделяй и властвуй", что отлично подходит для тех случаев, когда решаемая вами задача, не решается ни одним из ранее известных алгоритмов. Предлагаю вам ознакомиться с этой удивительной стратегией, что сопровождается соответствующими иллюстрациями.
Также в 4-й главе автором подробно рассматривает алгоритм быстрой сортировки, что часто применяется на практике и как раз таки успешно успешно использует стратегию "Разделяй и властвуй".
Хэш-функция - функция, что получает строку ( набор байтов ) и возвращает обратно число. Хэш-таблицы - это структура данных, что связывает между собой ключи со значениями.
Коллизия - та ситуация, когда двум ключам назначают один элемент массива. Простейшее решение данной ситуации - это связный список в этом же элементе.
Отличительной особенностью хорошей хэш-функции создает минимальное количество коллизий.
Отлично проиллюстрировано использование хеш-таблиц для поиска.
Хорошим преимуществом данной книги является тезисная выжимка по главе в виде шпаргалки, что имеется в конце каждой главы. Идем дальше.
В данной главе автор предлагает нам научиться моделировать сети с помощью абстрактной структуру данных - графов. Автором прилагается достаточно подробное и удачно иллюстрированное описание того, что такое граф.
Алгоритм Де́йкстры — алгоритм на графах, изобретённый нидерландским учёным Эдсгером Дейкстрой в 1959 году. Находит кратчайшие пути от одной из вершин графа до всех остальных. Алгоритм работает только для графов без рёбер отрицательного веса. Алгоритм широко применяется в программировании, например, его используют протоколы маршрутизации OSPF и IS-IS.
Жадный алгоритм — алгоритм, заключающийся в принятии локально оптимальных решений на каждом этапе, допуская, что конечное решение также окажется оптимальным. Известно, что если структура задачи задается матроидом, тогда применение жадного алгоритма выдаст глобальный оптимум. Штука нужная и для кругозора также полезна.
Глава.9. Динамическое программирование
Динамическое управление - является способом решения сложных задач посредством разбиения их на более простые задачи.
Практическая польза динамического программирования в том, чтобы сократить количество вычислений, благодаря решению каждой подзадачи лишь единожды.
Глава 10. Алгоритм k ближайших соседей
Метод k-ближайших соседей – популярный алгоритм классификации, который используется в разных типах задач машинного обучения. Наравне с деревом решений это один из самых понятных подходов к классификации. Поэтому, если интересуетесь машинным обучением, стоит изучить!
По своему значению, возможно одна из самых важных глав этой книги, так как, в ней автор попытается подсказать дальнейшее направление в изучении алгоритмов и рассмотрит те алгоритмы, что не рассматривались в книге ранее.
Напишу тезисно то, о чем говорится в финальной главе:
5. Для чего нужны распределенные алгоритмы?
8. Фитльры Блума и HyperLogLog
Хотелось бы подвести итоги по книге.
1.Средняя цена книги - до 1.000 рублей.
Тот редкий случай, когда книга стоит своих денег. Безусловно, всегда хочется дешевле, но пока это одна из немногих книг, о приобритении которой я не пожалел. Сам покупал в марте за 1038 руб.
2. Подробно иллюстрированное описание всех алгоритмов и особенностей их работы. Зависит от человека, но лично я запоминаю информацию куда лучше, когда она идёт с описательными иллюстрациями. Тут уже индивидуально.
3. Реализация всех алгоритмов на Python.
Один из самых популярных ныне языков программирования, вследствие чего вариант реализации в книге всех алгоритмов на Python и достаточно подробное описание кода, является хорошим подспорьем для тех, кто учит Python и интересуется алгоритмами.
Форма выполнения книги. Пожалуй, единственный недостаток книги.
Обложка мягкая, дело вкуса, но если постоянно носите с собой книгу, может помяться. Также плотно склеины с корешком книги страницы, вследствие чего просто раскрыть книгу, положить на стол и приступить к чтению не получится, страницы будут стремиться к закрытию. Опять же, дело вкуса, с учетом той полезной информации, что дается в книге, недостаток терпимый, хоть и не из приятных.
Изначально несколько раз пытался изучать программирование с книги "Алгоритмы. Построение и анализ." Но не смог преодолеть и сотни страниц. Не понравилось, что автор с самого начала обрушивал на читателя поток формул, от которых мозг начинал кипеть, сам же текст был наполнен тоской и унынием типичного университетского материала, вследствие чего необходимо было искать альтернативный источник концентрированной информации по алгоритмам и источник этот был найден в лице отличной книги под названием "Грокаем алгоритмы".
Более понятного объяснения алгоритмов ранее нигде не встречал. Всё расписано крайне подробно и объясняется буквально "на пальцах", дополнительно сопровождая объяснения работы алгоритмов информативными картинками, изображающими их работу.
Прочесть данную книгу советую абсолютно каждому программисту, независимо от уровня профессиональной подготовки.
Если статья показалась вам интересной, то буду благодарен за подписку на мой
канал IT-старт t.me/it_begin
где я также публикую обзоры технической литературы, интервью программистов и иную полезную информацию как для действующих, так и для начинающих программистов