30 Мая в 19:40
38 +2
0
Ответы
1
Ниже большой набор примеров алгоритмов, разбитых по категориям. Для каждой записи — название, краткое описание и асимптотика (в KaTeX).
Сортировка
- Пузырьковая сортировка — простая обменная, стабильная, худшая O(n2)O(n^2)O(n2).
- Сортировка вставками — эффективна для почти отсортированных, худшая O(n2)O(n^2)O(n2).
- Сортировка выбором — выбирает минимум/максимум, худшая O(n2)O(n^2)O(n2).
- Сортировка слиянием — divide-and-conquer, стабильная, O(nlog⁡n)\;O(n\log n)O(nlogn).
- Быстрая сортировка (Quicksort) — средняя O(nlog⁡n)\;O(n\log n)O(nlogn), худшая O(n2)\;O(n^2)O(n2).
- Пирамидальная сортировка (Heapsort) — O(nlog⁡n)O(n\log n)O(nlogn), невозм. дополнительная память O(1)O(1)O(1).
- Counting sort — для целых в диапазоне, O(n+k)\;O(n + k)O(n+k).
- Radix sort — по цифрам, O(d(n+k))\;O(d(n + k))O(d(n+k)).
- Bucket sort — распределительная, средняя O(n+k)\;O(n + k)O(n+k).
Поиск
- Линейный поиск — O(n)\;O(n)O(n).
- Бинарный поиск — отсортированный массив, O(log⁡n)\;O(\log n)O(logn).
- Интерполяционный поиск — лучше для равномерного распределения, среднее ~ O(log⁡log⁡n)\;O(\log \log n)O(loglogn).
- Поиск в хеш-таблице — амортизированное O(1)\;O(1)O(1).
Строковые алгоритмы
- KMP (Кнута-Морриса-Пратта) — поиск подстроки за O(n+m)\;O(n + m)O(n+m).
- Rabin–Karp — хеширование, среднее O(n+m)\;O(n + m)O(n+m).
- Бойер–Мур — сдвиги по плохому символу/хорошему суффиксу, эффективен на практике.
- Z-функция — строит Z-массив за O(n)\;O(n)O(n).
- Суффиксный массив + LCP — построение O(nlog⁡n)\;O(n\log n)O(nlogn) или O(n)\;O(n)O(n).
- Суффиксное дерево (Ukkonen) — O(n)\;O(n)O(n).
Графовые алгоритмы
- BFS (поиск в ширину) — кратчайшие пути в невзвешенном графе, O(V+E)\;O(V+E)O(V+E).
- DFS (поиск в глубину) — обход, топологическая сортировка, O(V+E)\;O(V+E)O(V+E).
- Dijkstra — кратчайшие пути (неотриц. веса), O((V+E)log⁡V)\;O((V+E)\log V)O((V+E)logV) с кучей.
- Bellman–Ford — кратчайшие пути с отриц. ребрами, O(VE)\;O(VE)O(VE).
- Floyd–Warshall — все-пары кратчайших путей, O(V3)\;O(V^3)O(V3).
- Johnson — все-пары для разреженных графов, использует Dijkstra.
- Prim — MST с кучей, O(Elog⁡V)\;O(E\log V)O(ElogV).
- Kruskal — MST через сортировку ребер и DSU, O(Elog⁡E)\;O(E\log E)O(ElogE).
- Borůvka — параллельный подход к MST.
- Tarjan — компоненты сильно связности, O(V+E)\;O(V+E)O(V+E).
- Kosaraju — SCC через два прохода DFS, O(V+E)\;O(V+E)O(V+E).
- Топологическая сортировка — для DAG, O(V+E)\;O(V+E)O(V+E).
- Edmonds–Karp — max flow (BFS), O(VE2)\;O(VE^2)O(VE2).
- Dinic — max flow с уровнями, O(EV)\;O(E\sqrt V)O(EV ) на практике.
- Push–relabel — max flow, эффективен на плотных графах.
- A* — эвристический поиск кратчайшего пути, зависит от эвристики.
Декомпозиция и структуры данных
- Union-Find (DSU) — объединение множеств, почти амортизированное α(n)\alpha(n)α(n).
- Fenwick tree (BIT) — суммы/обновления, O(log⁡n)\;O(\log n)O(logn).
- Segment tree — диапазонные запросы и обновления, O(log⁡n)\;O(\log n)O(logn).
- Treap, AVL, Red–Black tree — сбалансированные BST, операции O(log⁡n)\;O(\log n)O(logn).
- B-tree/B+tree — структуры для диска, поиски O(log⁡n)\;O(\log n)O(logn).
- LRU cache (реализация c хеш + двусвязный список) — амортизированное O(1)\;O(1)O(1).
- Bloom filter — приближенная проверка принадлежности, память/ошибка в O(k)\;O(k)O(k).
Динамическое программирование и комбинаторика
- Задача 0/1 knapsack — DP O(nW)\;O(nW)O(nW).
- Unbounded knapsack — вариация DP.
- Longest Common Subsequence (LCS) — классический DP O(nm)\;O(nm)O(nm).
- Longest Increasing Subsequence (LIS) — DP O(n2)\;O(n^2)O(n2) или patience + бинарный поиск O(nlog⁡n)\;O(n\log n)O(nlogn).
- Coin change — минимум монет DP O(nm)\;O(nm)O(nm).
- Вектор состояния для DP по битам (bitmask DP) — O(2nn)\;O(2^n n)O(2nn).
- Held–Karp — TSP DP по подмножествам, O(n22n)\;O(n^2 2^n)O(n22n).
Численные и алгебраические
- Евклид (GCD) — O(log⁡min⁡(a,b))\;O(\log \min(a,b))O(logmin(a,b)).
- Расширенный Евклид — находит коэффициенты, O(log⁡min⁡(a,b))\;O(\log \min(a,b))O(logmin(a,b)).
- Быстрое возведение в степень (fast pow) — O(log⁡n)\;O(\log n)O(logn).
- Сифр Эратосфена — простые до NNN, O(Nlog⁡log⁡N)\;O(N \log\log N)O(NloglogN).
- Миллер–Рабин — вероятный тест простоты (рандомизированный).
- Pollard's rho — факторизация случайного типа.
- FFT (БПФ) — умножение полиномов/чисел, O(nlog⁡n)\;O(n \log n)O(nlogn).
- Newton–Raphson — корни уравнений (итеративно).
- Kalman filter — оценка состояния линейной динамики.
Геометрические алгоритмы
- Graham scan — выпуклая оболочка, O(nlog⁡n)\;O(n\log n)O(nlogn).
- Jarvis march (gift wrapping) — выпуклая оболочка, O(nh)\;O(nh)O(nh).
- Алгоритм «разделяй и властвуй» для ближайшей пары точек — O(nlog⁡n)\;O(n\log n)O(nlogn).
- Sweep line (шаблон) — пересечения отрезков, периметры, O((n+k)log⁡n)\;O((n+k)\log n)O((n+k)logn).
- Triangulation (Delaunay) — триангуляция.
Вероятностные и рандомизированные
- Randomized quicksort — ожидаемое O(nlog⁡n)\;O(n\log n)O(nlogn).
- Монте‑Карло — численное интегрирование/симуляции, ошибка ~ O(1/N)\;O(1/\sqrt{N})O(1/N ).
- Las Vegas алгоритмы — всегда правильны, время случайно.
- Reservoir sampling — выбор kkk элементов из потока длины неизвестной, O(n)\;O(n)O(n) время, O(k)\;O(k)O(k) память.
- Count–min sketch — приближённые частоты в стриме, память/погрешность в функциях параметров схемы.
Компрессия и кодирование
- Huffman coding — префиксный код минимальной средней длины.
- Arithmetic coding — более плотное кодирование.
- LZW — словарная компрессия.
- Run-length encoding — для подряд идущих повторов.
Криптография
- RSA — шифрование на основе факторизации, экспоненцирование по модулю.
- Diffie–Hellman — протокол обмена ключами.
- AES — симметричное блочное шифрование.
- SHA (хеш) — криптографические хеши.
- ElGamal, ECC-алгоритмы.
Поисковые и ранжирующие
- PageRank — ранжирование ссылок (итеративный метод).
- TF–IDF + cosine similarity — поиск релевантности текстов.
- Viterbi — наивероятнейший путь в HMM, O(nS2)\;O(nS^2)O(nS2) (зависит от модели).
Оптимизация и эвристики
- Градиентный спуск — минимизация дифференцируемых функций.
- Стохастический градиентный спуск (SGD) — для больших данных.
- Newton / quasi-Newton (BFGS) — быстрое схождение при доступных градиентах/Гессианах.
- Симуляция отжига (Simulated annealing) — стохастическая глобальная оптимизация.
- Генетические алгоритмы — эволюционные приближения.
- Branch and bound — точный перебор с отсечениями.
Машинное обучение (кл. алгоритмы)
- k-NN — ленивый классификатор, время запроса O(n)\;O(n)O(n).
- Decision trees — CART/ID3/C4.5.
- Random forest — ансамбль деревьев.
- SVM — опорные векторы (линейные/ядровые).
- k-means — кластеризация (итеративно).
- EM (Expectation–Maximization) — для скрытых переменных.
- PCA — метод главных компонент (SVD).
Потоки, большие данные и распределённые
- MapReduce — модель обработки больших данных (мап + редьюс).
- Spark RDD transformations — ленивые трансформации данных.
- Consistent hashing — распределение ключей между узлами.
- Paxos, Raft — консенсус в распределённых системах.
- Two-phase commit — распределённые транзакции.
Алгоритмы в играх и ИИ
- Minimax — для двух игроков, полный перебор.
- Alpha–beta pruning — отсечение в minimax.
- Monte Carlo Tree Search (MCTS) — для игр с большим деревом ходов.
Поиск оптимальных наближений и аппроксимации
- Жадный алгоритм для Set Cover — приближение O(log⁡n)\;O(\log n)O(logn).
- PTAS/FPTAS — приближающие схемы для NP‑трудных задач.
Другое важное
- Viterbi, Baum–Welch — HMM алгоритмы.
- Bellman equations — для динамического программирования и MDP.
- PageRank (итерации собственного вектора) — метод степенной итерации.
- Aho–Corasick — поиск множества шаблонов, O(n+total_pattern_len+occurrences)\;O(n + \text{total\_pattern\_len} + \text{occurrences})O(n+total_pattern_len+occurrences).
- ZKW / Hungarian — алгоритмы для задач назначения (Hungarian O(n3)\;O(n^3)O(n3)).
- Simplex — линейное программирование (неполиномиальное в худшем случае, на практике быстро).
- Edmonds' blossom — максимальное паросочетание в общем графе, O(n3)\;O(n^3)O(n3).
Если нужно, могу расширить любую из категорий и привести код/псевдокод, доказательства корректности или сравнение по применимости и памяти.
30 Мая в 19:41
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир