1. Алгоритмы сортировки

Алгоритмы сортировки используются для упорядочивания элементов в определенном порядке (например, по возрастанию или убыванию).

2. Алгоритмы поиска

Алгоритмы поиска помогают находить элементы в данных или решать задачи поиска.

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. Алгоритмы для работы с реальным временем

Эти алгоритмы предназначены для задач, где критична скорость отклика.

  • Алгоритмы с ограничениями времени: планирование задач в реальном времени, управление очередями.

  • Алгоритмы для обработки данных в реальном времени: алгоритмы обработки потоков данных.