Algorithm 理解Dijkstra';s阿尔戈

Algorithm 理解Dijkstra';s阿尔戈,algorithm,dijkstra,Algorithm,Dijkstra,我正在使用此参考资料: 在第3页的最后一张幻灯片中,它说我们正在放松从B离开的边。但在这一点上,B和E之间没有边,即使在那张幻灯片中考虑了B!这怎么可能?这是作者的错误还是我遗漏了什么 编辑 这是算法(来自该pdf): 这是我所说的示例图: 目的是获得A和D之间的最短路径。 首先,起始顶点“A”初始化为0权重。然后,它们中的其余部分被赋予无穷大。你可以从algo的前三行看到。然后,接下来创建一个空的集合“S”。我们有一个Q集,它是一个队列,它将保存图的所有顶点。我们,首先从Q中得到最小加权顶

我正在使用此参考资料:


在第3页的最后一张幻灯片中,它说我们正在放松从B离开的边。但在这一点上,B和E之间没有边,即使在那张幻灯片中考虑了B!这怎么可能?这是作者的错误还是我遗漏了什么

编辑

这是算法(来自该pdf):

这是我所说的示例图:

目的是获得A和D之间的最短路径。 首先,起始顶点“A”初始化为0权重。然后,它们中的其余部分被赋予无穷大。你可以从algo的前三行看到。然后,接下来创建一个空的集合“S”。我们有一个Q集,它是一个队列,它将保存图的所有顶点。我们,首先从Q中得到最小加权顶点。在第一次,我们将在这里得到起始顶点本身,因为我们在初始化中指定了0,其余的顶点具有无穷大。所以,较小的值是0,我们得到顶点A。我们把它加到集合“S”中。然后我们将循环遍历该顶点“A”的所有相邻顶点,并检查该顶点的权重是否大于顶点“A”的权重。如果是,则通过添加顶点“A”的权重以及“A”和该相邻顶点之间的边的权重来重新计算相邻顶点的权重。这将继续进行,直到集合Q变为空

这就是我理解的工作

疑问在于这一部分:

当我们放松从顶点“E”离开的边时,如何得到顶点“B”?B和E之间没有边界


我希望你现在对我的问题有了想法。我想如果你看pdf文件,而不是我愚蠢的解释,你就不会有更多的想法了。不是吗这就是为什么我在这个问题的开头也放了这个链接

d[v]
表示:节点
v
与起点之间的最短路径长度,该路径仅通过
S
中的节点

尽管节点E没有连接到B,但我们从以前的迭代中了解到,长度为7的路径仅通过
a
C
a
B
。我们当然可以通过只经过
A
C
E
来推断出同样的路径存在

请注意,在第一张幻灯片中突出显示的代码部分,仅当存在较小的值时,才会更新
d[v]
。否则,
d[v]
将保持不变

我注意到OP混淆了
S
。我想补充一点,在这个算法中,
S
只在它可以帮助解释程序正在做什么的意义上有用。(我在向您解释
d[v]
的意思时使用了它。)
S
对程序没有任何影响。如果完全从程序中删除
S
,程序的工作原理相同

此程序不为您提供最短路径。它只告诉您起始节点和图中每个节点之间最短路径的长度

如果要获得最短路径,需要修改程序以添加此功能。以下是步骤:

  • 在程序的then子句中,在
    d[v]=d[u]+w(u,v)
    之前或之后添加
    p[v]=u
    。这样,您就保留了有关如何获得当前
    d[v]
    的信息,即通过选择到
    u
    的最短路径,然后选择edge
    u->v
  • 在整个程序完成后(即while循环之后),假设您想知道从A到B的最短路径是什么。您将发现
    p[B]=C
    ,然后您将发现
    p[C]=A
    。因此,路径是
    ACB

在第3页的最后一张幻灯片中,它说,
放松所有边离开E
。第3页的最后一张幻灯片说“放松所有边离开E”(这是一个复制粘贴)。你误读了吗?还是说第四页的第二张幻灯片?是的,我就是这么说的。但是看看下面的表格。在“B”之下加上“7”,在“D”之下加上“11”!为什么在那里加B?没有边离开B!!这就是我感到困惑的地方!如目前所述,这一问题严重依赖于联系,这并不特别合适。请重新措辞,或从链接中提取足够的信息,因此无需单击链接。我已添加了更多详细信息。谢谢。那么,在哪里可以找到最短路径的信息呢?迭代结束时,d[d]是9。这是最短路径的权重。但是我们如何从中得到路径呢?你不需要从上面介绍的算法中得到。你可以通过对程序做一些小的修改来获得它。我会修改我的答案。哦,我明白了。现在明白了。谢谢我在想我们是想从那里找到最短的路!当我们看algos的时候,会感到困惑。昨天我花了一整天的时间想弄明白。谢谢你,现在明白了。你能帮我纠正一下pdf中的I&II吗?我将创建另一个包含详细信息的线程,并将包括我从这两张幻灯片中了解的内容。我在这里创建了另一个线程: