257039

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

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

Если хочешь подтянуть свои знания, загляни на наш курс «Алгоритмы и структуры данных», на котором ты:

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

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

В итоге будешь браться за сложные проекты и повысишь чек за свою работу 🙂

Интересно, хочу попробовать


Воодушевленный 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 — Интерактивные задачки по алгоритмам и структурам данных.

Лицензия
И в интересах авторского лева(материал свободный, и все его изменённые или дополненные формы должны оставаться свободными — прим. переводчика) вот наша лицензия:


Эта работа находится под лицензией Creative Commons Attribution 4.0 International License(ссылка).

Другие статьи по теме

Алгоритмы и структуры данных: развернутый видеокурс

Объясняем известные алгоритмы сортировки на пальцах

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

admin
21 февраля 2017

Какие алгоритмы нужно знать, чтобы стать хорошим программистом?

Данная статья содержит не только самые распространенные алгоритмы и структу...