图的应用。


最小生成树(MST)
想象一下,你有一堆点(顶点)和一些连接这些点的线(边),这些点和线构成了一张图。如果你想要把这些点用线连接起来,但又不想浪费线,最小生成树就是帮你用最少的线把所有点连起来,而且保证这些点之间是通的,但不能有环。
怎么找最小生成树?
有两种流行的算法:
Prim算法:就像你在玩一个游戏,开始时你站在一个点上,然后你看看周围哪个点离你最近,你就走过去,然后继续找下一个最近的点,直到所有点都被你走到过。
Kruskal算法:这个算法像是一个拍卖会,所有的线(边)都按它们的长度(权值)来排序,然后你一条一条地看,如果这条线连接的两个点之前没有被连起来过,你就买下它,直到所有的点都被连起来。
最短路径问题
现在,如果你想知道从一个点到另一个点怎么走最近,有两个算法可以帮忙:
Dijkstra算法:这个算法就像是你在规划一次旅行,你从一个点出发,然后看看哪个邻近的点离你最近,你就先去那里,然后再从那里出发,继续找下一个最近的点,直到你到达目的地。
Floyd算法:这个算法更厉害,它不仅帮你找到从一个点到另一个点的最短路径,而且能告诉你所有点之间的最短路径。它的方法就像是你在尝试不同的路线组合,每次都看看能不能找到一条更短的路。
这些算法就像是不同的旅行规划工具,帮你找到最省钱或者最省时间的路线。


有向无环图(DAG)
想象一下,你有一堆任务要做,这些任务之间有先后顺序,不能乱来。有向无环图就是用来表示这种有顺序的任务的,它像一张没有循环的流程图。
拓扑排序
拓扑排序就是给这些任务排个队,确保如果任务B要在任务A之后做,那么在队列里,任务A一定排在任务B前面。
AOV网
AOV网就是用图形的方式来表示一个项目,每个方块(顶点)代表一个任务,箭头(有向边)表示任务的先后顺序。
逆拓扑排序
逆拓扑排序是另一种排队方法,这次是从最后一个任务开始往前排,确保如果任务A要在任务B之前完成,那么在队列里,任务B一定排在任务A前面。
关键路径分析
关键路径分析是找出项目中最关键的那些任务,这些任务如果延期了,整个项目都得延期。关键路径就是从开始到结束最长的那条路,路上的任务都是关键任务。
变量含义
最早发生时间:任务最早可以在什么时候开始。
最迟发生时间:任务最晚必须在什么时候完成。
最早开始时间和最迟开始时间:对于每个任务来说,它最早可以开始和最晚必须开始的时间。
活动差额:任务最早开始和最晚开始之间的时间差。
关键路径算法
从项目开始,算出每个任务最早可以开始的时间。
从项目结束,算出每个任务最晚必须完成的时间。
根据最早和最晚时间,算出每个任务的开始时间。
找出那些时间差为0的任务,这些任务就在关键路径上。
小贴士
关键任务不能随便加快,因为可能会影响其他任务。
一个项目可能有不止一条关键路径,但只有加快所有关键路径上的任务,项目才能整体加快。
如果关键任务延期了,整个项目都得延期。
缩短关键任务的时间可以加快整个项目,但要注意别让关键任务变成非关键的了。
简单来说,就是教你怎么用图形化的方式来规划和管理项目,找出哪些任务是关键的,怎么合理安排时间,确保项目按时完成。

 

知识点链接
最小生成树(Minimum Spanning Tree, MST)
概念:在连通图中,生成树是包含图中所有顶点的最小连通子图,它只有足够的边数来形成一个树结构,即顶点数减一的边数。
最小生成树:所有生成树中,边的权值之和最小的那棵树。
性质:
最小生成树可能有多个,但它们的边的权值之和是唯一的,并且是最小的。
边数总是顶点数减一。
最小生成树算法
Prim算法
从任意顶点开始,逐步添加与当前树集合最近的顶点,直到所有顶点都被包含。
时间复杂度:适用于边稠密的图。
Kruskal算法
按边的权值排序,选择最小的边,如果这条边连接的顶点不在同一个连通分量中,则加入到树中。
时间复杂度:O(|E|log|E|),适用于边稀疏而顶点较多的图。
最短路径问题
Dijkstra算法:解决单源最短路径问题。
使用集合S记录已找到最短路径的顶点。
使用数组 dist[] 记录从源点到其他顶点的最短路径长度。
使用数组 path[] 记录最短路径的前驱结点。
时间复杂度:不适用于边权值存在负数的情况。
Floyd算法:解决所有顶点对之间的最短路径问题。
初始时,如果两个顶点之间有边,则它们之间的最短路径是边的权值;如果没有边,则为无穷大。
逐步尝试在原路径中加入中间顶点,如果新路径比原路径短,则更新最短路径。
时间复杂度:允许图中有负权边,但不允许有负权回路。
这些算法在图论和网络设计中有广泛应用,例如在网络的最小成本设计、路径规划等领域。
有向无环图(DAG)
定义:一个有向图中不存在环的图称为有向无环图。
应用:用于描述含有公共子式的表达式。
拓扑排序
概念:对有向图构造一个线性序列,满足如果存在从顶点A到顶点B的路径,则A在B之前。
操作过程:
选择一个没有前驱的顶点并输出。
删除该顶点及其所有出边。
重复步骤1和2,直到所有顶点都被输出或无法继续。
AOV网
定义:用DAG表示工程,顶点表示活动,有向边表示活动间的先后关系。
拓扑序列:满足拓扑排序的顶点序列。
逆拓扑排序
实现算法:DFS(深度优先搜索)。
操作过程:
选择一个没有后继的顶点并输出。
删除该顶点及其所有入边。
重复步骤1和2,直到所有顶点都被输出。
关键路径分析
AOE网:带权有向图,顶点表示事件,边表示活动,边上的权值表示活动成本。
关键路径:从源点到汇点的所有路径中,具有最大路径长度的路径。
关键活动:关键路径上的活动。
变量含义
最早发生时间 ve(k):事件vk最早发生的时间。
最迟发生时间 vl(k):事件vk最迟发生的时间。
最早开始时间 e(i):活动ai最早开始的时间。
最迟开始时间 l(i):活动ai最迟开始的时间。
活动差额 d(i):活动ai的最早开始时间和最迟开始时间的差额。
关键路径算法步骤
从源点开始,计算所有顶点的最早发生时间 ve()。
从汇点开始,计算所有顶点的最迟发生时间 vl()。
根据 ve() 和 vl() 计算所有活动的最早和最迟开始时间。
计算所有活动的差额 d(),差额为0的活动构成关键路径。
Tips
关键路径上的所有活动都是关键活动,对工程工期有决定性影响。
不能任意缩短关键活动,因为这可能导致关键活动变成非关键活动。
网中的关键路径可能不唯一,只有加快所有关键路径上的关键活动才能缩短工期。
如果关键活动耗时增加,整个工程的工期将增长。
缩短关键活动的时间可以缩短整个工程的工期,但到一定程度后,关键活动可能会变成非关键活动。
 

 

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值