как найти MST после добавления нового узла?

#algorithm #graph #graph-theory #minimum-spanning-tree

#алгоритм #График #теория графов #минимальное связующее дерево

Вопрос:

Как мы находим MST (Minimum Spanning Tree) после добавления нового узла или изменения расстояния путей?

Мне нужна помощь, чтобы решить это. Кто-нибудь может мне помочь?

Спасибо.

Ответ №1:

При добавлении новых ребер:

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

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

Если вы меняете веса ребер, вам нужно будет:

  • Разделите график на 2 компонента, A и B, временно удалив новое ребро.
  • Если новое ребро имеет меньший вес, чем раньше, вы можете вставить его обратно. В противном случае:
  • Выполните итерацию по ребрам, которые вы обработали ранее, и проверьте, соединяют ли они A с B.
  • Выберите наименьшее ребро из них и соедините компоненты, используя это ребро.

Опять же, вы получаете новое минимальное связующее дерево.

В целом, это O(V E) , умноженное на небольшой коэффициент обратного Аккермана.

Комментарии:

1. Что гарантирует, что это новое дерево (при добавлении новых ребер) по-прежнему является минимальным связующим деревом?

2. Есть ли какой-либо линейный способ добавить узел (со сколькими ребрами он может)?