戴克斯特拉算法定义
一种用于在带权网络中寻找两个顶点之间最短路径的系统性方法。其原理是:反复选取尚未访问、且当前已知距离最小的顶点,更新其邻居的距离,并将其标记为已访问。
Bryn Humberstone · YouTube · 4:21
本视频演示了戴克斯特拉算法在带权网络中求解从“家”到“大学”的最短路径时的前几步操作,涵盖起始顶点的初始化、邻居距离的迭代更新、最小未圈出顶点的选择,以及当同一顶点出现多个距离值时仅保留最小值的处理方法。 这段120秒的片段展示了一个戴克斯特拉(Dijkstra)最短路径算法的完整示例后期阶段,图是带权图,起点为“home”,终点为“university”。初始时已有若干顶点被确定;主讲人解释为何目标标签7不能立即被接受:因为最小的未加圈顶点仍需被处理。首先确定标号为4的顶点 E,由此在大学处产生一个候选值9,该值随后被划去。接着确定标号为6的顶点 B,由此在大学处产生另一个候选值8,同样被划去。直到此时,大学处的7才被加圈,作为最终的最短距离。片段最后通过反向追踪前驱箭头,重构出最短路径:home → → university。 本视频片段演示了在加权图上求解最短路径问题的最后阶段,很可能使用了戴克斯特拉算法。它展示了如何从终点节点(“大学”)回溯至起点节点(“家”),从而识别最优路径中顶点的确切顺序。主讲人用黄色高亮标出路径上的边,并写出该序列:家 - A - D - 大学。最后,通过对这些边的权重求和,算出最短总距离为7。
在学习检查器中查看要点和时刻,或切换阅读标签查看完整笔记。
依据视频画面与讲解整理,并非逐字语音转写。
视频将戴克斯特拉算法介绍为一种系统性方法,用于在网络中找出两个顶点之间的最短路径。
提出了一个具体问题:在一张带权图上,找出从‘家’顶点到‘大学’顶点的最短路径。
算法首先将起始顶点‘家’的距离初始化为0,并用圆圈将其标记为已访问。
接着,算法检查当前被圈出顶点(即‘家’)的未访问邻接顶点。
这些邻接顶点的距离通过将对应边的权重加到当前顶点的距离上而算出:顶点A获得距离2,顶点C获得距离3。
然后,算法在所有未被圈出的顶点中找出最小距离,该最小距离为顶点A处的2。
将顶点A圈出以标记为已访问,并从‘家’向A画一条箭头,以记录所走路径。
该过程在新圈出的顶点A上重复进行,更新其未访问邻接顶点的距离。
顶点B的距离计算为2+4=6。
顶点D的距离计算为2+2=4。
顶点C的另一条路径距离计算为2+2=4。
由于顶点 C 现在有两个距离值(3和4),算法应用一条规则,仅保留其中较小者。
较大的值4被划去,留下3作为 C 的有效距离。
算法扫描剩余未加圈的顶点(,,),并选出最小的距离,即顶点 C 处的3。
顶点 C 被加圈,并从‘家’向 C 画出一条箭头。
更新 C 的邻居时,通往 A 的路径被忽略,因为 A 已被访问过。
到 E 的距离被计算为。
在未加圈的顶点 、 和 中,算法遇到最小距离的平局情况。
讲解者任意选择顶点 D 继续执行。
顶点 D 被加圈,并从 A 向 D 画出一条箭头,延续路径重建过程。
视频片段从一个带权图开始,图中顶点标记为 home、A、B、C、D、E 和 university。若干距离已确定:home 为0,A 为2,C 为3,D 为4。讲解者从一个已选定的顶点继续出发,计算新的候选值:从 A 到 B 得到,而 university 处当前可见的候选值为7。口述算式“四加三等于七”对应经过 D 的路径,因为 D 已有标签4,且边 D–university 的权重为3。
关键方法要点被明确指出:讲解者此时尚未在 university 处圈出7,因为仍有其他未圈出的顶点需要考虑。下一个被选中的顶点是未圈出标签中最小的那个,即 E 处的4。这体现了该算法的核心规则:始终优先确定最小的暂定距离,即使目标顶点已有候选值。
为说明该规则的合理性,视频聚焦于 E 和 university 所在区域,并给出一个假设性对比:若边 E–university 的权重为1或2,则经 E 的路径总长将小于7。这一反事实推理解释了为何当更小的未确定顶点仍存在时,目标顶点的标签不能被接受。
E 到 university 的实际边权重为5,因此从 E 出发更新得到。数字9被写在 university 处,随后又被划掉,因为。这是一个具体的标签比较实例:仅当新发现的路径优于当前最优距离时,才保留该更新。
在处理完 E 后,剩余未圈出标签中最小的是 B 处的6,因此接下来选择 B。讲解者画出从 A 指向 B 的前驱箭头,强调每个已确定标签都应记录是哪个更早的顶点生成了它。因此,home 到 B 的距离为6。
从 B 出发,唯一相关的新更新是到 university:。候选值8被写在 university 处,随后又被划掉,因为。此时所有更小的未圈出候选值均已处理完毕,因此 university 处原有的标签7成为当前剩余未圈出值中最小的一个。
讲解者在 university 处圈出7,并宣布计算结论:home 到 university 的最短距离为7。这是本例题的最终数值答案。
最后一步恢复的是实际路径,而不仅是距离。通过从 university 出发逆向追踪前驱箭头,路径被还原为 university ← D ← A ← home;将该链路反转后,即得最短路径:home → → university。黄色高亮使这种逆向重构过程在视觉上清晰明了。
为在已计算各点距离后找出实际最短路径,明智的做法是从终点反向推导。从“大学”出发,沿高亮边回溯,可知它来自“D”,“D”来自“A”,而“A”起始于“家”。
根据具体题目要求,你还必须报告总代价。将该路径上各边的权重相加(),即可得出最短距离为7。
一种用于在带权网络中寻找两个顶点之间最短路径的系统性方法。其原理是:反复选取尚未访问、且当前已知距离最小的顶点,更新其邻居的距离,并将其标记为已访问。
算法开始时,将起始顶点的距离赋值为0,并将其标记为已访问(例如,用圆圈标出)。其余所有顶点的初始距离通常视为无穷大,直至被更新。
对于当前已访问的顶点,通过将该顶点的距离与连接边的权重相加,计算其每个未访问邻居的临时距离。若该新距离小于该邻居此前记录的任何距离,则更新该邻居的距离。
更新完邻居顶点后,找出未访问顶点中记录距离最小的一个。将该顶点标记为已访问,并从其前驱顶点向它画一条箭头,以便后续重构最短路径。
若某个顶点通过不同路径得到多个距离计算结果,则其中最小的值才代表截至目前找到的真实最短距离。较大的值必须舍弃(划掉),以免影响后续步骤的正确性。
本知识卡片提炼了该视频片段的核心操作要点:尽管大学节点已标有候选距离7,主讲人并未立即圈出它,因为另一个未圈出的顶点E的标签4更小。算法必须先确定最小的未圈出顶点,之后终点的标签才能被视作最终结果。
在本例演算中,每个顶点旁的数字表示从起点(家)到该顶点当前已知的最短距离。蓝色圆圈表示该顶点的距离已在本次算法运行中被确认为最终值。未加圆圈的数字仍为临时候选值,尚可被更新或参与比较。
每当一个顶点被选中或其标签被更新时,主讲人会画出一条箭头,起点是提供当前最优标签的那个顶点。例如, 表示E获得标签4的来源, 表示B获得标签6的来源。这些箭头并非装饰性元素,而是后续用于重构最短路径的关键数据。
E的已确定距离为4,E到大学的边权为5,因此新候选值为。由于大学已有候选值7,故将9划去。这体现了比较规则:保留较小的标签,舍弃较大的标签。
B以距离6被确定后,B到大学的边权为2,由此生成候选值。该值仍劣于已有的7,因此8再次被划去。只有完成所有此类检查后,7才可安全地被确定为最终值。
当E和B均已处理完毕,且不存在更小的未圈出候选值时,大学节点处的标签7被圈出。视频直接给出结论:从家到大学的最短距离为7。
最终的距离值并非完整答案。要找出具体路线,需从大学出发,沿前驱节点箭头反向追踪:大学来自 D,D 来自 A,A 来自家。将该链路反转,即得最短路径:家 → → 大学。
当戴克斯特拉(Dijkstra)等算法计算出到每个节点的最短距离后,可通过从目标节点出发,反复移向给出最小距离的前驱节点,直至抵达源节点,从而找出通往目标的具体路径。
加权图中一条路径的总距离或总代价,等于该路径所包含的所有边的权重之和。本例中,路径‘家 → → 大学’的总权重为。
按知识点查看条件、步骤和证据。补充解释与视频直接内容分别标明。
加权图中最左侧的顶点标记为“家”。
home
最短路径问题的起始顶点。
加权图中的一个顶点。
加权图中最右侧的顶点标记为“大学”。
university
最短路径问题的目标顶点。
加权图中的一个顶点。
图中的一个顶点标记为“A”。
A
网络中的一个中间顶点。
加权图中的一个顶点。
图中的一个顶点标记为“B”。
B
网络中的一个中间顶点。
加权图中的一个顶点。
图中的一个顶点标记为“C”。
C
网络中的一个中间顶点。
加权图中的一个顶点。
图中的一个顶点标记为“D”。
D
网络中的一个中间顶点。
加权图中的一个顶点。
图中的一个顶点标记为“E”。
E
网络中的一个中间顶点。
加权图中的一个顶点。
最左侧的顶点标记为“家”,并标有带圆圈的值0。
home
最短路径计算的源顶点
所展示的带权图中的一个顶点
最右侧的顶点标记为“大学”,随后依次获得候选标签7、9和8,最后得到带圆圈的最终标签7。
university
目标顶点,正在求其到“家”的最短距离
所展示的带权图中的一个顶点
顶点A在视频片段开始时已用带圆圈的标签2标出。
说话者在计算通往B和D的路径时,将A用作当前顶点。
A
从“家”出发已确定最短距离为2的中间顶点
所展示的带权图中的一个顶点
顶点B首先显示候选标签6,随后被标上带圆圈的6。
我们可以从这里向上走到B,四加二是六。
B
一个中间顶点,其已确定的最短距离变为6
所显示的带权图中的一个顶点
顶点C在片段开始时已用标签3标出并加圈。
C
一个中间顶点,其到起点(家)的已确定最短距离为3
所显示的带权图中的一个顶点
本视频将介绍戴克斯特拉算法,这是一种系统化的方法,用于确定网络中从一个顶点到另一个顶点的最短路径。
一种用于在加权网络中寻找两个顶点之间最短路径的系统化方法。
该网络的边权重必须为非负数。
首先,我们在‘家’顶点旁标注数字零,因为该顶点到‘家’的距离为零,并将该顶点用圆圈标出。
一个蓝色的‘0’写在‘家’顶点旁,并用蓝色圆圈将其围住。
将距离‘0’赋给起始顶点,并将其标记为已访问(即用圆圈标出)。
适用于路径的起始顶点。
接下来,在每一步中,我们观察已被圆圈标出的顶点,并找出其尚未被圆圈标出的邻接顶点。因此我们可以到达顶点 A,距离为二;也可以到达顶点 C,距离为三。
蓝色数字‘2’和‘3’分别写在顶点 A 和顶点 C 旁。
对于当前已被圆圈标出的顶点,将其到各未访问邻接顶点的总距离计算出来——即该顶点的距离加上对应边的权重,并将这些新距离标注在相应邻接顶点旁。
仅适用于尚未被圆圈标出的邻接顶点。
现在我们寻找图中所有已写出但尚未被圆圈标出的最小数字。本例中该数为二,因此我们将它用圆圈标出,并画出一个箭头,指示该数值的来源——它来自‘家’。
顶点 A 处的数字2被画圈,同时从“起点”向 A 画一条蓝色箭头。
在所有未画圈的顶点中,找出距离最小的那个;将该顶点画圈,并从它的前驱顶点向它画一条箭头,以记录最短路径。
当存在已赋值但尚未画圈的顶点时,此步骤适用。
每当某个顶点上有两个或更多数字时,我们就划掉所有不等于最小值的数字。因此,在这个例子中,C 处有三和四,所以我们只需划掉那个四。
顶点 C 处的数字4被一条蓝色直线划掉。
若某顶点收到多个距离计算结果,则仅保留最小值,其余较大的值全部划掉。
当某顶点可通过来自不同已画圈顶点的多条路径到达时,便会出现这种情况。
现在,我们不能仅因已得到七就断定它是最短距离,因为我们仍需考虑其他顶点。因此,最小的未加圆圈顶点是下方这个四。
E 处的标号4在 university 处的标号7最终确定之前即被加圈。
该片段说明:目标顶点处的候选标号,须待其成为剩余未加圆圈标号中最小者时,才被视为最终标号。下一个被选中的顶点即为当前最小的未加圆圈顶点,此处是标号为4的 E。
该图正由所展示的最短路径方法进行处理。
标号已被加圈的顶点被视为已选定。
未加圈的标签仍是候选值。
数值标签在顶点处累积,并在整个图中进行比较。
主讲人将标签解释为距离,例如“从家到B的距离是六”。
视频从未用符号给出正式定义;本条目记录的是例题演示中可见的操作性含义。
在本次演示中,写在顶点旁的数字表示当前已知的从家到该顶点的最佳距离;加圈的数字表示该距离已在算法运行过程中被确认为该顶点的最终结果。
适用于本片段中展示的具体白板式演示。
“现在把这个圈起来,并标明它来自何处”
箭头从A指向B、从C指向E、从D指向大学。
“从大学往回推,我们来自D……D来自A……A来自家。”
每当一个顶点被选中或更新时,主讲人都会画出一条箭头,起点为提供当前最佳标签的那个顶点;随后通过反向追踪这些箭头来重构最短路径。
当分配新的最优标签,或需要记录某个已选顶点的前驱顶点时使用。
“现在最后我们得到这个七,它是未画圈顶点中最小的一个。”
“这告诉我们,从家到大学的最短距离是七。”
大学处的标签7被画圈,作为最后一个被选中的值。
在所有更小的未画圈候选顶点都被处理完毕后,大学处的标签7成为最小的未画圈顶点并被画圈。讲解者得出结论:从家到大学的最短距离是7。
所有具有更小临时标签的相关顶点都已被处理完毕。
“我们还可以推断出应走的路径。从大学开始逆向回溯:我们来自D……沿着指向D的箭头反向追溯,来自A……再从A继续反向追溯,来自家。”
黄色高亮按逆序标出 university ← D ← A ← home。
“当你写出来时,它是”之后的口述句子被截断,未完成。
一旦目标顶点的标签被最终确定,实际路线便可通过从大学出发、反复沿所画箭头指示的前驱顶点移动而恢复。本例中的逆向链为 university ← D ← A ← home,由此得到正向路径 home → → university。
前驱箭头必须在标签更新过程中被记录下来。
说话人解释从右向左回溯路径:“大学来自D,D来自A,A来自家。”
黄色高亮的边表示从家到大学的路径。说话人在图下方写出序列“家 - A - D - 大学”。
在计算出到所有节点的最短距离后(通常使用戴克斯特拉等算法),可通过从目标节点回溯至源节点来找出实际的最短路径。每一步中,找出使距离最小化的前驱节点。
所有节点的最短距离与前驱节点必须已预先计算完毕。
说话人指出:“你还应标出该距离,且最短距离是七。”
数字7写在最终路径序列旁。
在许多最短路径问题中,仅确定节点序列是不够的;还必须计算并报告该路径的总代价或总距离。这等于最短路径上所有边的权重之和。
最短路径已经确定。
现在,我们不能仅凭已得到七这个数值就断定它是最短距离,因为我们仍需考虑其他顶点。
在此演示的戴克斯特拉算法运行过程中,当大学处出现候选距离7时,若仍存在更小的未加圈候选值,则不能立即终止算法。
该图中包含多个未加圈的顶点。
至少存在一个未加圈顶点,其标签值小于目标顶点当前的标签值。
对于当前展示的图状态,若存在某个未加圈顶点的标签小于目标顶点,则该目标顶点的标签尚未最终确定。
如果从E到大学的边权仅为一或二,那么这实际上会为我们提供一条更短的路径。
此处仅为假设性比较,并非对所展示图的实际修改。
若从E到大学的边权为1或2,则经由E的路径将产生比当前可见标签7更短的通往大学的路线。
E的已确定距离为4。
当前考虑的边连接E与大学。
对于边权w(E, 大学) ∈ {1, 2},所得候选距离小于7。
这告诉我们,从家到大学的最短距离是七。
大学处最终标出的数值是7。
对于视频片段中所示的带权图,从家到大学的最短距离是7。
所显示的边权是固定的。
该算法在此图上按演示方式应用。
对于所示的具体图实例,从家到大学的最短路径长度等于7。
从大学往回追溯:我们来自D……D来自A……A来自家。
黄色高亮标记了边家-A、A-D和D-大学。
例题所找出的最短路径是:家 → → 大学。
算法运行过程中记录的前驱箭头对于当前展示的运行过程是正确的。
针对图中所示的具体实例,重构出的最小化路径为:家 → → 大学。
因此我们可以前往 A,其距离为二;也可以前往 C,其距离为三。
数字2和3分别出现在顶点 A 和 C 旁边。
计算从家到A的距离。
从家到A的边权为2。
计算从家到C的距离。
从家到C的边权为3。
到A和C的距离分别更新为2和3。
因此,B是邻居,二加四等于六;D是邻居,二加二等于四;C是邻居,二加二等于四。
数字6、4和4分别标在B、D和C旁边。
计算从A到B的距离。
从A到B的边权为4。
计算从A到D的距离。
从A到D的边权为2。
计算从A到C的另一条路径距离。
A到C的边权为2。
已计算出到B、D以及到C的另一条路径的距离。
从刚刚圈出的这个顶点出发,我们可以到达A,但A的最短距离我们已经算出是二;不过我们确实可以到达E,三加一等于四。
数字4标在E旁边。
计算从C到E的距离。
C到E的边权为1。
E的距离被更新为4。
“好的,从那个点出发,我们可以向上走到B,四加二是六;可以走到大学,四加三是七;其他地方则无法到达。”
在从A进行处理后,B处出现候选标签6,大学处出现候选标签7。
开头语句不完整,但其中的算术运算及所得标签清晰明确。
在视频片段开始时,顶点A已被圈出,且标有标签2。
观察到的图示状态。
从A出发,讲解者为B计算出一个候选标签6。
音频中的算术运算结合A-B边上可见的边权4。
利用A到大学边上可见的边权3,算得结果为5,但视频片段中实际显示并口述的是经由D路径所得的7。
图中显示边 A-大学 的权重为3,而语音说“四加三等于七”,大学处的书面候选值为7。
大学处显示的候选值7对应经过 D 的路径,其中 D 的已确定标签为4,且 D 到大学的边权重为3。
D-大学之间可见的标签和边权重。
从 A 出发的处理在 B 处产生一个候选值6,而大学处可见的候选值7对应的是经由 D 的路径,而非直接从 A 出发的路径。
“未加圈顶点中最小的是下面这个四”
“观察 E,那里标着四,而它到大学的距离是九”
E 被加圈并标上4,随后大学处写下9并划去与7的关联。
在所有未加圈的顶点中,E 的标签最小。
语音明确指出“下面这个四”即为最小的未加圈顶点。
E 处的标签4来自 C,且 C 到 E 的边权重为1。
C 处可见的加圈标签为3,C-E 边上的权重为1,并有箭头 。
从E出发,主讲人计算出一个大学的候选值9。
音频说“那是九到大学”,图中在大学处写有9。
新的候选值9比现有候选值7更差,因此将9划掉。
音频:“我们要划掉九,因为它不是最小的。”
E必须在目标节点之前被确定,因为它的出边可能改进目标节点的标签;在此图中,它产生9,该值被舍弃,转而采用7。
“看起来在B处,我们这里有几个六。”
“从B出发可以到达大学,六加二是八。”
“我们这里有七和八,所以把八划掉。”
B被圈出并标有6,大学处写有8但被划掉,随后7被圈出。
“这里有几个六”这一短语可听清,但复数形式的确切原因在该片段中未充分说明。
处理完E后,剩余未圈出标签中最小的是B处的6,因此选择B。
音频指出B是下一个未加圈的最小顶点,图中在B处给6加圈。
B处选定的标签6与之前从A出发的更新结果一致。
可见的标签及边A-B上的权重4。
从B出发,主讲人计算出一个前往大学的候选值8。
音频说“六加二是八”,并在大学处写下8。
该候选值8比已有的候选值7更差,因此将8划掉。
音频:“把八划掉,因为它比七大。”
由于已无更小的未加圈候选值,大学处的标签7被加圈,作为最终结果。
音频:“现在,我们终于得到这个七,它是当前未加圈顶点中最小的。”图中对7加圈。
对B的处理无法改进目标,因为它给出的是8,因此此前已知的7成为最终的最短距离。
“从大学反向追溯,我们来自D……沿D指向的箭头反向追溯,来自A……再沿A指向的箭头反向追溯,来自家。”
黄色高亮依次出现在D-大学、A-D和家-A上。
最后一句口语内容在“当你写出来时,它是”之后被截断了。
从终点出发,沿着其前驱箭头反向回到 D。
音频提示与边 D-大学 的黄色高亮显示。
沿着 D 的前驱箭头反向回到 A。
音频提示与边 A-D 的黄色高亮显示。
沿着 A 的前驱箭头反向回到起点。
音频提示与边 家-A 的黄色高亮显示。
将逆向链路反转,以正向顺序陈述该路径。
由观察到的前驱序列推导得出。
前驱指针标识出最短路径为:家 → → 大学。
讲解者叙述了反向追踪路径并累加距离的过程。
视觉上高亮显示该路径,并写出序列“家 → → 大学(7)”。
从终点节点“大学”开始。
目标是找到通往“大学”的路径。
沿着高亮的黄色边反向追踪,找到前驱节点“D”。
通过观察图可知,边 D → 大学 属于最短路径树的一部分。
继续从“D”反向追踪至其前驱节点“A”。
观察图可知,边 属于最短路径树的一部分。
从“A”反向追踪至起始节点“家”。
目视检查可知,边 home → A 属于最短路径树。
写出完整的路径序列:home → → university。
将追踪出的各步合并,即可得到完整的最短路径。
通过累加路径上各条边的权重来计算总距离(home→A 为2, 为2,D→university 为3)。
带权图中路径长度的定义。
最短路径为 home → → university,其最小距离为7。
一个带权图,其顶点包括家、大学、A、B、C、D、E。
本例中,我们要找从家到大学的最短路径。
求从‘家’顶点到‘大学’顶点在给定带权网络中的最短路径。
带权无向图,顶点包括:家、大学、A、B、C、D、E。
边的权重:家-A=2,家-C=3,,,,,B-大学=2,,D-大学=3,E-大学=5。
确定最短路径所经过的顶点序列及其总权重。
从源顶点开始执行该算法。
戴克斯特拉(Dijkstra)算法的基础情形。
计算从源顶点出发的初始距离。
将各边权重加到 d(家) 上。
选择距离最近的未访问顶点。
对应的式子为:。
通过‘A’重新计算各顶点的距离。
,,。对顶点 C 保留最小值。
选择下一个距离最近的未访问顶点。
对应的式子为:, 6。
通过‘C’重新计算各距离。
对应的式子为:。
选择下一个距离最近的未访问顶点;D与E距离相同,任选其一打破平局。
对应的式子为:4 <= 4, 6。
视频片段结束时算法仍在运行;截至目前找到的最短路径通向D,距离为4。
对加圈顶点及箭头的视觉追踪,验证了路径的构建过程。
逐步分析一个带权图,其顶点包括家、A、B、C、D、E、大学。
讲解者叙述了标签更新、划去操作、选择未加圈的最小顶点,以及最终路径的重构过程。
开头几句话不完整,最后一句在“当你写出来时,它是”之后被截断。
利用所演示的戴克斯特拉算法,在图中所示的带权图上,求出从家到大学的最短距离及对应路线。
初始可见的已确定标签:家 = 0,,,。
可见的边权包括:家-A = 2,家-C = 3,,,,,A-大学 = 3,,B-大学 = 2,D-大学 = 3,E-大学 = 5。
E 的初始未加圈标签为 4。
大学在本片段后续更新前的候选标签为 7。
求出从家到大学的最终最短距离;并求出对应的最短路径。
从 A 出发,为 B 计算一个候选标签 6。
音频:“四加二是六”,同时显示相关标签与边权。
通过 D 的路径已在大学处预先置入一个候选标签 7。
可见标签7,音频为“四加三等于七”;该算术运算对应的是D→大学,而非A→大学。
尚未到达大学节点,请选择最小的未标记顶点E,其标签为4。
音频明确指出最小的未标记顶点是“下方这个四”。
从E出发,计算大学节点的一个候选值9。
音频:“到大学的距离是九”,图中E与大学之间的边权重为5。
将9与现有的7比较,并划去9。
音频:“我们将划去九,因为它不是最小的。”
接下来选择最小的未标记顶点B,其标签为6。
音频指出B是下一个最小的未标记顶点,图中将6圈出。
从B出发,计算大学节点的一个候选值8。
音频:“六加二等于八”,图中B与大学之间的边权重为2。
将8与7比较,并划去8。
音频:“划掉八,因为八比七大。”
在大学处圈出7,作为最终的最短距离。
音频:“这告诉我们,从家到大学的最短距离是七。”
沿着前驱箭头从大学反向回溯,以还原路径。
音频及黄色反向高亮:从大学→→家。
最短距离 = 7;最短路径 = 家 → → 大学。
答案在片段中通过以下方式得到验证:将大学处所有后续候选标签(来自E的9和来自B的8)与7比较,并沿记录的前驱箭头从大学反向追踪至家。
一个带权图,其节点包括 home、A、B、C、D、E、university。
讲解者说明如何求从 home 到 university 的最短路径。
给定一个表示地点及通行时间的带权图,求从 'home' 到 'university' 的最短路径及其总距离。
一个图,其顶点为 home、A、B、C、D、E、university。
边的权重表示距离或时间。
预先计算出到各节点的最短距离(以蓝色圆圈标示)。
找出构成最短路径的节点序列,并计算其总权重。
观察图中高亮显示的黄色路径。
该视觉辅助提示表明了最优路线。
从‘大学’反向追踪至‘家’:大学 <- <- 家。
沿着最短路径树中的有向边进行追踪。
写出正向路径:家 - A - D - 大学。
将反向追踪结果反转,得到符合逻辑的顺序。
累加各条边的权重:(家, A)=2,(A, D)=2,(D, 大学)=3。
计算整条路径的总代价。
路径:家 - A - D - 大学;最小距离:7。
各边权重之和与说话者所写的最终距离值一致。
含7个顶点和10条边的静态带权图。
顶点:家、大学、A、B、C、D、E
带数值权重的边
蓝色标注(数字、圆圈、箭头、划掉标记)随时间依次添加。
底层图结构及边权重保持不变。
视觉变化表示在固定网络上逐步执行戴克斯特拉算法的过程。
该图显示:家处标有圈出的0,A处标有圈出的2,C处标有圈出的3,D处标有圈出的4;E处标有未圈出的4;大学处标有未圈出的7;B处标有未圈出的6。
带权图
顶点:家、A、B、C、D、E、大学
圈出的标签:0、2、3、4
未加圆圈的标签6、4、7
蓝色前驱箭头
候选标签6在B处、7在大学处,可见于与A和D相关的更新中。
边的权重保持不变。
已加圆圈的标签0、2、3和4不发生变化。
该片段从中途开始播放,此时已有若干顶点被确定,且候选标签已传播至B和大学。
E处未加圆圈的4被用蓝色加圆圈。
从C到E画出一条蓝色箭头。
顶点E
E处的标签4
顶点C
边 C-E
E 从无圈状态变为有圈状态。
添加一条前驱箭头 。
E 处的标签值4保持不变。
其他已确定的标签保持不变。
因为 E 处的4是最小的无圈标签,所以 E 在目标标签7被接受之前即被确定。
一个红色矩形框包围了 E、边 E-大学 和 大学。
顶点 E
边 E-大学
顶点 大学
红色矩形
涉及E和university的区域以红色高亮显示。
红色框本身不会改变任何数值标签。
边权重保持为5。
该高亮支持口头反事实解释:从E到university的一条更小的边本可击败当前目标标签7。
一个 9 在大学里写在现有的 7 下方。
该9随后被划掉。
顶点university
标签7和9
边E-university
一个新的候选标签9出现在university处。
9被划掉,而7保留不变。
原有标签7保持可见。
边权E-university仍为5。
由E更新得到4+5=9,比当前最优值7更差,因此被舍弃。
顶点B处的标签6被加圈。
画出一条从A指向B的蓝色箭头。
顶点B
顶点B处的标签6
顶点A
边A-B
B由未加圈变为加圈。
添加一条前驱箭头。
6在B处的值保持不变。
先前已确定的标签保持固定。
E处理完毕后,B拥有剩余未加圈标签中最小的一个,因此接下来被确定。
在大学处写下8,紧邻已有的7。
8被划掉。
顶点大学
标签7和8
边B-大学
大学处出现一个新的候选标签8。
8被划掉,而7保留。
标签7仍为最佳候选。
B大学处的边权重保持为2。
来自B的更新得到6+2=8,该值大于7,因此目标标签未被改进。
大学处的标签7以蓝色圆圈标出。
顶点:大学
标签7
大学处未加圆圈的7变为加圆圈。
没有新的候选者取代7。
所有更小的未加圆圈顶点都已被处理完毕。
目标标签7现被确认为从家到大学的最短距离。
黄色高亮依次出现在D大学、A-D、家-A上。
讲述者口述从大学经D、A回到家的逆向路径。
边 D-大学、A-D、家-A
顶点 大学、D、A、家
黄色高亮
边按从终点指向起点的逆序依次高亮。
高亮过程中,底层图结构与标签均保持不变。
被高亮的边对应于所记录的前驱箭头。
动画通过反向追踪前驱指针,直观地重构最短路径,得到 家 → → 大学。
边 home→A、 和 D→university 以粗黄色高亮显示。
图的边
特定的边被涂成黄色,以区别于图中其余部分。
底层图结构保持不变。
黄色高亮在视觉上表示算法所找到的构成最短路径的一系列边。
手写文字依次出现在屏幕底部:'university',然后是'- D - university',接着是'- A - D - university',再是'home - A - D - university',最后是'(7)'。
文字标签
文字逐步添加,以构建最终的路径字符串。
上方的图示保持静止。
该动画演示了通过从终点反向追踪来重构路径的过程,并最终以正确的正向顺序写出路径,同时给出总距离。
当某个顶点处出现两个或更多数字时,我们将划掉所有不等于最小值的数字。
学生可能在单个顶点处保留多个距离值,从而导致后续步骤中产生混淆。
仅应保留最小的距离值;所有更大的值必须明确划掉。
现在,我们不能仅因已得到七就断定它是最短距离,因为我们仍需考虑其他顶点。
我们无法立刻圈出那个七的根本原因在于:若从 E 到大学的边权仅为一或二,则实际会给出一条更短的路径。
一旦终点处出现某个数字,人们可能误以为它已是最终最短距离而立即停止。
该片段明确显示,大学处的7并未立即被圈出,因为还有一个标号为4、未被圈出的更小顶点E仍需处理;只有在所有更小的候选点都被处理完毕后,目标标号才能最终确定。
假设从E到大学的边权为1或2的讨论。
后续候选值9和8被写在大学处,并与7进行比较。
人们可能误以为,只要存在一条通往目的地的路径,即可直接确定答案,而无需检验其他尚未确定的分支。
该例题检验了经由E和B的替代路径,分别得到9和8,但因二者均大于7而予以舍弃。
先顺序讲解初始化,再讲解更新邻居。
必须完成初始化步骤后,才能开始更新邻居。
先顺序讲解更新邻居,再讲解选取最小值。
必须先用新距离更新邻居,算法才能选取下一个访问顶点。
在计算出多个到 C 的距离后,立即划掉较大数字的解释。
当多条路径到达同一顶点时,划去较大数字的规则是邻接点更新步骤的直接结果。
讲解者首先坚持必须先处理最小的未圈出顶点,之后才在大学处圈出7。
E和B在大学之前即已被确定。
最终距离7依赖于这样一条规则:必须先处理最小的未圈出顶点,目标点方可被宣告完成。
前驱箭头是在算法运行过程中绘制的。
最终路径通过“逆向追踪箭头”获得。
路径重构依赖于此前记录的前驱箭头;若无这些箭头,便无法还原逆向路径。
所有算法操作都依赖于比较顶点上的数字标签。
讲解者反复将这些标签称为距离。
选择下一个顶点的规则,预设了听众理解:每个数字标签代表从源点出发的当前距离估计值。
整段视频仅展示了一个完整的图示例题。
旁白具体应用了选择规则与更新规则。
该例题体现了通用方法:选取未加圆圈的最小标签顶点,并更新其邻接顶点的候选距离。
假设从 E 到大学的边权为1或2,用于解释为何7不能立即加圆圈。
经由 E 的更短路径这一假设,与“首个目标标签可立即采纳”的错误观念形成对比。
说话人从描述路径转为陈述最短距离。
一旦通过回溯确定了路径,最短距离即为该路径上所有边的权重之和。
在起始顶点处写上零的解释。
圈出最小未圈数字的解释。
一个顶点上有两个或更多数字时的处理规则。
“我们并不能直接断定七就是最短距离”
“倘若从 E 到大学的那条边权仅为一或二”
数字始终附着于顶点之上,并持续进行比较。
从家到B的距离是六
即到大学的距离是九
六加二是八
从家到大学的最短距离是七
从大学出发反向追溯,我们经过了D……A……家。
黄色高亮显示了反向追踪的路径。
最小的未画圈顶点是下方这个四
E在大学被最终确定之前就已被画圈。
从右向左推导路径的说明。
关于标出最短距离的陈述。
已覆盖 · 戴克斯特拉算法简介。
已覆盖 · 问题陈述:求从家到大学的最短路径。
已覆盖 · 步骤1:初始化起始顶点。
已覆盖 · 步骤2:更新起始顶点的邻接点。
已覆盖 · 步骤3:选择并圈出最小的未圈顶点(A)。
已覆盖 · 步骤4:更新顶点A的邻居。
已覆盖 · 步骤5:划掉顶点C处较大的距离值。
已覆盖 · 步骤6:选择并圈出未被圈出的顶点中距离最小者(C)。
已覆盖 · 步骤7:更新顶点C的邻居。
已覆盖 · 步骤8:选择并圈出未被圈出的顶点中距离最小者(D)。
已覆盖 · 展示图的当前状态,以及从 A 出发产生的对 B 和大学的候选标签。
已覆盖 · 解释说明7尚未最终确定;而标号为4的顶点 E 被选为最小的未加圈顶点。
已覆盖 · 用红色方框进行视觉强调,并假设性地解释:若存在一条从 E 到大学的更短边会怎样。
已覆盖 · 从 E 计算出候选值9,并将其与7比较后划去。
已覆盖 · 选择标号为6的顶点 B,并记录前驱箭头 。
已覆盖 · 从 B 计算出候选值8,并将其与7比较后划去。
已覆盖 · 最终将大学处的7加圈,作为最短距离的确认。
已覆盖 · 沿前驱箭头反向回溯,还原最短路径:home → → university。
已覆盖 · 整段视频涵盖最短路径问题的最后步骤:通过回溯确定路径,并对边的权重求和以得到总距离。
从家到大学的最终最短距离是 7。该值是在处理完所有更小的未圈出候选值(特别是标签为 4 的顶点 E 和标签为 6 的顶点 B)之后确定的。
适用条件:算法已经处理了所有暂定标签小于 7 的顶点。;大学处的标签 7 是剩余的最小未圈出标签。;图中的边权重固定为示例中所示。
算法不立即最终确定目标标签 7,因为仍有其他未圈出的顶点具有更小的暂定距离需要先处理。具体来说,顶点 E 有一个未圈出的标签 4,它小于 7。
适用条件:图正在由 Dijkstra 算法处理。;带有圈出标签的顶点被视为已选定/已确定。;未圈出的标签仍是暂定候选值。;存在至少一个未圈出的顶点,其标签小于目标的当前标签。
要更新邻居,你通过将边权重添加到当前圈出顶点的距离来计算从源到每个未访问邻居的总距离。然后你将这些新距离写在邻居旁边。
适用条件:有一个当前的圈出(已确定)顶点。;该顶点有尚未圈出的邻居。;边权重已知且非负。
当一个顶点从不同路径接收到多个距离计算时,你只保留最小的值并划掉较大的值。这确保顶点的标签始终代表从源出发的最短已知距离。
适用条件:顶点可以通过来自不同圈出顶点的多条路径到达。;对已标记的顶点执行新的距离计算。
初始化步骤涉及给起始顶点(家)分配距离 0,并通过在它周围画一个圆圈来将其标记为已访问。所有其他顶点最初都被认为具有无限或未定义的距离,直到它们被邻居计算更新。
适用条件:算法正在启动。;源顶点被识别为“家”。
顶点处的数字标签代表从源顶点(家)到该特定顶点的当前已知最佳距离。标签周围的蓝色圆圈表示该距离在当前算法运行中已被接受为该顶点的最终值。
适用条件:演示使用视觉白板式的表示法。;源顶点是“家”。;算法是 Dijkstra 最短路径算法。
规则是选择具有最小暂定距离标签的未圈出顶点。然后圈出该顶点以将其标记为已确定,并从提供此最小距离的顶点画出前驱箭头。
适用条件:有分配了距离标签的未圈出顶点。;算法在更新邻居后处于选择阶段。
要重建最短路径,你需要从目标顶点沿着前驱箭头向后追溯到源顶点。在算法执行期间,每当选择一个顶点或更新其标签时,都会从提供当前最佳标签的顶点画出一个箭头。
适用条件:在前驱箭头必须在标签更新期间被记录下来。;目标标签已经最终确定(被圈出)。;图是有向的,或者为了遵循记录的箭头而被视为有向的。