1. Алгоритмы сортировки
Алгоритмы сортировки используются для упорядочивания элементов в определенном порядке (например, по возрастанию или убыванию).
-
Простые сортировки: сортировка пузырьком, сортировка вставками, сортировка выбором.
-
Эффективные сортировки: быстрая сортировка, сортировка слиянием, пирамидальная сортировка, tim-sort.
-
Сортировки для специализированных данных: сортировка подсчетом, поразрядная сортировка, сортировка с учетом ключа (например, на основе сравнения строк).
2. Алгоритмы поиска
Алгоритмы поиска помогают находить элементы в данных или решать задачи поиска.
-
Поиск в линейных структурах данных: линейный поиск.
-
Поиск в отсортированных структурах: бинарный поиск, интерполяционный поиск.
-
Поиск в графах: поиск в ширину (BFS), поиск в глубину (DFS), алгоритм Дейкстры, алгоритм Флойда-Уоршелла.
3. Алгоритмы на графах
Эти алгоритмы предназначены для работы с графами, включая поиск кратчайших путей, минимальные остовные деревья и т.д.
-
Поиск кратчайших путей: алгоритм Дейкстры, алгоритм Беллмана-Форда, алгоритм А*.
-
Минимальное остовное дерево: алгоритм Краскала, алгоритм Прима.
-
Циклические алгоритмы: алгоритм Тарьяна для поиска компонент сильной связности, топологическая сортировка.
4. Алгоритмы на строках
Эти алгоритмы используются для работы с текстами, строками и их подстроками.
-
Поиск подстроки: алгоритм Кнута-Морриса-Пратта (KMP), алгоритм Бойера-Мура, алгоритм Рабина-Карпа.
-
Сжатие данных: алгоритмы сжатия, такие как Лемпеля-Зива (LZ77, LZ78), алгоритм Хаффмана.
-
Обработка строк: нахождение наибольшей общей подпоследовательности, алгоритмы редактирования строк (расстояние Левенштейна).
5. Алгоритмы на динамическом программировании
Динамическое программирование используется для решения задач, которые можно разбить на подзадачи, с последующим комбинированием их решений.
-
Классические задачи динамического программирования: задача о рюкзаке, задача о наибольшей общей подпоследовательности, задача о разбиении чисел.
-
Алгоритмы для оптимизации: алгоритм Кнута-Морриса-Пратта, алгоритм Флойда для нахождения кратчайших путей.
6. Алгоритмы на жадных методах
Жадные алгоритмы принимают локально оптимальные решения на каждом шаге, с надеждой, что это приведет к глобально оптимальному решению.
-
Задачи с жадными методами: задача о размене монет, задача о задаче на минимальное остовное дерево (алгоритм Краскала, Прима).
-
Задачи с покрытием: задача о покрытии множества, задача о наибольшем независимом множестве.
7. Алгоритмы на поиске и оптимизации
Алгоритмы для поиска оптимальных решений в больших пространствах.
-
Поиск с возвратом: поиск в глубину с возвратом, задачи, такие как задача о назначениях, задачи на покрытие.
-
Методы оптимизации: симплекс-метод для линейного программирования, градиентный спуск, методы случайного поиска.
8. Алгоритмы на численных вычислениях
Алгоритмы, используемые для решения задач численных вычислений.
-
Решение линейных систем: метод Гаусса, метод Якоби.
-
Численные интеграции и дифференциации: метод Эйлера, метод Рунге-Кутты.
-
Решение задач на оптимизацию: метод наименьших квадратов, методы оптимизации для нелинейных задач.
9. Алгоритмы для обработки данных и машинного обучения
Алгоритмы, используемые в статистике, машинном обучении и обработке данных.
-
Методы обучения с учителем: линейная регрессия, логистическая регрессия, деревья решений, нейронные сети.
-
Методы обучения без учителя: кластеризация, алгоритм k-средних, алгоритм DBSCAN.
-
Методы для работы с большими данными: алгоритмы MapReduce, алгоритмы для работы с потоковыми данными.
10. Алгоритмы для работы с распределенными системами
1. Алгоритмы хеширования
-
Распределённое хеширование (Consistent Hashing):
-
Применяется для распределения данных по узлам в распределённых системах.
-
Используется, например, в распределённых хранилищах данных, таких как Cassandra и DynamoDB.
-
С помощью этого метода данные равномерно распределяются по узлам, и система остается сбалансированной, даже если добавляются или удаляются узлы.
-
-
Хеширование с использованием блум фильтров:
-
Как уже упоминалось, блум фильтры помогают быстро проверять, существует ли элемент в распределённой базе данных, минимизируя количество ненужных запросов.
-
Используются для оптимизации поиска, особенно в кэш-системах и распределённых хранилищах данных.
-
Применяется для фильтрации несуществующих элементов, что ускоряет поиск и снижает нагрузку на систему.
-
2. Алгоритмы для индексирования
-
B-деревья:
-
Используются для индексирования и поиска в распределённых базах данных.
-
Позволяют эффективно искать, вставлять и удалять элементы, и обеспечивают балансировку индексов, что важно в распределённых системах.
-
Применяются в таких системах как Cassandra, MongoDB для создания индексных структур.
-
-
R-деревья:
-
Эти деревья используются для поиска по диапазонам и пространственным данным, например, для геопространственных запросов.
-
В распределённых базах данных, таких как PostGIS (расширение PostgreSQL для работы с географическими данными), R-деревья помогают эффективно обрабатывать геопространственные запросы.
-
3. Алгоритмы поиска и обработки данных
-
MapReduce:
-
Метод, который используется для обработки и поиска информации в больших распределённых системах.
-
Этот алгоритм позволяет распараллелить обработку данных, что делает его идеальным для обработки больших объемов данных в распределённых системах.
-
Применяется в таких системах, как Hadoop и Google BigQuery, для выполнения распределённых вычислений и обработки запросов.
-
-
**Алгоритмы поиска на основе принципа Broadcast:
-
Этот метод используется для распространения запроса на все узлы в распределённой сети.
-
Применяется в некоторых распределённых системах, где необходимо запросить все данные, находящиеся на разных узлах.
-
4. Алгоритмы для поиска в распределённых индексах
-
Алгоритм Raft и Paxos (консенсусные алгоритмы):
-
Эти алгоритмы применяются для обеспечения согласованности данных на различных узлах в распределённых системах.
-
Используются для гарантирования того, что все узлы видят одно и то же состояние данных.
-
Применяются в распределённых хранилищах и базах данных, таких как Etcd, Consul, Cassandra.
-
-
Distributed Hash Tables (DHT):
-
Это алгоритм для распределённого поиска в сети, например, в BitTorrent и Kademlia.
-
Он помогает эффективно находить узлы и данные, распределённые по сети.
-
5. Алгоритм шардирования
-
Шардирование данных на несколько частей (шардов) с целью оптимизации поиска.
-
Этот метод позволяет разделить данные на несколько групп, каждая из которых хранится на отдельном сервере (или узле), что ускоряет поиск и уменьшает нагрузку на отдельные компоненты системы.
-
Применяется во многих распределённых базах данных, таких как MongoDB, Cassandra, MySQL Cluster.
6. Алгоритмы для поиска в потоковых данных
-
Алгоритмы для обработки потоков данных:
-
В распределённых системах для поиска часто используются алгоритмы для обработки потоков данных в реальном времени, такие как Apache Kafka и Apache Flink.
-
Эти системы применяют свои алгоритмы для распределённого поиска и анализа данных, что позволяет обрабатывать запросы по мере поступления данных.
-
11. Алгоритмы на теории чисел
Эти алгоритмы связаны с теоретическими вычислениями, такими как операции с большими числами и теоремы.
-
Алгоритмы для факторизации: алгоритм Эратосфена, алгоритм для поиска простых чисел.
-
Алгоритмы для работы с криптографией: алгоритмы RSA, алгоритм Диффи-Хеллмана.
12. Алгоритмы для работы с базами данных
Алгоритмы, применяемые для работы с базами данных, индексации и поиска.
-
Поиск в индексах: алгоритм B-деревьев, R-деревья.
-
Алгоритмы для выполнения запросов: алгоритмы соединения таблиц, методы оптимизации запросов.
13. Алгоритмы для работы с параллельными вычислениями
Алгоритмы, которые позволяют распараллелить задачи для повышения вычислительной мощности.
-
Методы параллельного поиска и сортировки: параллельная быстрая сортировка, параллельный поиск.
-
Алгоритмы для распараллеливания вычислений: алгоритм разбиения задач на блоки, алгоритм уменьшения загрузки.
14. Алгоритмы для работы с реальным временем
Эти алгоритмы предназначены для задач, где критична скорость отклика.
-
Алгоритмы с ограничениями времени: планирование задач в реальном времени, управление очередями.
-
Алгоритмы для обработки данных в реальном времени: алгоритмы обработки потоков данных.