Какие алгоритмы должен знать уважающий себя программист?

В этом выпуске попросили экспертов перечислить алгоритмы, которые должен знать каждый уважающий себя программист. Рекомендуем дочитать до конца, там есть развёрнутый ответ в виде эссе по алгоритмической подготовке.
Материалы по перечисленным темам:
- Наша статья, посвященная пяти основным алгоритмам сортировки.
- Введение в динамическое программирование для начинающих.
- Книга, посвященная методам сжатия данных. Несколько тем, рассмотренных в книге: кодирование источников данных без памяти (канонический алгоритм Хаффмана, арифметическое сжатие, векторное квантование), словарные методы сжатия данных, методы контекстного моделирования и другие.
- Введение в структуры данных для новичков: динамический массив.
Где можно «потренировать» мозги:
Еще больше сайтов с задачками вы можете найти в нашей статье «28 сайтов, на которых можно порешать задачи по программированию».
Материалы для изучения упомянутых Александром тем:
- Алгоритмы поиска пути в графе.
- Алгоритм двоичного (бинарного) дерева поиска.
- Введение в Хеш-таблицы.
- 8 сервисов для визуализации алгоритмов.
- Введение в анализ сложности алгоритмов.
Несколько статей, которые помогут вам получить хорошую алгоритмическую подготовку:
- Алгоритмы интеллектуального анализа данных.
- Материалы по продвинутым алгоритмам и структурам данных.
- Курс по алгоритмам от Стэнфордского университета.
- Основы компьютерных наук от университета Райса.
Напоминаем, что вы можете задать свой вопрос или присоединиться к числу экспертов.