图:图的应用(最小生成树、拓扑排序、关键路径)

一:求最小生成树

应用场景:例如要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。

  • 普里姆算法:

    该算法的核心就是依次增大连通图的过程:

    1. 首先任意选择一个节点,作为一个连通图
    2. 然后找到与该连通图相邻的一个节点(权值最小),连接
    3. 重复上述步骤,知道包含所有结点和 n - 1条边
      图:图的应用(最小生成树、拓扑排序、关键路径)_第1张图片
  • 克鲁斯卡尔算法:

    该算法的核心就是依次挑选最小权值的边的过程:

    1. 将图中的所有边都去掉。
    2. 将边按权值从小到大的顺序添加到图中,保证添加的过程中不会形成环
    3. 重复上一步直到连接所有顶点,此时就生成了最小生成树。
      图:图的应用(最小生成树、拓扑排序、关键路径)_第2张图片

二:拓扑排序

常用于判断某个有向图是否有环。通常再求图的关键路径前先用拓扑排序来确保图无环。

拓扑步骤:
1. 在有向图中选一个没有前驱的顶点并且输出。
2. 从图中删除该顶点和所有以它为尾的弧。
3. 重复上述两步,知道全部顶点均已输出,或者当前图中不存在无前驱的顶点为止。
注意:有向无环图的拓扑有序序列不一定唯一。

三:图的关键路径

主要用来评估工程的完成时间,主要用来解决一下问题:

  1. 完成整个工程至少需要多少时间?
  2. 那些活动是影响工程进度的关键?

    图:图的应用(最小生成树、拓扑排序、关键路径)_第3张图片

    如图所示:假想是一个有7项活动的AOE网,其中有7个事件(V1,V2,V3…V7)。
    每个事件表示在它之前的活动已经完成,在它之后的活动可以开始。
    如V0表示整个工程开始,V7表示整个共结束,V5表示a4和a8已经完成,a9可以开始。

下一节将详细来给大家讲解影响工程的关键边、关键路径、事件和活动的最早最迟执行时间等的求法。

你可能感兴趣的:(数据结构)