关键路径求法

2023-11-10

关键路径概念:

      在无回路的有向网络中,假设只有一个入度为0的顶点(称为源点)和一个出度为0的顶点(称为汇点),则从源点到汇点之间的最长的路径称为关键路径。

AOE网:

    无回路有向网络可以用来表示一个包含多项活动的工程计划:有向边表示一项活动,边上的权表示完成这项活动需要的时间;顶点表示"所有入边代表的活动已完成,出边代表的活动可以开始"这样一种状态或者事件,其中源点表示工程的开始,汇点表示工程的结束;源点到汇点的某一关键路径上边的权值之和表示完成整个工程的计划时间。

    通过求有向网络的关键路径,可以算出整个工程从开始到结束至少需要多少时间;可以知道哪些活动是影响工程进度的关键活动。

    这种用边表示活动且只有一个源点和一个汇点的无回路有向网络称为边表示活动的网,简称AOE网。

两个与顶点有关的量:

    在下面的讨论中,假定AOE网有n个顶点,源点是V1,汇点是Vn。

    -最早发生时间:

        事件Vi的可能的最早发生时间earliest(i),它等于从源点V1到顶点Vi的最长路径长度。

    -最迟发生时间

        在保证汇点事件Vn在earliest(n)时刻发生的前提下,事件Vi允许的最迟发生时间latest(i),它等于earliest(i)减去从顶点Vi到汇点Vn的最长路径长度。

earliest数组的计算方法:

    -令earliest(1)=0;

    -按顶点的拓扑顺序计算earliest(j):

        earliest(j)=max{(earliest(i)+Wij)|Vi邻接到Vj}

    -例如

        earliest(a)=max{earliest(b)+u,earliest(c)+v}

latest数组的计算方法:

    -令latest(n)=earliest(n);

    -按顶点的逆拓扑顺序计算latest(i):

        latest(i)=min{(latest(j)-Wij)|Vj邻接于Vi}

    -例如:

        latest(a)=min{latest(d)-x,latest(e)-y}

两个与边有关的量:

    对于活动ak=<Vi,Vj>,可以定义它的可能的最早开始时间和允许的最迟开始时间。

    -最早开始时间:活动ak的可能的最早开始时间等于事件Vi的可能的最早发生时间earliest(i)

    -最迟开始时间:活动ak的允许的最迟开始时间等于事件Vj的允许的最迟发生时间latest(j)减去完成该活动的计划时间Wij。

   

(最早发生,从前往后算;最迟发生,从后往前算。)


 

求关键路径的算法:

    1、计算每个事件可能的最早发生时间

//计算每个事件可能的最早发生时间
template<class T>
void ExtLGraph<T>:: Earliest(int* earliest, int* order)
{
    for(int i=0;i<n;i++)  earliest[i]=0;
     for(i=0;i<n;i++){
	    int k=order[i];
	    for (ENode<T>* p=a[k]; p; p=p->nextArc){
            int  j=p->adjVex;
	    if (earliest[j]<earliest[k]+p->w) 
	  	  earliest[j]=earliest[k]+p->w;
        }
  }
 }

    2、计算每个事件允许的最迟发生时间

//计算每个事件允许的最迟发生时间
template<class T>
void ExtLGraph<T >:: Latest(int* latest,int* order,int longest)
{
	for (int i=0;i<n;i++) latest[i]=longest;
    for (i=n-2;i>-1;i--){
        int j=order[i]; 
           for (ENode<T>* p=a[j];p;p=p->nextArc) {
               int  k=p->adjVex;
   if (latest[j]>latest[k]-p->w)
		  latest[j]=latest[k]-p->w;
}
     }
 }

    3、输出关键活动

最早发生时间和最迟发生时间相等的事件,一般就是关键活动。

从源点到汇点具有最大长度的路径叫关键路径,在关键路径上的活动称为关键活动。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关键路径求法 的相关文章

  • 76. 如何理解 Python 中字符串中的\字符?

    Python字符串中的 字符代表转义字符 路径名中用来连接路径名 编写太长代码手动软换行 转义符 转义符 描述 续行符 在行尾时 反斜杠符号 单引号 双引号 a 响铃 b 退格 Backspace e 转义 000 空 n 换行 v 纵向制

