Я пытаюсь построить список ограничений всех алгоритмов графа - PullRequest
0 голосов
/ 09 апреля 2010
Single Source shortest Path

Дейкстры - направленный и ненаправленный - работает только для положительных весов ребер - циклов ??

Беллман Форд - режиссер - циклов не должно быть

All source shortest path

Флойд Варшалл - нет информации

Minimum Spanning Tree 

(нет информации о весе ребер или характере графа или циклов)

Краскала

Прим - ненаправленный

Baruvka в

Ответы [ 2 ]

4 голосов
/ 09 апреля 2010

Я не уверен, что вопрос, но здесь идет ...

Классическая реализация алгоритма Дейкстры может обрабатывать только положительные веса ребер, но есть способ заставить его работать с отрицательными затратами ребер. Всякий раз, когда вы обновляете узел, поместите обновленный узел обратно в очередь. Тем не менее, это спорно, является ли это на самом деле Дейкстр или Беллман-Форд с приоритетной очередью.

Например, рассмотрим этот график:

1 - 2 (100)
2 - 3 (-200)
1 - 3 (50)
3 - 4 (100)

Классическая Дейкстра установит D [1] = 0, D [2] = 100, D [3] = 50, D [4] = 150, D [3] = -100 и остановится. Однако при установке D [3] = -100 добавьте 3 обратно в очередь и продолжите алгоритм. Это даст D [4] = 0, что правильно. Однако я не уверен, считается ли это «алгоритмом Дейкстры».

Что касается Беллмана-Форда, график не обязательно должен быть направленным, и (циклы отрицательной стоимости, другие циклы в любом случае не имеют значения) могут существовать, просто убедитесь, что вы обнаруживаете циклы. Цикл обнаруживается при извлечении узла из очереди n раз, где n - количество узлов. Вы можете сделать ту же проверку, чтобы обнаружить цикл в «модифицированном алгоритме Дейкстры», который я описал выше.

Floyd Warshall - стоимость в кубических числах узлов. Неэффективно для всего, кроме очень маленьких графиков. Предполагается, что циклы отрицательной стоимости отсутствуют, но вы можете использовать его для обнаружения таких циклов, см. wikipedia .

MST - использовать Крускала, когда число ребер ближе к O (n), чем к O (n 2 ). В противном случае используйте Prim. Оба будут работать на графиках любого типа, даже если они содержат отрицательные веса ребер и циклы.

Еще один алгоритм кратчайших путей, который мне лично очень нравится, это Алгоритм набора . Мне нравится думать об этом, как считать сортировку на графиках. Также прочитайте этот довольно исчерпывающий документ .

1 голос
/ 09 апреля 2010

A * ( Звезда ) может быть одним из оптимальных вариантов в алгоритме графиков. Однако, как объяснено в статье в Википедии:

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

Это означает, что время расчета не всегда будет одинаковым в зависимости от графика.

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