迪杰斯特拉算法(过程)原理----一看就懂(无代码版)

主要解决的问题是:

求解单元点的最短路径问题。(带不带方向不重要)

使用下图m为例子:

求从G带点出发 到各个点位的最短路径。

迪杰斯塔拉算法的核心是:每次找到一条最短的从G点出发,能够达到的点。作为最短。然后依次选择。(为什么样子就可以选择出最短路径???)

重点1,找第一条路径时候,找到的最短的那个点,一定是与G(G除外)直接相连的一点个点。我图中最近的点是A点!!!!!!

重点2,那么下一点该如何寻找?? 寻找从G点和A点出发能够到直接达到的最近的点(G,A除外)。注意:如果是从A点出发 能够直接达到的最近的点的距离需要加上A到G的距离。

问题:为什么下一个点,就一定是。从G出发能到达的最短的那个点??

原因:我们不可能越过直接与G连通的点,直接达到一个与G不直接连通的点。例如:当确定了A是到G的一条最短路径的时候,意味着从G出发,想要到达与A连通的顶点的时候必然要经过A点

那有没有可能。其他点与A连通,但还可以通过其他点与G连通。例如D,C他们可以通过其他点与G连通。但是我们并不知道。通过A点是否是最近的点。

所以这就是迪杰斯特拉算法牛的地方,每次只确定一条最短路径。

补充!!:(通常一次过程我们会记录多条短径,但实际有效的只有最短的那一条!!!)

通过上面过程可以发现。如果存在一个中间点X使得C--> X -->G的距离小于 C-->A-->G

那么由于A是最小直接到G的点X到G的距离 一定大于A到G。 所以那个中间点X一定先于C点被求解出来。 

重点在于,如何理解每次找到的那个最短路径,一定是确定的。不可能通过其他点变得更短!!

为了更好的理解使用上图例子。

当找到第一个点A之后,我们将A于G看做一个整体。 从A出发的点,看做从G出发但是需要加上A到G的距离(2).

当我们求从A出发可以直接连通的顶点,实际上就是从G出发的、只不过需要加上A到G的距离。

当求出第一个点A后,我们需要找下一个点的时候!!!!(从G和A出发 )

假设当下一个点X发现是与G点连的一个点距离最短 min。那么就有min = X-->A-->G。 是此次从A或者从G出发能够直接连接的最小的点。!!!。

如果存在一个点T能够使得X-->T-->G距离更小。G-->T的距离dis一定更小于min = X-->A-->G的距离。如果dis小于min  那么我们发现的X点就不是最小的那个点!!! 一定会先发现这个T。

总结来说就是:

每次找到一个最短的路径点!!将每一次最短路径点看成整体出发点(实际距离要加上)。每一次都是寻找这个整体距离最近的点。  我们每次发现的点,都是距离这个整体最近的那个距离。不会存在一个点,距离这个整体更小。而被错过。因为每次

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值