Algorithm Dijkstra算法=SSSP

Algorithm Dijkstra算法=SSSP,algorithm,dijkstra,Algorithm,Dijkstra,据我所知,dijkstra无法处理负边权重。为此,我们必须使用贝尔曼福特 Bellman fords在负边权重和负循环下运行良好,这是无法从源位置访问到的,否则,它将返回消息“负循环存在” 但是,上面显示的这张图对dijkstra很有效,即使存在负边权重。那么,如何知道何时使用带负边权重的dijkstra 我们想的是,dijkstra可以或不能使用负权重边。 如果存在负循环,那么它将不起作用。但如果不存在,它可以也不能工作 我说的对吗??请引导我做这个???你是对的,Dijkstra将适用于负重

据我所知,dijkstra无法处理负边权重。为此,我们必须使用贝尔曼福特

Bellman fords在负边权重和负循环下运行良好,这是无法从源位置访问到的,否则,它将返回消息“负循环存在”

但是,上面显示的这张图对dijkstra很有效,即使存在负边权重。那么,如何知道何时使用带负边权重的dijkstra

我们想的是,dijkstra可以或不能使用负权重边。 如果存在负循环,那么它将不起作用。但如果不存在,它可以也不能工作


我说的对吗??请引导我做这个???

你是对的,Dijkstra将适用于负重。然而,如果任何一个周期中的权重之和为负,它将不起作用。

你是对的,Dijkstra将对负权重起作用。但是,如果任何循环中的权重之和为负,则该算法将不起作用。

Dijkstra的算法无法处理负的边权重。这是因为一旦它将一个节点标记为“已访问”,它就假定已找到该节点的最短路径,并且该路径无法更改,在具有负边(且没有负循环)的图中,一个容易违反的不变量:

用Dijkstra算法从A开始寻找最短路径会给C带来错误的代价,
2


你所张贴的图表也不起作用:考虑从<代码> d>代码>到<代码> h < /代码>的最短路径。Dijkstra在这个图上会为路径(

d->g->h
)生成
4
,而有一个成本为0的更便宜的路径:
d->a->b->c->h

Dijkstra的算法无法处理负边权重。这是因为一旦它将一个节点标记为“已访问”,它就假定已找到该节点的最短路径,并且该路径无法更改,在具有负边(且没有负循环)的图中,一个容易违反的不变量:

用Dijkstra算法从A开始寻找最短路径会给C带来错误的代价,
2


你所张贴的图表也不起作用:考虑从<代码> d>代码>到<代码> h < /代码>的最短路径。Dijkstra在这个图上会为路径(

d->g->h
)生成
4
,而有一个更便宜的0成本路径:
d->a->b->c->h

Dijkstra不能使用负权重边。 有一个名为Johnson的算法,它“重新加权”图中的所有边,最后使所有边都为正。但该算法称为bellman-ford算法,其时间复杂度为O(V2logV+VE)。 所以Dijkstra+Johnson的时间复杂度并不好。但是如果图形可以被处理,也许你可以提前使用算法。
PS:我很抱歉我的英语不好。

迪克斯特拉不能用负重边。 有一个名为Johnson的算法,它“重新加权”图中的所有边,最后使所有边都为正。但该算法称为bellman-ford算法,其时间复杂度为O(V2logV+VE)。 所以Dijkstra+Johnson的时间复杂度并不好。但是如果图形可以被处理,也许你可以提前使用算法。
PS:很抱歉我的英语很差。

但是,请看我的图表中A到E的距离。最小路径是-2,在遍历完整的图之后,我没有发现任何距离E小于-2,这意味着它没有违反这里。在你的例子中,它肯定是违反规则的。仅仅因为一个结果碰巧是正确的,并不意味着其他所有结果都是正确的。我想我已经证明了,如果你的图至少包含一条负权重边,你不能依赖Dijkstra的算法来寻找最短路径。你是对的,但是如果我只想从A中找到最短路径,那么它会起作用吗?我理解D,它不会起作用。在一般情况下它不会起作用。当我向您展示了它可能是错误的时,您将如何验证它的输出是否正确?使用正确的算法。是的,我知道了。谢谢注意dijkstra的负边权重。但是,请看我的图表中从A到E的距离。最小路径是-2,在遍历完整的图之后,我没有发现任何距离E小于-2,这意味着它没有违反这里。在你的例子中,它肯定是违反规则的。仅仅因为一个结果碰巧是正确的,并不意味着其他所有结果都是正确的。我想我已经证明了,如果你的图至少包含一条负权重边,你不能依赖Dijkstra的算法来寻找最短路径。你是对的,但是如果我只想从A中找到最短路径,那么它会起作用吗?我理解D,它不会起作用。在一般情况下它不会起作用。当我向您展示了它可能是错误的时,您将如何验证它的输出是否正确?使用正确的算法。是的,我知道了。谢谢警惕dijkstra的负边缘权重。
       A
      / \
    7/   \2
    /     \
   B------>C
      -6