首页 > 其他分享 >狄杰斯特拉正确性的一点理解

狄杰斯特拉正确性的一点理解

时间:2023-10-24 19:57:55浏览次数:29  
标签:特拉 正确性 元素 集合 狄杰斯 插入 性质

把之前不求甚解的地方补上,顺带一提,最小生成树的prim算法和狄杰斯特拉基本一模一样

 

狄杰斯特拉算法其实和红黑树有点像,两者都是先弄出一个具有某种性质的集合,接着不断向这个集合中插入元素并进行维护,以确保这个集合一直满足某种性质,直到所有需要处理的元素都在这个集合中,自然也就完成了算法的目的,这种思路很有学习的价值

 

狄杰斯特拉中具有某种性质的集合是d【】数组,用于记录“以某个点作为起点,到当前节点的最短路径”,现在我们已经得到了集合,下一步就是要向集合中不断插入元素,并找到某种维护方式,使d【】数组一直保持这个性质,如何维护狄杰斯特拉就不多赘述,重点讲讲为什么这么维护是正确的

 

1.为什么每次要选择当前d【】最小的元素作为更新的起点?

贪心

以红黑树的插入为例,红黑树中插入的节点一定是红色而不是黑色,这是因为如果插入红色节点,只是有可能破坏红黑树的性质从而导致要进行维护,而如果插入黑色节点,则一定会破坏红黑树的性质从而必须进行维护,同样的道理,所有d【】对应的节点中,当前已知的,d【】最小的元素显然是最有可能在最短路中的,再换个角度,d【】最小的元素,离起点最近(也就是到起点的距离最小),所以每次更新,都相当于是在目前已知的,最短路的结尾进行下一步的更新

 

2.如何保证每次松弛操作完,不会破坏d【】中的性质?

假设此时正在更新第x个元素,那么对于前x-1个元素中的任意一个元素y来说,只有两种情况,第一种,松弛操作的时候松弛到y了,这种情况下只需要比较原本的d【】和从当前这条路过来的距离谁更短,让短的那个成为新的d【】,这样就没有破坏d【】的性质,其中保存的依旧是最短路的长度,第二种,这次松弛与y无关,那么这次操作自然就不会改变与y有关的d【】,当前的d【】依旧保持性质

 

有问题欢迎指出

 

标签:特拉,正确性,元素,集合,狄杰斯,插入,性质
From: https://www.cnblogs.com/pcpcppc/p/17785629.html

相关文章

  • 【迪杰斯特拉】Dijkstra
    前言此乃一个小Oler的一篇图论算法随笔,从今日后,还会进行详细的修订。一、简单介绍(Dijkstra)迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰......
  • Java 迪杰斯特拉 算法实现
    在这里记录下自己写的迪杰斯特拉代码。思路本质是贪心算法:开始时设定两个集合:S,T;S存入已经遍历的点,T存所有未遍历的点;首先将起点放入S中,更新T中所有节点的权重(和起点联通的节点更新权重,其他节点权重设为无穷大);在T中寻找权重最低的点(假设是M点),将M点放入S中,同时更新T里所有节......
  • php 如何实现检测nginx配置的正确性
    在Web服务器的搭建过程中,Nginx是一款非常流行的开源软件,它能够快速、高效地处理HTTP请求。为了保证Nginx服务器的稳定性和安全性,我们需要定期检测Nginx配置文件的正确性,以便及时发现并解决问题。本文将介绍如何使用PHP实现检测nginx配置的正确性。安装php-fpm首先需要安装php-fpm,它......
  • C语言编程的结构化要求和正确性与容错性要求
    一、结构化要求(1)禁止出现两条等价的支路。(2)禁止使用GOTO跳转语句。(3)用IF语句来强调只执行两组语句中的一组。禁止ELSEGOTO和ELSERETURN。(4)用CASE实现多路分支。(5)避免从循环引出多个出口。(6)3.6函数只有一个出口。(7)不使用条件赋值语句。(8)避免不必要的分支。(9)不要轻易用条件......
  • 迪杰斯特拉算法
    迪杰斯特拉算法(单源最短路径)算法基本流程:node0asstart.注意算法流程默认图是联通的,若不联通,需要添加循环跳出处理。stepNode0Node1Node2Node3visitedpointset0(init)0INT_MAXINT_MAXINT_MAX{}10(√)31INT_MAX20(√)31(√)9......
  • python实现迪杰斯特拉算法
    Dijkstra算法可以计算出在有权图中从某个起点出发到其他任何一点的最短路径长度算法思想:迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。定义起点s,终点t,集合U表示还没有找到起点到该点的最短路......
  • Labview与阿特拉斯开放式通讯 网口读取扭矩值 包括Labview程序、阿特拉斯调试软件、开
    Labview与阿特拉斯开放式通讯网口读取扭矩值包括Labview程序、阿特拉斯调试软件、开放式通讯测试软件、开放式通讯协议、PM4000手册。ID:2668657244980176......
  • 6-2 最短路径(迪杰斯特拉算法)
    试实现迪杰斯特拉最短路径算法。函数接口定义: voidShortestPath_DIJ(AMGraphG,intv0); 其中 G 是基于邻接矩阵存储表示的有向图, v0表示源点裁判测试程序样例: #include<iostream>usingnamespacestd;#defineMaxInt32767#defineMVNum100typedefchar......
  • POJ 1797 Heavy Transportation(迪杰斯特拉最短路变形)
    传送门题意分析:Hugo想要扩展他的公司,他有起重机要到目的地,到达目的地有很多条路径,但是,每一条路都有相应承重量,现在需要找出到达目的地的最大承重道路的承重质量。解题分析:首先,每一条路径的承重量取决于承重量最小的那条道路(短板效应),所以就是找所有路径的最小值,然后选择最小值最大的......
  • 迪杰斯特拉算法
    输入可能是边以及权值,将其保存在邻接表之后转为使用邻接矩阵来进行存储。然后需要一个数组来存放从起点到所有点的距离的数组dist,需要一个visited数组来表示是否以访问。算法流程:首先初始化起点到各点的初始距离选择其中最短的一个距离对应的顶点,并且要求该点未被访问......