如果唯一的负边缘成本来自初始节点怎么办?该算法仍然有用吗?
我觉得是的,因为我无法想到反例,但我无法证明这一点。有反例吗?
对于Dijkstra来说,负边是一个问题,因为如果有一条边可以在以后选择,而在很大程度上是负加权,则不能保证你选择的边产生最短路径。但是如果唯一的负边缘从初始节点出来,我就没有看到问题。
我不是在寻找算法。我正在寻找对Dijkstra的一些见解。
我正在谈论有向图,如果这会产生影响。
答案 0 :(得分:21)
具有负成本优势的问题在于,您可以随心所欲地来回走动。
如果您施加的规则不允许多次使用边缘,则仍然存在问题。 Dijkstra的算法涉及将节点标记为“已访问”,当它与初始节点的距离被认为是一劳永逸时。这发生在检查所有边缘之前;已找到从初始节点到节点X的最短路径,来自初始节点的所有其他路径已经比此更长,以后发现的任何路径都不能使这些路径更短。但是如果某处存在负成本边缘,那么后来的发现可以使路径变短,因此可能存在Dijkstra不会发现的较短路径。
如果只有连接到初始节点的边缘可能有负成本,那么你仍然有问题,因为最短路径可能涉及重新访问初始节点以利用负成本,这是Dijkstra无法做到的。
如果你强加另一个规则,可能不会多次访问某个节点,那么Dijkstra的算法就可以运行。请注意,在Dijkstra算法中,初始节点的初始距离为零。如果你给它一些其他的初始距离,算法仍然会找到最短的路径 - 但是所有的距离都会偏离相同的量。 (如果你想要最后的实际距离,你必须减去你输入的值。)
答案 1 :(得分:12)
反示例:
图G =(V,E),顶点V = {A,B},边E = {(A,B),(B,A)}和权函数w(A,B)= -2 ,w(B,A)= +1。
负重周期为负,因此最小距离未定义(即使使用A作为初始节点)。
答案 2 :(得分:0)
Dijkstra算法不能为具有负边权重的图形生成正确答案(即使图形没有任何负权重周期)。对于例如它计算了(A,C)之间不正确的最短路径值,用于跟随源顶点A的图,
A -> B : 6
A -> C : 5
B -> D : 2
B -> E : 1
D -> E : -5
E -> C : -2