Не для манки-кодеров: книги по алгоритмам и структурам данных

Аватар Иван Бирюков

Обложка поста Не для манки-кодеров: книги по алгоритмам и структурам данных

Чтобы быть хорошим программистом, мало знать синтаксис какого-нибудь языка и хорошо писать код. Когда речь идет о маленьких шаблонных проектах, этого хватит. Но вот вы сталкиваетесь с чем-то по-настоящему серьезным и масштабным, и становится ясно — без знания алгоритмов и умения работать со структурами данных вы далеко не уйдете.

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

***
Algorithms, Etc.

Algorithms, Etc.

Это лекции и другие учебные заметки к курсам по алгоритмам в Иллинойсском университете в Урбане-Шампейне. Помимо теории, на сайте можно найти большое количество домашних и экзаменационных заданий — правда, без ответов.

***
Algorithms (Алгоритмы на Java)

Algorithms (Алгоритмы на Java)

Книга Седжвика и Уэйна «Алгоритмы на Java» является классическим справочным руководством, в котором содержится необходимый для программиста объем знаний в области алгоритмов, накопленных за последние несколько десятилетий.

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

***
Binary Trees

Binary Trees

Небольшая методичка Стенфордского университета, целиком посвящённая двоичным деревьям. Внимание уделено как теории, так и задачкам с разборами решений, причём и на Java, и на C.

***
Linked List Basics

Linked List Basics

Linked List Problems

Linked List Problems

Ещё две методички из Стенфорда. Первая содержит теоретические материалы, посвящённые связным спискам, а вторая — 18 задач. Пригодятся всем, кто изучает C и хочет узнать о возможностях применения указателей.

***
Clever Algorithms: Nature-Inspired Programming Recipes

Clever Algorithms: Nature-Inspired Programming Recipes

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

***
The Algorithm Design Manual

The Algorithm Design Manual

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

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

***
Жемчужины проектирования алгоритмов: функциональный подход

Жемчужины проектирования алгоритмов: функциональный подход

Отличная книга по алгоритмам, использующая неординарный подход.

Книга разделена на 30 глав, каждая из которых называется жемчужиной. В начале главы читателю дается задача, например, на сжатие данных либо связанная с игрой. Задача формулируется с помощью языка Haskell. Затем с помощью методов функционального программирования «скелет» программы начинает обрастать различными готовыми функциями. Таким образом читатель сможет лучше вникнуть в суть того или иного алгоритма.

***
Алгоритмы. Вводный курс

Алгоритмы. Вводный курс

Если «Алгоритмы. Построение и анализ» — фундаментальный труд, призванный дать максимум информации по тем или иным алгоритмам, то книга «Алгоритмы. Вводный курс», написанная тем же профессором информатики Томасом Корменом, рассчитана на аудиторию, не готовую осилить труд в 1300 страниц. Так что если вы — один из таких, но, тем не менее, вам необходимо ознакомиться с алгоритмами, то эта книга для вас.

***
Алгоритмы. Построение и анализ

Алгоритмы. Построение и анализ

Ещё одна увесистая книга по алгоритмам, впервые изданная в 1990 году в Массачусетском технологическом институте с авторством местных преподавателей. Несмотря на то, что написана она простым и понятным языком, из-за объёма и подачи материала (каждая глава имеет законченный вид) использовать лучше в качестве справочника, периодически обращаясь к нужной информации.

***
Искусство программирования

Искусство программирования

Искусство программирования — монументальный труд Дональда Кнута. Серия книг состоит из 4 томов, каждый из которых охватывает определенные виды алгоритмов. Это классика, которую до сих пор в обязательном порядке проходят в ВУЗах. Материал подан в достаточно сложном формате, но и цель у книг особенная — рассказать наиболее полно о существующих алгоритмах.

***
Алгоритмические трюки для программистов

Алгоритмические трюки для программистов

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

Во втором издании был добавлен материал о CRC, кодах с коррекцией ошибок (ECC), различных методах деления на константы (например, с помощью сдвигов байтов) и о многом другом.

***
Алгоритмы. Справочник с примерами на C, C++, Java и Python

Алгоритмы. Справочник с примерами на C, C++, Java и Python

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

***

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

***
Purely Functional Data Structures

Purely Functional Data Structures

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

***
Matters Computational

Matters Computational

В этой книге рассматривается огромное количество различных низкоуровневых алгоритмов. Для реализации примеров используется C++. Рекомендуем к прочтению всем, кто так или иначе работает с вычислениями.

***
Text Algorithms

Text Algorithms

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

***
The Design of Approximation Algorithms

The Design of Approximation Algorithms

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

***
Data Structures and Algorithms

Data Structures and Algorithms

Авторы книги преследовали три цели: объяснить основные алгоритмы как можно проще и при этом точнее, снабдить их диаграммами и написать понятные листинги на псевдокоде, которые можно без особых проблем перевести на C++, C# и Java. Удалось ли им это — прочтите и узнаете ?

***
Data Structures (Into Java)

Data Structures (Into Java)

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

***

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

***
Open Data Structures

Open Data Structures

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

***
Elementary Algorithms

Elementary Algorithms

В этой книге описаны реализации основных алгоритмов и структур данных. Для наглядности приведено много иллюстраций и примеров кода на Haskell, C/C++, Python и Scheme. При этом рассматривается не только процедурный, но и функциональный подход к решению задач.

***
Handbook of Graph Drawing and Visualization

Handbook of Graph Drawing and Visualization

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

***
Think Data Structures

Think Data Structures

Это относительно небольшая книга, автор которой постарался нескучным языком познакомить читателей со структурами данных и алгоритмами. В конце каждой темы есть упражнения для самостоятельной проверки (решения доступны на GitHub). Читателям крайне рекомендуется знать Java.

***

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

121274