Предположим, мы далиминимального остова отличается от другого
неориентированный граф g
, где каждый узел я, 1 < = я < п связан со всеми J, I < J < = п
и источник s
.
Мы хотим, чтобы найти общую стоимость (определяются как сумма весов всех ребер) на дешевом минимального остовного дерева, которое отличается от минимального расстояния дерева s
(т.е. от МСТ, полученного путем запуска чопорных/Алгоритма Дейкстров на s
) по крайней мере одним ребром.
Что было бы лучшим способом справиться с этим? Поскольку в настоящее время, я могу только думать о каком-то фиксированная точке итерация
- запустить DIJKSTRA на
(g,s)
для получения справочного графикаr
, что мы должны отличаться от costs := sum(edge_weights_of(r))
change := 0
- для каждой вершины
u
вr
, запустите bfs и отметьте для каждой достигнутой вершиныv
самый длинный край на пути отu
доv
. - итерация по всем краям
e = (a,b)
вg
: и найтиe'=(a',b')
, что не вr
и сводит к минимумуnewchange := weight(e') - weight(longest_edge(a',b'))
- если (first_time_here ИЛИ
newchange < 0
), тоchange += newchange
- если (newchange < 0)
goto 4
result := costs + change
Это, кажется, отнимает много времени ... Оно зависит от того, что добавление края t o остовное дерево создает цикл, из которого мы можем удалить самое длинное ребро.
Я также подумал об использовании Kruskal для получения общего минимального остовного дерева и только с использованием вышеприведенного алгоритма для замены одного края, когда деревья из обоих, prim и kruskal, оказались одинаковыми, но это не кажется работать как результат будет сильно зависеть от краев, выбранных во время прогона kruskal.
Любые предложения/подсказки?
Разве это не очень маловероятно, что эти деревья одинаковы в любом случае? Я думаю, вам следует изучить, при каких обстоятельствах минимальное расстояние от 's' совпадает с MST.Я бы предположил, что это очень специфические обстоятельства ('' 'находится в« центре »графика, что бы это ни означало формально). –