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

    你可能感兴趣的文章
    python 中 dict 的另一种用法
    查看>>
    Python 中只有一个 True 和一个 False 对象吗?
    查看>>
    Python 中多线程与多处理之间的区别
    查看>>
    Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
    查看>>
    Python 从数据库中存储和检索密码的最安全方法
    查看>>
    Python语言及其应用 - 知识点遍历
    查看>>
    Python 优化提速的 8 个小技巧
    查看>>
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>
    Python 使用flush函数将缓冲区数据立即写磁盘
    查看>>
    python 使用in判断不准确,in不好使
    查看>>
    Python 使用pandas 进行查询和统计详解
    查看>>
    Redis 配置文件redis.conf详细解释
    查看>>
    python网络爬虫(2)——scrapy框架的基础使用
    查看>>
    Python 使用哈希函数用于加密
    查看>>
    Python 依赖管理的革新——Poetry 深度解析
    查看>>
    python 保留精度及增加去除数字的千位分隔符(金额化数字)
    查看>>
    python 倒计时 9,8,7,。。。。。。0
    查看>>
    Python 入门开发学习笔记之数据的增删改查
    查看>>