Данная статья содержит не только самые распространенные алгоритмы и структуры данных, но и более сложные вещи, о которых вы могли не знать. Читаем и узнаем!
Если хочешь подтянуть свои знания, загляни на наш курс «Алгоритмы и структуры данных», на котором ты:
- углубишься в решение практических задач;
- узнаешь все про сложные алгоритмы, сортировки, сжатие данных и многое другое.
Ты также будешь на связи с преподавателем и другими студентами.
В итоге будешь браться за сложные проекты и повысишь чек за свою работу 🙂
Я предполагаю, что вы знаете как минимум один язык программирования и такие понятия, как объект и указатель. Алгоритмы и структуры данных будут перечисляться по степени их сложности.
Для начала давайте начнем с линейных структур данных и алгоритмов
- Массивы
- Связный список
- Стек
- Очереди
Перейдем к базовым алгоритмам
- Сортировка - Сортировка слиянием, Сортировка вставками, Быстрая сортировка, Сортировка пузырьком.
- Умножение матриц (Не обязательно реализовывать, главное - знать алгоритм)
- Основные алгоритмы просеивания
- Модульная арифметика
- Алгоритм Евклида для нахождения НОД (наибольший общий делитель), Модульная инверсия, Быстрое возведение в степень
- Числа Фибоначчи с матричным умножением
- Нормальное распределение и математическое ожидание
- Статистика – среднее вероятностное значение случайной величины, медиана, дисперсия, теорема Байеса
Также можно изучить популярные алгоритмические методы:
- Алгоритмы декомпозиции – Бинарный поиск, Нахождение подмассива с наибольшей суммой элементов
- Жадные алгоритмы – Выбор задач, кодирование по алгоритму Хаффмана
- Динамичное программирование – Цепное матричное умножение, Алгоритм решения задачи по укладке ранца
- Линейное программирование – Максимизация параметра, Линейное время сортировки
- Криптографические алгоритмы – Алгоритм Манакера по нахождению длиннейшей подстроки-палиндрома, алгоритм нахождения наибольшей общей подпоследовательности (LSC), расстояние Левенштейна
Теперь перейдем к типичным нелинейным структурам данных
- Деревья – Бинарное дерево, Дерево общего вида, Наименьший общий предок
- Бинарное дерево поиска – Симметричный обход, Обход по уровням, Нахождение k’ого наибольшего элемента, Диаметр, Глубина, Количество узлов и т.д.
- Динамическая память – Динамический массив, Двоичная куча, Пирамидальная сортировка
- Алгоритм объединения-поиска
- Хеш-таблица – Метод нахождения коллизий (Linear Probing), Открытая адресация, Предотвращение коллизий
Рассмотрим графы
- Список смежных вершин графа, Матрица смежности графа, Взвешенные рёбра графа
- Основные алгоритмы обхода – Поиск в ширину, Поиск в глубину и т.д.
- Алгоритмы нахождения кратчайшего пути - Алгоритм Дейкстры, Алгоритм Флойда-Уоршелла, Алгоритм Беллмана-Форда
- Минимальное остовное дерево - Алгоритм Крускала, Алгоритм Прима
К данному моменту вы должны быть хорошо знакомы с программированием, так как для дальнейшего прочтения и углубления в данную тему вы должны знать больше, чем студент.
Усложнённые деревья и графы
- Сбалансированные деревья – AVL-дерево, Красно-черное дерево
- Heavy-light декомпозиция, Б-деревья, Дерево квадрантов
- Усложнённый граф – Минимальный разрез, Максимальный поток
- Максимальное покрытие – Теорема о свадьбах
- Гамильтонов цикл
- Рёберный граф/ Линейный граф
- Сильно связные компоненты
- Главный подграф, Покрытие вершин, Задача коммивояжёра – Алгоритм аппроксимации
Продвинутые криптографические алгоритмы:
- Алгоритм Кнута-Морриса-Пратта
- Алгоритм Рабина-Карпа
- Префиксные и суффиксные деревья
- Автоматизация суффиксов – Алгоритм Укконена
Высшая математика
- Быстрое преобразование Фурье
- Проверка простоты
- Вычислительная геометрия – Задача поиска ближайшей пары, Диаграмма Вороного, Выпуклая оболочка множества точек
Общие продвинутые темы:
- Выполнение обхода всех комбинаций/перестановок
- Поразрядная обработка
Ссылка на оригинальную статью
Перевод: Александр Давыдов
Другие статьи по теме
Объясняем известные алгоритмы сортировки на пальцах
Собеседование на должность программиста: вопросы по алгоритмам
Комментарии
А какие паровозы надо знать, чтоб быть хорошим конструктором?
Что такое беззнаковая математика? В гугле нашёл только отсылки к ассемблеру, но зачем питонеру знать команды ассемблера, к тому же такие, которые ничего не дают для понимания работы процессора и регистров памяти?
Неправильный перевод. В OG-статье написано Modular Math, i.e модульная арифметика. Для крипты нужно :)
Спасибо, не догадался исходники посмотреть )
Что за сортировка такая "Несколько взаимных перестановок"? Можно описать логику или более точное название, пожалуйста?) Просто в гугле на это название гуглится что-то с другим названием, например "Алгоритм Нарайаны" по ссылке: https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9D%D0%B0%D1%80%D0%B0%D0%B9%D0%B0%D0%BD%D1%8B
Думаю, имеется в виду сортировка пузырьком. https://ru.wikipedia.org/wiki/Сортировка_пузырьком
Что такое "Модульная инверсия"?
Это когда вместо деления используется умножение на обратное число по модулю. Например a*a^-1 = 1(mod b)