graph-Dijkstra для самого длинного пути с одним источником

хорошо, я опубликовал этот вопрос из-за этого упражнения:

можем ли мы изменить алгоритм Дейкстры, чтобы решить проблему с одним источником, изменив минимум на максимум? Если да, то докажите правильность своего алгоритма. Если нет, то приведите контрпример.

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


ОК, моя интуиция ответила за меня:

Да, я думаю, что его можно изменить.

Я просто

  1. инициализировать массив расстояний до MININT
  2. изменить distance[w] > distance[v]+weight до distance[w] < distance[v]+weight

затем я сделал некоторые исследования, чтобы проверить мой ответ. Я нашел этот пост:

длинный путь от источника к некоторые узлы в DAG

сначала я подумал, что мой ответ был неправильным из-за сообщения выше. Но я обнаружил, что, возможно, ответ в сообщении выше неправильный. Он перепутал Проблема С Длинным Путем С Одним Источником С Самый Длинный Путь Проблема.

также в wiki алгоритм Беллмана-Форда, он сказал правильно :

алгоритм Беллмана–Форда вычисляет кратчайшие пути с одним источником в взвешенном диграф. для графов с только неотрицательными весами ребер, чем быстрее алгоритм Дейкстры также решает проблему. Таким образом, Bellman–Ford используется в основном для графов с отрицательными краевыми весами.

поэтому я думаю, что мой ответ правильный, верно? Dijkstra действительно может быть Единственный Источник проблема с самым длинным путем и мои модификации также верны, верно?

3 ответов


нет, мы не можем1 - или, по крайней мере, не известно полиномиальное уменьшение/модификация - самый длинный путь проблему is NP-Hard, в то время как dijkstra работает в полиномиальное время!

Если мы можем найти модификацию в dijsktra для ответа на задачу с самым длинным путем в полиномиальное время, мы можем получить P=NP

Если нет, то приведите контрпример.

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


относительно как раз изменять шаг релаксации:

        A
       / \
      1   2
     /     \
    B<--1---C
edges are (A,B),(A,C),(C,B)

dijkstra из A сначала выберет B, а затем B никогда не будет доступен - потому что он из набора distances.

по крайней мере, один придется также изменить min heap на max heap, но у него будет другой счетчик-пример, почему он терпит неудачу.


(1) Возможно, возможно, если P=NP это возможно, но это очень маловероятно.


Да, мы можем. И ваш ответ почти правильный. Кроме одного.

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

но если вы предполагаете только отрицательные веса, вы можете легко найти самый длинный путь. Чтобы доказать правильность, просто возьмите абсолютные значения всех Весов, и вы получите точно обычный алгоритм Дейкстры с положительными весами.


Он работает в направленных ациклических графах, но не в циклических графах. Так как путь будет назад, и нет никакого способа избежать этого в algo