确定两个节点之间的路径时没有负循环

No negative cycles when determining path between two nodes

为什么有向加权图不能包含负权重的循环,如果我们想确定该图的两个节点之间的最短路径?

因为如果有这样一个循环,对于每个你可能想到的"shortest path",我可以通过简单地再次穿越这个负循环来选择一个更好的。这肯定会降低整体路径成本,因为假设这个循环是负权重。

因为"shortest"实际上意味着"least cost/weight"路径。

通过负权重循环,可以使用它来获得任意低的 ny 路径(包含此循环)的权重。

因为如果是的话,最短路径可以是-inf.

想象一下这个例子,你想要计算 A 和 D 之间的最短路径。可能你希望它是 A - B - D,6 步。但是您可以根据需要多次循环 B - C - B 循环。那么,最短路径就是A - B - C - B - C - ... - B - C - B - D.

因为负循环会以下列方式影响路径权重:

a----------b-----------c---------------d
     2     |     2     |       4
           |           |
           | -3        | -3
           |           |
           e-----------f
                 2

第一次尝试寻找路径:

a->b->c->d cost = 8

现在让我们进入循环:

a->b->c->f->e->b->c->d cost = 8 + (-2)

嗯,便宜了两倍,但我们可以做得更好:

a->b->c->(f->e->b->c)^i->d cost = 8 + (-2) ^ i

明显的问题:每 运行 通过循环,路径变得更便宜,我们最终以无限循环作为最短路径。

但这并不适用于所有寻路算法。例如,Bellman-Ford-algorithm 能够处理下降沿,但代价是效率较低。