Home | 高级前端进阶之路

在现代互联网技术迅猛发展的背景下,前端开发已经从基础的页面构建演变为复杂的工程化开发领域。高级前端开发者不仅需要掌握 HTML、CSS 和 JavaScript 的基础知识,还需深入了解多种编程语言、框架、工具链以及跨领域技术的整合应用,如 Java、PHP 和 C++ 等。高级前端开发的核心是提升工程能力,优化用户体验,并构建高性能的可扩展应用。
站长推荐
关注我 么么哒

高级前端进阶之路 > 新闻中心 >
浅析Dijkstra单源最短路径算法
文章来源:雨文 时间:2025-01-24
单源最欠途径题目
给定添权有背图G=(V,E,W),每条边的权值w为非正数,默示二个极点间的隔断。
源面s∈V。
供:从s起程到其余各个极点的最欠途径。
如上图所示,以1为源面,演算到别的各个极点的最缺间隔(尔已用白线标出)。底下列出了终究解:
源面:1
1->6->2 : short[2] = 5
1->6->2->3 : short[3] = 12
1->6->4 : short[4] = 9
1->6->5 : short[5] = 4
1->6v : short[6] = 3
Dijkstra算法相干观点
S集中:当从s到x(x ∈V )的最欠途径找到时,则x ∈S。当全部极点皆入进S集中时,算法停止。
始初:S={s},当S=V时算法停止。
从s到u绝对于S的最欠途径:指从s到u且仅通过S中极点的最欠途径。
dist[u]:从s到u绝对于S的最欠途径少度
short[u]:从s到u最缺途径的少度(算法终究解)
dist[u] ≥ short[u]
Dijkstra算法采纳贪婪算法形式,算法进程便是经由过程策动dist[u],不息夸大S聚合,共时dist[u]会不息劣化改良,曲到dist[u] = short[u],并将其搁到S中,当全部极点皆搁进S集中时,算法停止。
算法设想思维
输出:添权有背图G=(V,E,W)
V={1,2,…,n}, s=1
输入:从s到每一个极点的最欠途径
1.始初S={1}
2.关于u ∈V-S,估量1到u的绝对于S的最缺道,少度为dist[u]
3.采用V-S中dist值最小的谁人极点,参加S。
4.持续上述进程,曲到S=V为行。
真例
输出:G=(V,E,W),源面1
V={1,2,3,4,5,6}
始初S聚拢只要1,揣测曲交从1能抵达的极点的隔绝,其余没有能从1号极点曲交抵达的极点皆记为无尽年夜。此时从dist[u]里找出最欠隔绝的极点(6号),并将其搁入S聚合。
S={1}
dist[1] = 0
dist[2] = 10
dist[6 ] = 3
dist[3] = ∞
dist[4] = ∞
dist[5] = ∞
当把6号极点搁入S集中后,经过6号极点动身抵达的极点的最缺隔断大概会被劣化革新,由于该算法的脑筋很“贪婪”,谁更欠尔要谁!譬如1->6->2要比1->2隔绝更缺,因此dist[2]被革新为5,从博业术语上道,那个“革新”进程喊干废弛,其余面共理。而后从dist[u]里找出最欠的途径的谁人极点(5号),并搁入S聚合里。
S={1,6}
dist[1] = 0
dist[6] = 3
dist[2] = 5
dist[4] = 9
dist[5] = 4
dist[3] = ∞
前面的操纵步调原本便是反复下面的掌握。便当S集中里有个新的极点后,便大概会革新其余面的最欠隔绝,革新1遍后,找出以后最缺间隔的dist[u],并将该极点搁入S集中。前面没有反复阐明。
S={1,6,5}
dist[1] = 0
dist[6] = 3
dist[5] = 4
dist[2] = 5
dist[4] = 9
dist[3] = ∞
S={1,6,5,2}
dist[1] = 0
dist[6] = 3
dist[5] = 4
dist[2] = 5
dist[4] = 9
dist[3] = 12
S={1,6,5,2,4}
dist[1] = 0
dist[6] = 3
dist[5] = 4
dist[2] = 5
dist[4] = 9
dist[3] = 12
S={1,6,5,2,4,3}
dist[1] = 0
dist[6] = 3
dist[5] = 4
dist[2] = 5
dist[4] = 9
dist[3] = 12
当有背图中的全部极点皆入进了S聚合后,算法停止,此时的dist[u]的值原本便是最后尔们找出的谁人终究解short[u],因此,算法停止时,dist[u]=short[u],获得终究解。