Я изучаю минимальное остовное дерево. Я просматриваю алгоритм Прима для взвешенного ориентированного графа.
Алгоритм простой
- у вас есть два набора вершин: посещенные и непосещаемые
- установить расстояние для всех краев до бесконечности
- начать с любой вершины в непосещенном множестве и исследовать ее ребра
- Во всех ребрах обновить расстояние до конечной вершины с весом ребра, если конечная вершина не посещена и если вес ребра меньше, чем расстояние до конечной вершины.
- выберите непосещенную вершину с наименьшим расстоянием и сделайте это снова, пока не будут посещены все вершины
Я считаю, что с помощью вышеуказанного алгоритма я смогу найти остовное дерево с минимальной стоимостью среди всех остовных деревьев, то есть с минимальным остовным деревом.
Но я применил это к следующему примеру и считаю, что это не удалось.
Рассмотрим следующий пример
Вершинами являются {v1, v2, v3, v4, v5} и ребра с весом
(x, y): w =>
(v1, v2): 8
(v1, v3) : 15
(v1, v4): 7
(v2, v5): 4
(v4, v5): 7
Сначала я исследую v1, у него есть ребра к v2, v3, v4, поэтому граф становится
посещается вершина v1 и (вершина, расстояние) =>
(v2,8)
(v3,15 )
(v4,7)
Теперь v4 имеет наименьшее расстояние, т.е. 7, поэтому я исследую v4, он имеет край до v5, поэтому происходит следующая модификация
Посещается вершина v4 и ( вершина, расстояние) => (v5,7)
Теперь среди всех v5 наименьшее расстояние, то есть 7, поэтому я исследую v5, и у него нет края, поэтому я просто отмечаю его посещенным
Vertex v5 посещается
Теперь путаница начинается отсюда
Вершина с наименьшим расстоянием теперь v2, у нее есть ребро до v5 с весом 4, и в настоящее время v5 имеет расстояние 7, ранее назначенное ребром (v4, v5): 7, поэтому я считаю, что для создания минимального остовного дерева , расстояние для v5 должно быть обновлено с 7 до 4 как 4 ‹7, но этого не произойдет, потому что v5 уже был посещен, а алгоритм Прима не обновляет расстояние до вершины, которая уже была посещена, и расстояние для v5 останется 7 вместо 4 и у этого дерева не будет минимальной стоимости
Я правильно понял? или я ошибаюсь?
Спасибо