Изучаем алгоритмы: полезные книги, веб-сайты, онлайн-курсы и видеоматериалы

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

Воодушевленный 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.

Видеоматериалы:

Инструменты

Некоторые инструменты, которые помогут вам в освоении алгоритмов

  • flow-chart.js — Иструмент, помогающий вам создавать диаграммы и схемы, которые могут моделировать алгоритмы.
  • interactive-coding-challenges — Интерактивные задачки по алгоритмам и структурам данных.