Вторые минуты стоят связующего дерева

Я пишу алгоритм для нахождения, что вторые минуты стоят связующего дерева. моя идея была следующие:

  1. Используйте kruskals для нахождения самого низкого MST.
  2. Удалите самый дешевый край MST.
  3. Выполненный kruskals снова на всем графике.
  4. возвратите новый MST.

Мой вопрос: это будет работать? Существует ли лучший путь, возможно, чтобы сделать это?

12
задан skaffman 22 April 2010 в 16:33
поделиться

3 ответа

Рассмотрим этот случай:

------100----
|           |
A--1--B--3--C
      |     |
      |     3
      |     |
      2-----D

MST состоит из A-B-D-C (стоимость 6). Вторая минимальная стоимость - A-B-C-D (стоимость 7). Если вы удалите край с наименьшей стоимостью, вместо этого вы получите A-C-B-D (стоимость 105).

Значит, ваша идея не сработает. Я не знаю, что получше ...

13
ответ дан 2 December 2019 в 04:02
поделиться

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

  1. Используйте Kruskals, чтобы найти MST.
  2. Для каждого ребра в MST:
    1. Удалить ребро из графа
    2. Вычислить MST 'на MST
    3. Следить за наименьшим MST
    4. Добавить ребро обратно в граф
  3. Возвращает наименьшее значение MST.
4
ответ дан 2 December 2019 в 04:02
поделиться

Вы можете сделать это в O (V 2 ). Сначала вычислите MST, используя алгоритм Прима (можно выполнить в O (V 2 )).

Вычислить max [u, v] = стоимость края максимальной стоимости на (уникальном) пути от u до v в MST . Может быть выполнено за O (V 2 ).

Найдите ребро (u, v) , которое НЕ является частью MST, которая минимизирует abs (max [u, v] - weight (u, v)) . Можно сделать за O (E) == O (V 2 ).

Верните MST '= MST - {край с максимальным [u, v] весом} + {(u, v)} , что даст вам второй лучший MST.

Вот ссылка на псевдокод и более подробные объяснения.

13
ответ дан 2 December 2019 в 04:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: