博客
关于我
图(三):拓扑排序、关键路径
阅读量:331 次
发布时间:2019-03-04

本文共 804 字,大约阅读时间需要 2 分钟。

拓扑排序与关键路径

目录

1. 拓扑排序

1.1 定义与背景

有向无环图(DAG)中,顶点表示活动,边表示活动之间的优先关系。拓扑排序是将这些顶点按照其相互关系排列成一个线性序列,使得前置活动始于后置活动。

1.2 方法

  • 在有向图中选一个没有前驱的顶点并输出。
  • 删除该顶点及其所有后驱边。
  • 重复上述步骤,直到所有顶点都被输出或图中不存在无前驱顶点。
  • 2. 算法实现

    2.1 数据结构

    • 邻接表:存储图的结构。
    • 入度数组:记录每个顶点的入度。

    2.2 步骤

  • 初始化入度数组为0。
  • 将所有入度为0的顶点加入栈。
  • while栈不为空:
    • 从栈顶取出顶点并输出。
    • 对其所有后驱顶点依次降低入度。
    • 若某顶点入度变为0,则加入栈。
  • 如果最终输出的顶点数等于总顶点数,则无环;否则存在环。
  • 3. 关键路径

    3.1 定义

    关键路径是完成整个工程所需时间最长的路径。它由一系列活动组成,且每个活动的最早开始时间等于其前驱活动的最早开始时间加上前驱活动的持续时间。

    3.2 寻找关键路径

  • 对图进行拓扑排序。
  • 从源点到汇点记录最长路径。
  • 这条路径即为关键路径。
  • 3.3 计算关键路径

  • 使用拓扑排序结果,从源点出发,逐步计算每个顶点的最早开始时间。
  • 当从源点到某顶点的路径达到最大值时,此时的路径即为关键路径。
  • 4. 应用示例

    假设有一个工程有11项活动和9个事件:

  • 完成整个工程至少需要多少时间?
  • 哪些活动是影响工程进度的关键?
  • 4.1 图示

    工程计划表示为有向图,每个事件表示其之前的活动已完成,之后的活动可以开始。

    4.2 解决方法

  • 通过拓扑排序确定最早开始时间。
  • 计算每个活动的最晚开始时间。
  • 找出最长路径,即关键路径。
  • 关键路径上的活动应优先执行,以缩短整体工期。
  • 4.3 计算结果

    • 最短时间:从源点到汇点的最长路径。
    • 关键活动:路径长度最长的活动。

    通过拓扑排序和关键路径分析,可以有效地优化项目进度管理,确保项目按时完成。

    转载地址:http://caih.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现PCA(附完整源码)
    查看>>
    Objective-C实现perceptron算法(附完整源码)
    查看>>
    Objective-C实现perfect cube完全立方数算法(附完整源码)
    查看>>
    Objective-C实现perfect number完全数算法(附完整源码)
    查看>>
    Objective-C实现perfect square完全平方数算法(附完整源码)
    查看>>
    Objective-C实现PNG图片格式转换BMP图片格式(附完整源码)
    查看>>
    Objective-C实现pollard rho大数分解算法(附完整源码)
    查看>>
    Objective-C实现Polynomials多项式算法 (附完整源码)
    查看>>
    Objective-C实现power iteration幂迭代算法(附完整源码)
    查看>>
    Objective-C实现powLinear函数和powFaster函数算法 (附完整源码)
    查看>>
    Objective-C实现PrimeFactors质因子分解算法 (附完整源码)
    查看>>
    Objective-C实现pythagoras哥拉斯算法(附完整源码)
    查看>>
    Objective-C实现qubit measure量子位测量算法(附完整源码)
    查看>>
    Objective-C实现quick select快速选择算法(附完整源码)
    查看>>
    Objective-C实现radians弧度制算法(附完整源码)
    查看>>
    Objective-C实现radix sort基数排序算法(附完整源码)
    查看>>
    Objective-C实现rayleigh quotient瑞利商算法(附完整源码)
    查看>>
    Objective-C实现RC4加解密算法(附完整源码)
    查看>>
    Objective-C实现recursive bubble sor递归冒泡排序算法(附完整源码)
    查看>>
    Objective-C实现recursive insertion sort递归插入排序算法(附完整源码)
    查看>>