数据结构中的最短路径、拓扑排序与关键路径问题


最短路径:


从一个顶点到其余各顶点的最短路径:
问题描述: 给定一个带权有向图G与源点v,求从v到G中其他顶点的最短路径,并限定各边上的权值大于或等于0。

单源最短路径问题: Dijkstra算法
狄克斯特拉(Dijkstra)求解思路:
设G=(V,E)是一个带权有向图, 把图中顶点集合V分成两组:

1组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径v,… ,u,
就将u加入到集合S中,直到全部顶点都加入到S中,算法就结束了)。
2组为其余未求出最短路径的顶点集合(用U表示)。

在这里插入图片描述
狄克斯特拉算法的过程:
(1)初始化: S只包含源点即S={v},v的最短路径为0。U包含除v外的其他顶点,U中顶点i距离为边上的权值(若v与i有边<v,i>)或∞(若i不是v的出边邻接点)。
在这里插入图片描述
(2) 从U中选取一个距离v最小的顶点u,把u加入S中(该选定的距离就是v→u的最短路径长度)。
在这里插入图片描述
(3) 以u为新考虑的中间点,修改U中各顶点j的最短路径长度:若从源点v→j(j∈U)的最短路径长度(经过顶点u)比原来最短路径长度(不经过顶点u)短,则修改顶点j的最短路径长度。 在这里插入图片描述
Dijkstra算法示例演示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

注意: dist[ ]下面的0~6的数字下面的值为源点到该数字点处的最短路径权值和。
例题:求下图的各顶点的最短路径值
在这里插入图片描述
在这里插入图片描述


拓扑排序:


真正统治世界的十大算法:

1. 归并排序,快速排序和堆排序
2. 傅立叶变换与快速傅立叶变换
3. Dijkstra 算法
4. RSA算法(一种加密算法)
5. 安全哈希算法
6. 整数因式分解
7. 链接分析(Google的Page Rank算法)
8. 比例积分微分算法
9. 数据压缩算法(以哈夫曼算法为基础)
10. 随机数生成算法

设G=(V,E)是一个具有n个顶点的有向图,V中顶点序列v1,v2,…,vn称为一个拓扑序列,当且仅当该顶点序列满足下列条件:
若<i,j>是图中的边(或从顶点i → j有一条路径):
则在拓扑序列中顶点i必须排在顶点j之前。
在一个有向图中找一个拓扑序列的过程称为拓扑排序。
在这里插入图片描述在这里插入图片描述
2、拓扑排序步骤

       1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它。
       2)从图中删去该顶点,并且删去从该顶点发出的全部有向边。
       3)重复上述两步,直到剩余的图中不再存在没有前驱的顶点为止。

在这里插入图片描述
对与上述拓扑排序产生的结果并不唯一
因为排序的入度为0的顶点可以按照任意顺序进行书写
例如上面de拓扑排序:
①入度为0的有c1和c2所以可以先写c1或者先写c2
②假设先写c2,那么再删去c2顶点 并且删除c2顶点的所有出度的线
③此时入度为0的有c1与c7,这俩个先写谁都行
④以此类推,直到所有的数都排完序


关键路径:


1、什么是AOE网 即边表示活动的网:AOE网(Activity On Edge)

用一个带权有向图(DAG)描述工程的预计进度。
顶点表示事件,有向边表示活动,边e的权c(e)表示完成活动e所需的时间(比如天数)。
图中入度为0的顶点表示工程的开始事件(如开工仪式),出度为0的顶点表示工程结束事件。

    从AOE网中源点到汇点的最长路径,具有最大长度的路径叫关键路径。
    关键路径是由关键活动构成的,关键路径可能不唯一。 

在这里插入图片描述
注意: 关键路径找的是最终这条线路的总权值之和最大的那一个(因为要完成一个工程,要当最后完成的工程完工后才算完成)
若要提高该工程的效率,减少工作天数,应该从减少关键路径权值开始,若有多个关键路径的话,只减少一个关键路径上的权值是不会提高效率的
(1)事件的最早开始时间:
事件v的最早开始时间:规定源点事件的最早开始时间为0。定义图中任一事件v的最早开始时间(early event)ee(v)等于x、y、z到v所有路径长度的最大值。
(2)事件的最迟开始时间:
事件v的最迟开始时间:定义在不影响整个工程进度的前提下,事件v必须发生的时间称为v的最迟开始时间(late event) ,记作le(v)。le(v)应等于ee(y)与v到汇点的最长路径长度之差:。
(3)对于关键活动
对于每个活动a,求出d(a)=l(a)-e(a),若d(a)为0,则称活动a为关键活动。
对关键活动来说,不存在富余时间。

在这里插入图片描述
举个例子:
如上图a→b→e是关键路径,所以b的最早开始时间与最晚开始时间相同都为6(没有富裕时间)
而对于该工程的另一条线路a→c→e,对于c的最早开始时间就为4,因为该工程的完成时间是7天,所以在保证不影响工程的完成时间的情况下,最晚开始时间为:7-1=6天
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱睡觉的小馨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值