Алгоритмы на графах для ЕГЭ по информатике
Разберем ключевые алгоритмы работы с графами, которые встречаются в заданиях ЕГЭ.
1. Минимальное остовное дерево
Остовное дерево — подграф, который является деревом и содержит все вершины исходного графа.
Минимальное остовное дерево (МОД) — остовное дерево с минимальной суммой весов его рёбер.
Алгоритм Крускала
Алгоритм Прима
Сравнение алгоритмов
| Критерий | Алгоритм Крускала | Алгоритм Прима |
|---|---|---|
| Сложность | O(E log V) | O(V²) или O(E + V log V) |
| Используемые структуры | Система непересекающихся множеств | Очередь с приоритетом |
| Подход | Жадный, на основе рёбер | Жадный, на основе вершин |
2. Количество путей в ориентированном ациклическом графе (DAG)
Ориентированный ациклический граф (DAG) — граф без циклов с ориентированными рёбрами.
Алгоритм подсчёта путей
Пример топологической сортировки
Топологический порядок: A, B, C, D, E, F
3. Алгоритм Дейкстры
Алгоритм Дейкстры находит кратчайшие пути от одной вершины до всех остальных в графе с неотрицательными весами.
Шаги алгоритма
Сложность алгоритма Дейкстры
| Структура данных | Сложность |
|---|---|
| Массив | O(V²) |
| Двоичная куча | O((V+E) log V) |
| Фибоначчиева куча | O(E + V log V) |
Примеры задач
Пример 1: Минимальное остовное дерево
Найдите минимальное остовное дерево для графа с вершинами A, B, C, D и рёбрами:
- A-B: вес 3
- A-C: вес 1
- B-C: вес 2
- B-D: вес 4
- C-D: вес 5
Решение: Рёбра МОД: A-C(1), B-C(2), B-D(4). Сумма весов: 7.
Пример 2: Количество путей в DAG
Сколько различных путей от вершины A до вершины D в графе:
A → B, A → C, B → D, C → D
Решение: 2 пути (A→B→D и A→C→D).
Пример 3: Алгоритм Дейкстры
Найдите кратчайшие пути от вершины A до всех остальных:
A --2-- B
| |
4 3
| |
C --1-- D
Решение:
- A→A: 0
- A→B: 2
- A→C: 4
- A→D: 5 (A→B→D)
Заключение
Эти алгоритмы являются фундаментальными для работы с графами и часто встречаются в задачах ЕГЭ по информатике. Понимание их работы и умение применять на практике — ключ к успешному решению задач.
Для закрепления материала рекомендуется решать практические задачи и реализовывать алгоритмы на языке программирования.