随机推荐

  • border-sizing之border-box、content-box

    border sizing是CSS3的属性之一 其属性值为border box content box 我们正常理解的盒模型其实是border sizing的属性值是content box 即正常盒模型 属性值为border box的盒模型
  • linux IO Block layer 解析

    早期的 Block 框架是单队列 single queue 架构 适用于 硬件单队列 的存储设备 比如机械磁盘 随着存储器件技术的发展 支持 硬件多队列 的存储器件越来越常见 比如 NVMe SSD 传统的单队列架构也因此被改成了多队列 m
  • IDEA插件开发

    文章目录 写在前面 1 使用IDEA新建插件项目 1 1 配置SDK并新建项目 非gradle项目 1 2 项目目录结构 1 3 plugin xml 1 4 AnAction 1 5 测试运行 1 6 打包 安装插件 2 AnAction
  • 前缀和【一维前缀和与二维前缀和】

    全文目录 一维前缀和 构建一维前缀和数组 子序列的和 二维前缀和 构建二维前缀和数组 子矩阵的和 一维前缀和 一维前缀和很简单 就是高中数学中的前n项和 设有一个数组a a a 1 a 2 a 3 a 4 a 5 a 6 a n 还有一个数
  • C++ 之指针

    文章目录 参考 描述 指针 运算符 地址运算符 奇偶分体 指针的创建 间接寻址运算符 句点运算符 运算符优先级问题 箭头运算符 运算符优先级 指针 野指针 空指针 通用指针 解引用 分析 指针的算术运算 加减运算 自增运算与自减运算 比较运
  • 匈牙利匹配算法_学习笔记_Python编程实现

    大家好 下面是我关于匈牙利匹配算法的学习记录 内含两个例题的Python编程实现 这是我的第一篇博客 参考的网站在文中都有标注 如有问题欢迎指出 匈牙利匹配算法 匈牙利算法1 无权重二部图最大匹配 几个概念 算法核心思想 算法理论依据 算法
  • vue中实现微信公众号支付

    最近做项目遇到微信支付 根据项目需求使用了微信h5支付 大概的流程介绍 1 配置微信公众号 2 静默授权 获取路径中code 3 根据code拿到openid 4 根据openid获取prepay id 5 获取支付签名 6 调起支付功能
  • C++查找子串string.find()与string::npos

    string find string str abc string subStr1 bc string subStr2 cd str find subStr1 返回1 第一个匹配的下标 str find subStr2 返回string n
  • python 初始化列表的四种方法

    这里以 初始化大小为20个元素的列表 每个元素初始化为0 来举例说明 方法一 使用for循环和append 创建一个空的列表 使用append 方法通过f or循环n次 来将元素添加到列表中 arr for i in range 20 ar
  • 13-2 静态链接库的构建和使用

    1 静态链接库与动态链接库 程序编译时发生的动作称为静态行为 程序运行时发生的动作称为动态行为 故链接共分为两种 静态链接和动态链接 目前来看 链接使用的原因在于 主程序文件执行时需要引入头文件 执行外部函数 而引入头文件时 在编译阶段确定
  • pytorch loss.backward问题:RuntimeError: element 0 of tensors does not require grad and does not have a

    最近遇到了一个问题 在pytorch定义模型 训练过程中 反向传播时 loss backward 在上面这个未知报错 RuntimeError element 0 of tensors does not require grad and d
  • ssd检测坏块工具_如何看SSD还能用多久 固态硬盘寿命如何检测【详细介绍】

    理论上来说 固态硬盘的寿命要比机械硬盘短 不过SSD抗震性强 实际运用寿命不一定比HDD差 不过 固态硬盘一旦破坏很难维修 数据无法向机械硬盘那样 可以较为容易的恢复 因此在运用中 很多用户都会担心固态硬盘的运用寿命问题 那么 怎么看SSD
  • Quartus II软件添加设备

    文章目录 前言 一 前期准备 二 进入网站并下载对应的 qdz文件 1 先进入Intel主页并登录账号 2 找到下载地址 Quartus软件中添加设备 前言 最近为了调试Cyclone V系列的一个FPGA 安装了Quartus II 17
  • 服务器安装系统一直打圈,服务器宕机的造成原因和解决方法介绍

    服务器宕机原因是什么 怎么解决 服务器宕机是什么原因造成的 服务器宕机它的解决方法是什么 服务器宕机的造成原因和解决方法介绍 随着如今互联网信息化时代的不断发展 数据存储和传输在各种网络科技面前也显得越来越重要 选择一款好用的服务器愈发重要
  • matlab中使用bp神经网络完成分类问题

    训练集 27 2500矩阵 训练集有2500个样本 每个样本27个属性 矩阵的每一列表示一个样本集 标签 30 2500矩阵 对应2500个标签 30类 若为该类 则该类数字为1 其余为零 例 1 0 0 0 四类中的类一 神经网络训练 l
  • 具体数学第二版第一章习题(1)

    1 当 n 2 时 区间 2 n 1 为空 所以当 n 2 时不能证明2匹马颜色相同 2 三根柱子ABC 假设 n 个盘子的答案为 f n 最后一个盘子一定是A gt C gt B 所以整个过程分为5步 1 将上面 n 1 个盘子从A gt
  • 前端vue中箭头函数省略return的写法之详细讲解

    1 什么括号都不用的情况 a b gt return a b 简化 a b gt a b 2 使用 的情况下 let arr arr map item gt return h1 科科 h1 简化 arr map item gt h1 科科
  • The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class fi

    今天在家编写代码的时候 提示如下错误信息 The type java util Map Entry cannot be resolved It is indirectly referenced from required class fil
  • 【Python】如何根据时间序列数据提取星期几的信息?(如2023-04-05提取为Wednesday)

    一 问题描述 在Python中 可以使用datetime模块来处理日期和时间数据 并从中提取星期几 以下是一个示例代码 import datetime 定义一个日期字符串 date string 2023 04 05 将日期字符串转换为日期
  • 关键路径求法

    关键路径概念 在无回路的有向网络中 假设只有一个入度为0的顶点 称为源点 和一个出度为0的顶点 称为汇点 则从源点到汇点之间的最长的路径称为关键路径 AOE网 无回路有向网络可以用来表示一个包含多项活动的工程计划 有向边表示一项活动 边上的