初见最短路!最适合小白的最短路入门!!!(Dijkstra、Floyd)

最短路入门(Dijkstra、Floyd)

1 最短路问题是什么?

最短路问题(Shortest Path Problem, SPP是图论中的一个经典问题,旨在找到图中两点之间的最短路径。这个问题在计算机科学、运筹学以及网络设计等领域有着广泛的应用。

1.1 定义

给定一个图 G = (V,E),其中 V 是顶点集合,E 是边集合,每条边都有一个相应的权重 w (eE)。最短路问题就是要找到图中两个顶点 uv 之间的最短路径,即权重之和最小的路径。

1.2 分类

最短路问题可以分为大类:

  1. 无向图的最短路问题:在这种情况下,图中每条边都没有方向,w(e) 通常表示边 e 的长度或成本。

  2. 有向图的最短路问题:在有向图中,边具有方向,从一个顶点指向另一个顶点,此时 w(e) 可能表示沿边 e 行驶的距离或时间等。

2 最短路问题怎么做?

由于无向图的最短路操作可通过转换有向图的最短路操作得到,所以我们在这里只谈论有向图的最短路操作。(其实是本蒟蒻太菜了 [哭])

2.1 单源最短路(Dijkstra)

2.1.1 是什么?

单源最短路径(Single-Source Shortest Path)问题是指在一个加权图中,找出从单一源点(起始点)到图中所有其他顶点(目标点)的最短路径。这里的“最短”通常指的是路径的总权重最小,即经过的边数最少或者所花费的时间最短,取决于图的加权方式。

2.1.2 Dijkstra
定义:

Dijkstra算法是一种具有贪心、dp思想的算法,主要用于解决加权图中从单一源顶点所有其他顶点最短路径问题

它通过不断地选择未访问顶点中距离最小的顶点,并更新其所有邻接点的最短路径长度,直至找到所有顶点的最短路径。

该算法保证了得到的最优解,时间复杂度为O(V^2)【其中V是顶点的数量;这是因为对于每个顶点,我们需要遍历整个顶点集合来找到下一个最短路径候选顶点】;但如果使用优先队列可以优化到O(E + V*logV)【其中E是边的数量;这是因为对于每个顶点,我们可能需要处理最多E条边,每处理一条边,我们可能会在优先队列中进行VlogV次的操作(因为每个顶点最多被弹出VlogV次)】。

实现:
步骤(文字描述):
  1. 初始化:首先,给图中的所有顶点赋一个初始距离值,通常将起点设置为0,其他所有的顶点的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值