一:求最小生成树
应用场景:例如要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。
普里姆算法:
该算法的核心就是依次增大连通图的过程:
- 首先任意选择一个节点,作为一个连通图
- 然后找到与该连通图相邻的一个节点(权值最小),连接
- 重复上述步骤,知道包含所有结点和 n - 1条边
克鲁斯卡尔算法:
该算法的核心就是依次挑选最小权值的边的过程:
- 将图中的所有边都去掉。
- 将边按权值从小到大的顺序添加到图中,保证添加的过程中不会形成环
- 重复上一步直到连接所有顶点,此时就生成了最小生成树。
二:拓扑排序
常用于判断某个有向图是否有环。通常再求图的关键路径前先用拓扑排序来确保图无环。
拓扑步骤:
1. 在有向图中选一个没有前驱的顶点并且输出。
2. 从图中删除该顶点和所有以它为尾的弧。
3. 重复上述两步,知道全部顶点均已输出,或者当前图中不存在无前驱的顶点为止。
注意:有向无环图的拓扑有序序列不一定唯一。
三:图的关键路径
主要用来评估工程的完成时间,主要用来解决一下问题:
- 完成整个工程至少需要多少时间?
那些活动是影响工程进度的关键?
如图所示:假想是一个有7项活动的AOE网,其中有7个事件(V1,V2,V3…V7)。
每个事件表示在它之前的活动已经完成,在它之后的活动可以开始。
如V0表示整个工程开始,V7表示整个共结束,V5表示a4和a8已经完成,a9可以开始。
下一节将详细来给大家讲解影响工程的关键边、关键路径、事件和活动的最早最迟执行时间等的求法。