Читайте также:
|
|
Пусть дан связный граф G=(V,E), |V|=n, |E|=m, с матрицей весов ребер W=(w(i,j)). Остовное дерево – это его подграф на том же множестве вершин, который является деревом. Вес дерева – сумма весов ребер этого дерева. Требуется найти остовное дерево минимального веса.
Всего нумерованных деревьев на n вершинах nn-2. Если устроить перебор по всем этим деревьям, то получим алгоритм сложности O(nn-1). Но есть и более простые алгоритмы.
Алгоритм Крускала (или алгоритм Краскала). Алгоритм впервые описан Джозефом Крускалом в 1956 году.
Вначале текущее множество рёбер устанавливается пустым. Затем, пока это возможно, проводится следующая операция: из всех рёбер, добавление которых к уже имеющемуся множеству не вызовет появление в нём цикла, выбирается ребро минимального веса и добавляется к уже имеющемуся множеству. Когда таких рёбер больше нет, алгоритм завершён. Подграф данного графа, содержащий все его вершины и найденное множество рёбер, является его остовным деревом минимального веса. (Корректность алгоритма следует из теоремы Радо-Эдмондса и того факта, что данная задача – частный случай оптимизационной задачи на матроиде. [4])
До начала работы алгоритма необходимо отсортировать рёбра по весу, это требует O(m log m) времени. После чего компоненты связности удобно хранить в виде системы непересекающихся множеств. Предполагается, что проверка на появление цикла требует константу времени. (В общем случае она требует времени выражаемом через функцию Аккермана - α(n,m), но в нашем случае α(n,m)<5.) Все операции в таком случае займут O(m),, таким образом общее время работы алгоритма Крускала можно принять за O(m log m). Это, конечно, не O(nn-1).
Алгоритм Прима — алгоритм построения минимального остовного дерева взвешенного связного неориентированного графа. Алгоритм впервые был открыт в 1930 году чешским математиком Войцехом Ярником, позже переоткрыт Робертом Примом в 1957 году.
Построение начинается с дерева, включающего в себя одну (произвольную) вершину. В течение работы алгоритма дерево разрастается, пока не охватит все вершины исходного графа. На каждом шаге алгоритма к текущему дереву присоединяется ребро минимального веса, соединяющих вершину из построенного дерева, и вершину не из дерева.
Асимптотика алгоритма зависит от способа хранения графа и способа хранения вершин, не входящих в дерево.
Все это опять же не O(nn-1).
Дата добавления: 2015-07-11; просмотров: 189 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Теоремы сравнения | | | Схемы из функциональных элементов |