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

    你可能感兴趣的文章
    openSUSE 13.1 Milestone 2 发布
    查看>>
    openSUSE推出独立 GUI 包管理工具:YQPkg,简化了整个软件包管理流程
    查看>>
    OpenVP共用账号 一个账号多台电脑登录
    查看>>
    OpenVSwtich(OVS)Vlan间路由实战 附实验环境
    查看>>
    Openwrt LuCI模块练习详细步骤
    查看>>
    openwrt_git_pull命令提示merger冲突时如何解决?
    查看>>
    OpenWrt包管理软件opkg的使用(极路由)
    查看>>
    OpenWrt固件编译刷机完全总结
    查看>>
    Open××× for Linux搭建之二
    查看>>
    Open×××有线网络时使用正常,无线网络时使用报错的解决方案
    查看>>
    Opera Mobile Classic Emulator
    查看>>
    Operation not supported on read-only collection 的解决方法 - [Windows Phone开发技巧系列1]
    查看>>
    OperationResult
    查看>>
    Operations Manager 2007 R2系列之仪表板(多)视图
    查看>>
    operator new and delete
    查看>>
    operator new 与 operator delete
    查看>>
    operator() error
    查看>>
    OPPO K3在哪里打开USB调试模式的完美方法
    查看>>
    oppo后端16连问
    查看>>
    Optional类:避免NullPointerException
    查看>>