В этой подборке представлен список книг, веб-сайтов и онлайн-курсов, дающих понимание как простых, так и продвинутых алгоритмов.
Воодушевленный awesome-awesomeness и некоторыми другими шикарными библиотеками, я написал список лучших, на мой взгляд, источников для изучения и практики знаний алгоритмов. Если вы хотите поспособствовать развитию списка, пожалуйста, прочтите Гайд по развитию списка.
Веб-сайты
Веб-сайты, которые вам стоит использовать, чтоб выучить классические алгоритмы:
— Интерактивная визуализация показывает, как работает алгоритм поиска в глубину графа.
— Поучительное и анимированное описание алгоритмов.
— Тонны анимированых алгоритмов (с кодом, конечно же), можно также создавать свои алгоритмы.
— Сложности повседневных алгоритмов, используемых в анализе данных.
— Визуализируйте поведение структур данных и делайте операции с ними.
— Много-много хорошо объяснённых и реализованных алгоритмов.
— Хрестоматия по программированию, цель которой — показать использование множества алгоритмов и структур данных в разных языках программирования.
— Красивые и простые анимации алгоритмов сортировки, не без коротеньких примеров с кодом и их обсуждений.
— Некоторые алгоритмы, которые очень понятно объяснены.
— Визуализация структур данных и алгоритмов посредством анимации.
— Ко-неч-но-же!
— А почему бы и нет?
Онлайн-курсы
Бесплатные и качественные курсы онлайн:
— Основные темы: асимптотика («Большое О(х)»), сортировка и поиск, разделяй и властвуй, а также другие разные алгоритмы.
— Основные темы: структуры данных, графы и их применения.
— Основные темы: жадные алгоритмы и динамическое программирование.
— Основные темы: кратчайший путь, NP-полные задачи и что это все значит для разработчика.
— Этот курс затрагивает необходимую информацию об алгоритмах и структурах данных, в которой нуждается каждый программист, который серьезно относится к своему делу. Курс рассказывает о структурах данных, сортировке и алгоритмах поиска.
— Вторая часть курса, которая сфокусирована на жадном алгоритме и динамических парадигмах, а также на NP-полных задачах.
— курс по алгоритмам, созданный Томасом Корменом и Девином Балккомом.
— Хорошо описанные алгоритмы.
— Такой же курс, как и предыдущий, только с другими алгоритмами.
— Простое и понятное введение в алгоритмы.
— Курс по алгоритмам на Python.
Книги
Самые популярные книги для изучения алгоритмов:
Англоязычные:
— Раскрывает суть решения задач, встречающихся в жизни.
— Решения задач на Java, описание хороших практик ООП и бесплатные онлайн-курсы.
— Примеры использования структур данных.
— Потрясающая книга об алгоритмах и структурах данных.
— Книга об алгоритмах и их практических применениях с множеством иллюстраций.
— Необходима к прочтению!
— Практическое руководство по теории и коду.
— Книгу легко читать, и она полна примеров из жизни.
— Просто хорошая книга.
Русскоязычные:
Новичку
— Исчерпывающее толкование структур данных и алгоритмов сортировки, поиска, обработки графов и строк, включая пятьдесят алгоритмов, которые должен знать каждый программист.
— Книга предназначена для всех, кого интересуют вопросы, связанные с компьютерными алгоритмами, но отсутствие времени не позволяют взяться за серьезный труд.
— Отличная книга для тех, кому не терпится познать такой раздел математики, как Теория графов.
— Основополагающее введение в дискретную математику, без знания которой невозможно успешно заниматься информатикой и программированием.
— Пособие написано по материалам вводного лекционного курса математико-механического факультета Санкт-Петербургского государственного университета.
— В этом учебнике изложены все основные разделы дискретной математики и описаны важнейшие алгоритмы на дискретных структурах данных.
— Изложение в книге идёт от простого (что такое алгоритм, как оценить его производительность) к сложному (деревья, графы) с живыми примерами и кодом.
— В этой книге подробно разбираются основные методы построения и анализа эффективных алгоритмов.
— Помимо простых и ясных примеров, автор приводит небольшую демонстрационную программу, которую можно запустить в веб-браузере.
— Особое внимание уделено алгоритмам параллельной обработки, редко освещаемым в литературе на русском языке.
— Книга содержит задачи (с решениями) по программированию различной трудности.
— Из этой книги вы узнаете, где алгоритмы применяются и как их анализировать, чтобы понять их поведение.
— Основной предполагаемый читатель этой книги — молодой человек, раздумывающий, стоит ли ему заниматься этой областью человеческой деятельности или нет.
Знающему основы для углубленного изучения
— В этой книге автор делится с читателями разнообразными приёмами из своей коллекции в области прикладного и системного программирования.
— В книге рассматривается автоматное программирование — подход к разработке программных систем со сложным поведением, основанный на модели автоматизированного объекта управления
— Книга содержит описание и анализ основных алгоритмов, методов построения программ.
— В классическом учебнике тьюринговского лауреата аккуратно, на тщательно подобранных примерах прорабатываются основные темы алгоритмики — сортировка и поиск, рекурсия, динамические структуры данных.
— Книга известных американских ученых посвящена теории автоматов и соответствующих формальных языков и грамматик.
Профессионалу
— Книга посвящена обсуждению сложных вопросов программирования., каких как реализация разреженных массивов, алгоритмы шифрования и сжатия данных, а также проблемы разработки собственных языков программирования и написания интерпретаторов для них.
— Эта книга была признана одной из двенадцати лучших физико-математических монографий столетия.
— Книга удачно объединяет в себе полноту охвата и строгость изложения материала.
— Огромный список разнообразных алгоритмов по математике, графике, кодированию, сортировкам, структурам данных, нервным сетям и многому другому.
Github библиотеки
Реализация большинства классических алгоритмов во многих языках программирования
C
CoffeeScript
C#
C++
Erlang
Go
Java
JavaScript
Objective-C
Python
Ruby
Scala
Swift
Языково-независимые
Онлайн-практика алгоритмов
Онлайн-практика для того, чтоб оттачивать свои навыки:
— Сотни задач с предыдущих региональных состязаний ACM-ICPC и мировых состязаний World Finals.
— Японская онлайн практика.
— Больше задач и ежемесячные состязания.
— Единственный сайт, где можно посостязаться в знаниях платформы Web 2.0.
— Веб-сайт, который предлагает задачи по алгоритмам на многих языках и для многих уровней сложности.
— Скромный веб-сайт с задачами на оттачивание алгоритмов для начального и продвинутого уровней. Поддерживает множество популярных языков программирования, таких как С++, Python, JavaScript, Ruby и так далее.
— Решайте задачи, используя алгоритмы и принимайте участие в решении задач, которые задают при приёме на работу.
— Онлайн практика по известным алгоритмам и функциональном программировании.
— Румынская онлайн-практика. 1500+ задач по алгоритмам.
— Корейская онлайн-практика(около половины на английском) 1300+ задач.
— Учитесь и практикуйтесь в написании алгоритмов, решая задачи онлайн.
— Выучите алгоритмы и подготовьтесь к интервью.
— Китайская онлайн-практика.
— Математические задачи, которые могут быть решены с использованием алгоритмов (или даже с помощью карандаша, зависит от того, сколько вы уже знаете).
— Платформа для изучения биоинформатики и программирования, решая задачи.
— Онлайн практика и состязания с множеством задач по алгоритмам.
— Вводный курс по Python с 100+ задачами по алгоритмам и отладке (российский).
— Еще больше задач.
— Множество задач по графическому дизайну, анализу данных и разработки в целом.
— Бразильская онлайн-практика. Не так много задач по сравнению с конкурентами, но их база растет, а также у них есть онлайн-состязания.
— Ещё много задач с предыдущих региональных состязаний ACM-ICPC и мировых состязаний World Finals.
Видеоматериалы:
— Видеоуроки по алгоритмам, материал которых будет понятен новичкам.
— Видеоуроки по структурам данных, материал которых будет понятен новичкам.
— Серия видеоуроков, посвященная продвинутым алгоритмам и структурам данных.
— Ну и продолжение первых двух частей лекций по уже более сложным алгоритмам и структурам данных.
— Цель курса — ознакомить слушателей с основными алгоритмами, применяемыми для разработки программного обеспечения.
— Серия видеоуроков, которая посвящена введению новичков в основы алгоритмов
— Реализация самых распространённых алгоритмов на С++
— Подборка видеоуроков об алгоритмах и структурах данных от Computer Science Center
— Широкий обзор разделов биоинформатики с упором на методы чтения генома, а также на алгоритмы сравнения строк и алгоритмы неточного поиска подпоследовательностей в больших текстах.
Инструменты
Некоторые инструменты, которые помогут вам в освоении алгоритмов
— Иструмент, помогающий вам создавать диаграммы и схемы, которые могут моделировать алгоритмы.
— Интерактивные задачки по алгоритмам и структурам данных.