В этой подборке представлен список книг, веб-сайтов и онлайн-курсов, дающих понимание как простых, так и продвинутых алгоритмов.
Воодушевленный awesome-awesomeness и некоторыми другими шикарными библиотеками, я написал список лучших, на мой взгляд, источников для изучения и практики знаний алгоритмов. Если вы хотите поспособствовать развитию списка, пожалуйста, прочтите Гайд по развитию списка.
Веб-сайты
Веб-сайты, которые вам стоит использовать, чтоб выучить классические алгоритмы:
- A Visual Guide to Graph Traversal Algorithms — Интерактивная визуализация показывает, как работает алгоритм поиска в глубину графа.
- Algomation — Поучительное и анимированное описание алгоритмов.
- Algorithm Visualizer — Тонны анимированых алгоритмов (с кодом, конечно же), можно также создавать свои алгоритмы.
- Algorithms Visualization — Коротенькая статья, посвящённая визуализации алгоритмов.
- Big-O Cheat Sheet — Сложности повседневных алгоритмов, используемых в анализе данных.
- Data Structure Visualizations — Визуализируйте поведение структур данных и делайте операции с ними.
- Geeks for Geeks — Много-много хорошо объяснённых и реализованных алгоритмов.
- Rosetta Code — Хрестоматия по программированию, цель которой — показать использование множества алгоритмов и структур данных в разных языках программирования.
- Sorting Algorithms — Красивые и простые анимации алгоритмов сортировки, не без коротеньких примеров с кодом и их обсуждений.
- Stoimen’s web log — Некоторые алгоритмы, которые очень понятно объяснены.
- VisuAlgo — Визуализация структур данных и алгоритмов посредством анимации.
- Wikipedia — Algorithms — Ко-неч-но-же!
- Wikipedia — Data Structures — А почему бы и нет?
Онлайн-курсы
Бесплатные и качественные курсы онлайн:
- Algorithms: Divide and Conquer, Sorting and Searching, and Randomized Algorithms — Основные темы: асимптотика («Большое О(х)»), сортировка и поиск, разделяй и властвуй, а также другие разные алгоритмы.
- Algorithms: Graph Search, Shortest Paths, and Data Structures — Основные темы: структуры данных, графы и их применения.
- Algorithms: Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming — Основные темы: жадные алгоритмы и динамическое программирование.
- Algorithms: Shortest Paths Revisited, NP-Complete Problems and What To Do About Them — Основные темы: кратчайший путь, NP-полные задачи и что это все значит для разработчика.
- Algorithms, Part 1 — Этот курс затрагивает необходимую информацию об алгоритмах и структурах данных, в которой нуждается каждый программист, который серьезно относится к своему делу. Курс рассказывает о структурах данных, сортировке и алгоритмах поиска.
- Algorithms, Part 2 — Вторая часть курса, которая сфокусирована на жадном алгоритме и динамических парадигмах, а также на NP-полных задачах.
- Khan Academy Algorithms — курс по алгоритмам, созданный Томасом Корменом и Девином Балккомом.
- MIT-6-006 — Хорошо описанные алгоритмы.
- MIT-6-046j — Такой же курс, как и предыдущий, только с другими алгоритмами.
- MIT-6-00sc — Простое и понятное введение в алгоритмы.
- Udacity Intro to Algorithms — Курс по алгоритмам на Python.
Книги
Самые популярные книги для изучения алгоритмов:
Англоязычные:
- Algorithm Design — Раскрывает суть решения задач, встречающихся в жизни.
- Algorithms — Решения задач на Java, описание хороших практик ООП и бесплатные онлайн-курсы.
- Data Structures Using C — Примеры использования структур данных.
- Elementary Algorithms — Потрясающая книга об алгоритмах и структурах данных.
- Grokking Algorithms — Книга об алгоритмах и их практических применениях с множеством иллюстраций.
- Introduction to Algorithms — Необходима к прочтению!
- Swift Algorithms and Data Structures — Практическое руководство по теории и коду.
- The Algorithm Design Manual — Книгу легко читать, и она полна примеров из жизни.
- The Art of Computer Programming — Просто хорошая книга.
Русскоязычные:
Новичку
- Алгоритмы на Java — Исчерпывающее толкование структур данных и алгоритмов сортировки, поиска, обработки графов и строк, включая пятьдесят алгоритмов, которые должен знать каждый программист.
- Алгоритмы. Вводный курс — Книга предназначена для всех, кого интересуют вопросы, связанные с компьютерными алгоритмами, но отсутствие времени не позволяет взяться за серьезный труд.
- Карты метро и нейронные сети. Теория графов — Отличная книга для тех, кому не терпится познать такой раздел математики, как Теория графов.
- Дискретная математика для программистов — Основополагающее введение в дискретную математику, без знания которой невозможно успешно заниматься информатикой и программированием.
- Дискретный анализ — Пособие написано по материалам вводного лекционного курса математико-механического факультета Санкт-Петербургского государственного университета.
- Дискретная математика — В этом учебнике изложены все основные разделы дискретной математики и описаны важнейшие алгоритмы на дискретных структурах данных.
- Problem Solving with Algorithms and Data Structures (перевод) — Изложение в книге идёт от простого (что такое алгоритм, как оценить его производительность) к сложному (деревья, графы) с живыми примерами и кодом.
- Алгоритмы — В этой книге подробно разбираются основные методы построения и анализа эффективных алгоритмов.
- Структуры данных и алгоритмы в Java — Помимо простых и ясных примеров, автор приводит небольшую демонстрационную программу, которую можно запустить в веб-браузере.
- Анализ алгоритмов. Вводный курс — Особое внимание уделено алгоритмам параллельной обработки, редко освещаемым в литературе на русском языке.
- Программирование: теоремы и задачи — Книга содержит задачи (с решениями) по программированию различной трудности.
- Алгоритмы. Теория и практическое применение — Из этой книги вы узнаете, где алгоритмы применяются и как их анализировать, чтобы понять их поведение.
Знающему основы для углубленного изучения
- Алгоритмические трюки для программистов — В этой книге автор делится с читателями разнообразными приёмами из своей коллекции в области прикладного и системного программирования.
- Автоматное программирование — В книге рассматривается автоматное программирование — подход к разработке программных систем со сложным поведением, основанный на модели автоматизированного объекта управления
- Алгоритмы + структуры данных = программы — Книга содержит описание и анализ основных алгоритмов, методов построения программ.
- Алгоритмы и структуры данных. Новая версия для Оберона — В классическом учебнике тьюринговского лауреата аккуратно, на тщательно подобранных примерах прорабатываются основные темы алгоритмики — сортировка и поиск, рекурсия, динамические структуры данных.
- Введение в теорию автоматов, языков и вычислений — Книга известных американских ученых посвящена теории автоматов и соответствующих формальных языков и грамматик.
Профессионалу
- Теория и практика С++ — Книга посвящена обсуждению сложных вопросов программирования., каких как реализация разреженных массивов, алгоритмы шифрования и сжатия данных, а также проблемы разработки собственных языков программирования и написания интерпретаторов для них.
- Искусство программирования — Эта книга была признана одной из двенадцати лучших физико-математических монографий столетия.
- Алгоритмы. Построение и анализ — Книга удачно объединяет в себе полноту охвата и строгость изложения материала.
- Algolist. Алгоритмы, методы, исходники — Огромный список разнообразных алгоритмов по математике, графике, кодированию, сортировкам, структурам данных, нервным сетям и многому другому.
Github библиотеки
Реализация большинства классических алгоритмов во многих языках программирования
C
CoffeeScript
C#
C++
Erlang
Go
Java
JavaScript
Objective-C
Python
Ruby
Scala
Swift
Языково-независимые
Онлайн-практика алгоритмов
Онлайн-практика для того, чтоб оттачивать свои навыки:
- ACM-ICPC Live Archive — Сотни задач с предыдущих региональных состязаний ACM-ICPC и мировых состязаний World Finals.
- AIZU ONLINE JUDGE — Японская онлайн практика.
- CodeChef — Больше задач и ежемесячные состязания.
- Codeforces — Единственный сайт, где можно посостязаться в знаниях платформы Web 2.0.
- CodeWars — Веб-сайт, который предлагает задачи по алгоритмам на многих языках и для многих уровней сложности.
- CoderByte — Скромный веб-сайт с задачами на оттачивание алгоритмов для начального и продвинутого уровней. Поддерживает множество популярных языков программирования, таких как С++, Python, JavaScript, Ruby и так далее.
- HackerEarth — Решайте задачи, используя алгоритмы и принимайте участие в решении задач, которые задают при приёме на работу.
- HackerRank — Онлайн практика по известным алгоритмам и функциональном программировании.
- Infoarena — Румынская онлайн-практика. 1500+ задач по алгоритмам.
- LavidaOnlineJudge — Корейская онлайн-практика(около половины на английском) 1300+ задач.
- Learneroo Algorithms Tutorials — Учитесь и практикуйтесь в написании алгоритмов, решая задачи онлайн.
- LeetCode — Выучите алгоритмы и подготовьтесь к интервью.
- PKU JudgeOnline — Китайская онлайн-практика.
- ProjectEuler — Математические задачи, которые могут быть решены с использованием алгоритмов (или даже с помощью карандаша, зависит от того, сколько вы уже знаете).
- Rosalind — Платформа для изучения биоинформатики и программирования, решая задачи.
- ShareCode — Онлайн практика и состязания с множеством задач по алгоритмам.
- Snakify — Вводный курс по Python с 100+ задачами по алгоритмам и отладке (российский).
- SPOJ — Еще больше задач.
- TopCoder — Множество задач по графическому дизайну, анализу данных и разработки в целом.
- URI — Бразильская онлайн-практика. Не так много задач по сравнению с конкурентами, но их база растет, а также у них есть онлайн-состязания.
- UVA — Ещё много задач с предыдущих региональных состязаний ACM-ICPC и мировых состязаний World Finals.
Видеоматериалы:
- Алгоритмы от Владимира Моженкова — Видеоуроки по алгоритмам, материал которых будет понятен новичкам.
- Типы и структуры данных от Владимира Моженкова — Видеоуроки по структурам данных, материал которых будет понятен новичкам.
- Алгоритмы и структуры данных, Первый семестр — Серия видеоуроков, посвященная продвинутым алгоритмам и структурам данных.
- Алгоритмы и структуры данных, Второй семестр — Ну и продолжение первых двух частей лекций по уже более сложным алгоритмам и структурам данных.
- Алгоритмы и структуры данных. Подготовительный курс — Цель курса — ознакомить слушателей с основными алгоритмами, применяемыми для разработки программного обеспечения.
- Введение в алгоритмы — Серия видеоуроков, которая посвящена введению новичков в основы алгоритмов
- С++ алгоритмы — Реализация самых распространённых алгоритмов на С++
- Алгоритмы и структуры данных — Подборка видеоуроков об алгоритмах и структурах данных от Computer Science Center
- Алгоритмы в биоинформатике — Широкий обзор разделов биоинформатики с упором на методы чтения генома, а также на алгоритмы сравнения строк и алгоритмы неточного поиска подпоследовательностей в больших текстах.
Инструменты
Некоторые инструменты, которые помогут вам в освоении алгоритмов
- flow-chart.js — Иструмент, помогающий вам создавать диаграммы и схемы, которые могут моделировать алгоритмы.
- interactive-coding-challenges — Интерактивные задачки по алгоритмам и структурам данных.