博客
关于我
图(三):拓扑排序、关键路径
阅读量: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/

    你可能感兴趣的文章
    Pandas DataFrame中的列从浮点数输出到货币(负值)
    查看>>
    pandas DataFrame的一些操作
    查看>>
    Pandas Dataframe的日志文件
    查看>>
    pandas Groupby:创建两列的Groupby时,如何按正确的顺序对工作日进行排序?
    查看>>
    Pandas matplotlib 无法显示中文
    查看>>
    pandas PIVOT_TABLE保持索引
    查看>>
    Pandas Plots:周末的单独颜色,x 轴上漂亮的打印时间
    查看>>
    pandas to_latex() 转义数学模式
    查看>>
    Pandas 中的多索引旋转
    查看>>
    Pandas 中的日期范围
    查看>>
    pandas 中的时间序列箱线图
    查看>>
    Pandas 使用指南
    查看>>
    pandas 分组并使用最小值更新
    查看>>
    Pandas 对数据框的布尔比较
    查看>>
    pandas 将通话数据分割为15分钟的间隔
    查看>>
    pandas 找到局部最大值和最小值
    查看>>
    pandas 按日期和年份分组,并汇总金额
    查看>>
    pandas 数据帧到PostgreSQL表中使用的是没有SQLAlChemy的心理复制2吗?
    查看>>
    pandas 数据框条件 .mean() 取决于特定列中的值
    查看>>
    pandas 数据框至海运分组条形图
    查看>>