Алгоритм минимального остовного дерева Соллина - PullRequest
0 голосов
/ 19 ноября 2010

Да, это домашнее задание. Мне было интересно, может ли кто-нибудь объяснить процесс алгоритма Соллина (или Боровки) для определения минимального остовного дерева. Также, если бы вы могли объяснить, как определить количество итераций в худшем случае, это было бы здорово.

Ответы [ 2 ]

6 голосов
/ 19 ноября 2010

На верхнем уровне алгоритм работает следующим образом:

  • Убедитесь, что у вас есть несколько связующих деревьев для некоторых подграфов.Первоначально каждая вершина графа является mst без ребер.
  • В каждой итерации для каждого из ваших связующих деревьев найдите самое дешевое ребро, соединяющее его с другим остовным деревом.(Это упрощение.)

В худшем случае с точки зрения итераций вы всегда объединяете пары деревьев.В этом случае количество деревьев у вас будет уменьшаться вдвое на каждой итерации, поэтому количество итераций будет логарифмическим по количеству узлов.

Также обратите внимание, что при выборе ребер для добавления требуется особая хитрость: если вы не будете осторожны, вы можете ввести круг, когда дерево A соединяется с деревом B, дерево B соединяется с деревом C, а дерево C соединяется с деревом A. (Это может произойти, только если все три выбранных ребра имеют одинаковый вес.Хитрость заключается в том, чтобы иметь произвольный, но фиксированный прерыватель связи, как фиксированный порядок краев.)

Итак, вот мой обзор обратной карточки.

0 голосов
/ 23 января 2013

Я использую терминологию мирянина.

  • Сначала выберите вершину
  • Проверьте все ребра из этой вершины и выберите один с минимальным вес
  • Сделайте это для всех вершин (некоторые ребра могут быть выбраны более чем один раз)
  • Вы получите подключенные компоненты.
  • Из этих подключенных компонентов выберите один край с минимальным весом.

Будет сформировано ваше связующее дерево с минимальным весом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...