Дискретная математика - Spanning Trees
Остовное дерево связного неориентированного графа $ G $ - это дерево, которое минимально включает все вершины $ G $. Граф может иметь много остовных деревьев.
пример


Минимальное связующее дерево
Остовное дерево с присвоенным весом, меньшим или равным весу каждого возможного остовного дерева взвешенного, связного и неориентированного графа $ G $, называется минимальным остовным деревом (MST). Вес остовного дерева - это сумма всех весов, присвоенных каждому краю остовного дерева.
пример

Алгоритм Крускала
Алгоритм Крускала - это жадный алгоритм, который находит минимальное остовное дерево для связного взвешенного графа. Он находит дерево этого графа, которое включает в себя каждую вершину, и общий вес всех ребер в дереве меньше или равен каждому возможному остовному дереву.
Алгоритм
Step 1 - Расположите все ребра данного графа $ G (V, E) $ в порядке возрастания в соответствии с их весом.
Step 2 - Выберите наименьшее взвешенное ребро на графике и проверьте, образует ли оно цикл с уже сформированным остовным деревом.
Step 3 - Если цикла нет, включите это ребро в остовное дерево, иначе отбросьте его.
Step 4 - Повторяйте шаги 2 и 3 до тех пор, пока в остовном дереве не останется $ (V-1) $ ребер.
Problem
Предположим, мы хотим найти минимальное остовное дерево для следующего графа G, используя алгоритм Крускала.

Solution
Из приведенного выше графика мы построим следующую таблицу -
Номер края | Пара вершин | Вес края |
---|---|---|
E1 | (а, б) | 20 |
E2 | (а, в) | 9 |
E3 | (а, г) | 13 |
E4 | (до н.э) | 1 |
E5 | (б, д) | 4 |
E6 | (б, е) | 5 |
E7 | (CD) | 2 |
E8 | (г, д) | 3 |
E9 | (г, ж) | 14 |
Теперь переставим таблицу в порядке возрастания относительно веса ребра -
Номер края | Пара вершин | Вес края |
---|---|---|
E4 | (до н.э) | 1 |
E7 | (CD) | 2 |
E8 | (г, д) | 3 |
E5 | (б, д) | 4 |
E6 | (б, е) | 5 |
E2 | (а, в) | 9 |
E3 | (а, г) | 13 |
E9 | (г, ж) | 14 |
E1 | (а, б) | 20 |



Поскольку у нас есть все 5 ребер на последнем рисунке, мы останавливаем алгоритм, и это минимальное остовное дерево, а его общий вес равен $ (1 + 2 + 3 + 5 + 9) = 20 $.
Алгоритм Прима
Алгоритм Прима, открытый в 1930 году математиками Войтехом Ярником и Робертом К. Примом, представляет собой жадный алгоритм, который находит минимальное остовное дерево для связного взвешенного графа. Он находит дерево этого графа, которое включает в себя каждую вершину, и общий вес всех ребер в дереве меньше или равен каждому возможному остовному дереву. Алгоритм Прима быстрее работает на плотных графах.
Алгоритм
Инициализируйте минимальное остовное дерево одной вершиной, случайно выбранной из графа.
Повторяйте шаги 3 и 4, пока все вершины не будут включены в дерево.
Выберите ребро, которое соединяет дерево с вершиной, еще не входящей в дерево, так, чтобы вес ребра был минимальным и включение ребра не образовывало цикла.
Добавьте выбранное ребро и вершину, которую оно соединяет с деревом.
Problem
Предположим, мы хотим найти минимальное остовное дерево для следующего графа G, используя алгоритм Прима.

Solution
Здесь мы начинаем с вершины «а» и продолжаем.




Это минимальное остовное дерево, и его общий вес равен $ (1 + 2 + 3 + 5 + 9) = 20 $.