Основы алгоритмов — хендбук от Яндекса

О чём этот хендбук

Познакомьтесь с принципами проектирования, оптимизации и комбинирования алгоритмов, чтобы эффективнее работать с кодом. Разбираем алгоритмы без привязки к языкам программирования. Теория, задачи и автопроверка эффективности — чтобы понять и прокачать алгоритмическое мышление.

Зачем изучать

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

Что нужно уметь

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

Вступайте в сообщество хендбука

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

1. Введение

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

2. Основные структуры данных

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

3. Решение практических задач по программированию

Раздел проводит через полный цикл решения задач: от чтения условия и проектирования алгоритма до реализации, тестирования и отправки в систему автоматической проверки.

4. Разминка. Последовательные алгоритмы

Раздел разбирает последовательные вычисления на примере чисел Фибоначчи, наибольшего общего делителя и наименьшего общего кратного, уделяя внимание эффективности решений.

5. Графы

Раздел вводит основные понятия теории графов, способы хранения графов в памяти, обходы в глубину и ширину, поиск компонент связности и кратчайших путей.

6. Техники проектирования алгоритмов

Раздел сравнивает ключевые стратегии проектирования алгоритмов: полный перебор, жадный подход, динамическое программирование, рекурсию, «разделяй и властвуй» и рандомизацию.

7. Жадные алгоритмы

Раздел учит строить и обосновывать жадные решения на задачах о размене, выборе наиболее ценных объектов, покрытии отрезков, распределении ресурсов и специальной сортировке.

8. Динамическое программирование

Раздел показывает, как выделять состояния и переходы, переиспользовать результаты подзадач и восстанавливать ответ в задачах о размене, последовательностях, рюкзаке и выражениях.

9. Разделяй и властвуй

Раздел рассматривает двоичный поиск, быструю сортировку, подсчёт инверсий, поиск доминирующего элемента и ближайшей пары точек как применения стратегии «разделяй и властвуй».

Создано авторами при поддержке
Яндекс Образование