关键路径——C语言(理论)

news2024/11/26 9:16:31

关键路径,是项目网络中从起始事件到终止事件的最长路径,决定了项目的最短完成时间。

关键路径中的任务没有任何可调整的余地,如果任何一个任务被延迟,整个项目的完成时间也会被延迟。

假设我们现在有一个图:把图的边看作是活动,权值为活动的持续时间;图的顶点看作是事件,事件是指在项目中发生的关键时间点没有时间,即箭头的头是事件开始,箭头末尾是事件完成。这就是所谓的AOE图

在以前我们把边看作是距离,在这里我们把边看作是时间,即顶点到顶点所需的时间,那么接下来我们就要引出几个概念:

事件的最早开始时间和最晚开始时间

        我们假设顶点0是从时间为0时开始的,那么顶点1的最早开始时间为 6(因为需要经过时间为6的活动),顶点 2 为 4 ,顶点 3 为 5 。那么顶点 4 的最早起始时间是什么时候?因为要等活动全部进行完才可以进行下一个活动,所以顶点 4 的最早起始时间为 7,同样对于顶点 8 来说,有多条路径,但是要等前面所有活动都进行完,也就是取时间最长的,所以是(7+9+2)或者(7+7+4)路径而不是走顶点0,3,5,7,这样加起来是17<18。

所以事件(顶点)的最早开始时间为(从0到8):

0,6,4,5,7,7,16,14,18

        接下来是最晚开始时间,最晚时间代表着在不延误项目的情况下,最晚开始的时间。对于最后的事件 8 ,最晚开始时间就是最早开始时间(意思就是后面没得可以做了,要立刻宣布项目的完成,所以最晚也是最早),所以事件 8 的最晚开始时间为 18。

        反推前面的事件,事件 6 的最晚开始时间为 18-2=16,事件 7 的最晚开始时间为 18-4=14,事件 5 的最晚开始时间为 14-4=10,事件 4 的最晚开始时间为 16-9=7 或者 14-7=7,事件 3 的最晚开始时间为 10-2=8,事件 2 和事件 1 的最晚开始事件为7-1=6,那么事件0的最晚开始时间为多少?是6-6=0,6-4=2,还是8-5=3?考虑到不能延误活动,应该是三个中最小的6-6=0。

所以事件的最晚开始时间为(从0到8):

0,6,6,8,7,10,16,14,18

当事件的最早开始时间和最晚开始时间相等时叫做关键事件,这代表着此事件是项目的关键项目,不可拖延。

活动的最早开始事件和最晚开始事件

        对于活动来说,最早开始时间就是箭头起始事件的最早开始时间,意味着这时已经可以开始进行活动了,所以对于ABC活动来说,最早开始时间都是0,D为6,E为4,F为5,那么GH的最早开始时间是多少?这里GH是事件4的最早开始事件,为7,以此类推。

最后,活动的最早开始时间,从(A到K):

0,0,0,6,4,5,7,7,7,16,14

        最晚开始时间是箭头的终止事件的最晚开始时间减去权值,意味着这时必须要开始进行活动了,否则会延误,对于A来说,事件1的最晚开始时间为6,所以6-6=0,B,事件2的最晚开始时间为6,6-4=2,也就是说,B活动最晚要在时间为 2 的时候进行。以此类推。

最后,活动的最晚开始时间,从(A到K):

0,2,3,6,6,8,7,7,10,16,14

讲完这两个概念,才到文章的主题:关键路径。

        关键路径是指活动的最早开始时间减去最晚开始时间为0的活动,也就是没有时间余量。我们可以发现 ADGHJK 活动是最早开始时间等于最晚开始时间的,所以这就是关键路径,如图:

        因为关键路径是最短完成项目的事件,所以在优化项目的时候要着重优化这几个活动,从而提高效率,这就是关键路径的意义。

现在我们可以先思考一下代码的过程:

1.拓扑排序,因为最早最晚时间要考虑前驱后继(事件)

2.计算事件的最早最晚时间,根据是否相等确定关键路径上的事件。

3.找出关键路径

完整的代码会在下一篇文章,希望对你有所帮助,如有错误欢迎指出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1871695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android开发系列(十二)Jetpack Compose之BottomSheet

BottomSheet 是 Android 中一个常用的 UI 组件&#xff0c;它通常用于显示从屏幕底部弹出的用户界面。Jetpack Compose 是 Android 中的一个全新 UI 工具包&#xff0c;它提供了一种声明式的方式来构建用户界面。Jetpack Compose 中也有一个名为 BottomSheet 的组件&#xff0c…

2、Redis持久化与高可用架构

一、Redis 持久化 RDB 快照&#xff08;Snapshot&#xff09; 基本概念&#xff1a;RDB&#xff08;Redis DataBase&#xff09;快照是将 Redis 内存中的数据在某个时间点保存到磁盘中的一种持久化方式&#xff0c;默认保存到 dump.rdb 的二进制文件中。通过 RDB 快照&#xff…

嵌入式 Linux 设备刷系统具体组成

嵌入式 Linux 设备刷系统具体组成 1 介绍1.1 概述1.2 嵌入式 Linux 的组成1.3 U-Boot1.4 Linux 内核1.5 设备树1.6 根文件系统 参考 1 介绍 1.1 概述 一个完整的 linux 系统&#xff0c;通常包含了 U-Boot、kernel、设备树以及根文件系统。 1.2 嵌入式 Linux 的组成 1.3 U-…

苹果电脑有什么好玩的游戏 Windows电脑上的游戏怎么在Mac电脑玩

苹果电脑不仅在工作和生产领域备受推崇&#xff0c;其游戏领域也同样令人惊艳。从经典的策略游戏到刺激的竞技游戏&#xff0c;苹果平台上有着丰富多样的游戏选择&#xff0c;满足了不同玩家的喜好和需求。下面我们来看看苹果电脑有什么好玩的游戏&#xff0c;Windows电脑上的游…

ET9中ETTask传递新的Context原理

ET9中ETTask传递新的Context原理 前言 每一个异步函数都会创建两个对象&#xff0c; 第1个是当前异步函数返回值&#xff08;ETTASK&#xff09;对应的ETAsyncTaskMethodBuilder&#xff0c;通过这个类的静态方法Create创建返回&#xff0c;这个builder类中会有一个Task对象&…

003GeoGebra如何无缝嵌入到PPT里

GeoGebra无缝嵌入到PPT里真是一个头疼的问题&#xff0c;已成功解决&#xff0c;这里记录一下&#xff0c;希望可以帮助到更多人。 注意&#xff0c;后续所有的文章说的PPT都是Offce Power Point, 不要拿着WPS的bug来问我哦&#xff0c;我已经戒WPS了&#xff08;此处表示无奈&…

shell 脚本中断问题定位

shell 脚本中断问题定位 1 介绍2 定位方法2.1 查看脚本的退出状态码2.2 查看系统日志文件2.3 使用journalctl工具2.4 使用dmesg命令2.5 检查脚本自身的日志记录2.6 使用图形界面工具2.7 配置和使用集中式日志管理系统 参考 1 介绍 shell 脚本运行&#xff0c;一段时间后&#…

视频编解码从H.264到H.266:浅析GB28181安防视频汇聚EasyCVR视频压缩技术

随着信息技术的飞速发展&#xff0c;视频编解码技术也在不断革新&#xff0c;以适应高清、超高清甚至8K视频时代的到来。视频编解码技术作为数字多媒体领域的核心技术之一&#xff0c;也在不断地演进和革新。从早期的H.261到现在的H.265、H.266&#xff0c;每一次技术的升级都极…

lambda-map.merge

map.merge 结论: 1.当前传入的 key ,value biFunction 2.如果之前map不存在则直接put(当前key,当前value) 3.如果之前map已经有了,老value与 当前value 进入function处理后再 put(当前key,处理后的value)

【YOLOv5/v7改进系列】引入RT-DETR的RepC3

一、导言 RT-DETR&#xff08;Real-Time Detection Transformer&#xff09;是一种针对实时目标检测任务的创新方法&#xff0c;它旨在克服YOLO系列和其他基于Transformer的检测器存在的局限性。RT-DETR的主要优点包括&#xff1a; 无NMS&#xff08;非极大值抑制&#xff09;…

基于LMS自适应滤波的窄带信号宽带噪声去除(MATLAB R2021B)

数十年的研究极大的发展了自适应滤波理论&#xff0c;自适应滤波理论已经成为信号处理领域研究的热点之一。从理论上讲&#xff0c;自适应滤波问题没有唯一解。为了得到自适应滤波器及其应用系统&#xff0c;可以根据不同的优化准则推导出许多不同的自适应理论。目前该理论主要…

youlai-boot项目的学习(4) 前后端本地部署

环境 1、macOS, brew, IntelliJ IDEA, WebStrom 2、后端&#xff1a;https://gitee.com/youlaiorg/youlai-boot.git , master, 9a753a2e94985ed4cbbf214156ca035082e02723 3、前端&#xff1a;https://gitee.com/youlaiorg/vue3-element-admin.git, master, 66b913ef01dc880ad…

嵌入式Linux系统编程 — 4.1 字符串输入输出

目录 1 字符串输出 1.1 字符串输出函数简介 1.2 示例程序 2 字符串输入 2.1 字符串输入简介 2.2 示例程序 程序运行时&#xff0c;需打印信息至标准输出 stdout 设备 或标准错误 stderr设备&#xff08;譬如屏幕&#xff09;&#xff0c;如调试信息、报错信息、中间产生的…

hnust 1817 算法10-10,10-11:堆排序

hnust 1817 算法10-10,10-11&#xff1a;堆排序 题目描述 堆排序是一种利用堆结构进行排序的方法&#xff0c;它只需要一个记录大小的辅助空间&#xff0c;每个待排序的记录仅需要占用一个存储空间。 首先建立小根堆或大根堆&#xff0c;然后通过利用堆的性质即堆顶的元素是最…

NDT(基于正态分布变换的配准算法)

NDT是将单个扫描的离散点集转换为空间上定义的分段连续可微概率密度&#xff0c;该概率密度由一组易于计算的正态分布组成的算法。采用NDT连续化后&#xff0c;传统硬离散优化问题能够潜在地转化为更易于处理的连续优化问题。 NDT原理 NDT将根据点云中点所处的位置&#xff0…

一款开源、免费、现代化风格的WPF UI控件库

前言 今天大姚给大家分享一款开源&#xff08;MIT License&#xff09;、免费、现代化风格的WPF UI控件库&#xff1a;ModernWpf。 项目介绍 ModernWpf是一个开源项目&#xff0c;它为 WPF 提供了一组现代化的控件和主题&#xff0c;使开发人员能够创建具有现代外观的桌面应…

Linux的fread函数

fread函数 从文件中读入数据到指定的地址中 函数原型 : size_t fread(void*buff , size_t size, size_t count , FILE* stream) /* * description : 对已打开的流进行数据读取 * param ‐ ptr &#xff1a;指向 数据块的指针 * param ‐ size &#xff1a;指定读取的每…

GuLi商城-商品服务-API-三级分类-删除-页面效果

一步步学习Vue太慢了&#xff0c;准备跳过前端的学习&#xff0c;直接使用前端完整的项目 下载依赖npm install&#xff0c;会报错&#xff0c;排查了好久 我安装的是Node14&#xff0c;所以必须要安装4.14 Vscode终端输入&#xff1a;npm install node-sass4.14 输入&#x…

snat、dnat和firewalld

snat &#xff1a;源地址转换 内网——外网 内网ip转换成可以访问外网的ip 也就是内网的多个主机可以只有一个有效的公网ip地址访问外部网络 DNAT&#xff1a;目的地址转发 外部用户&#xff0c;可以通过一个公网地址访问服务内部的私网服务 也就是私网的IP和公网IP做一个…

Golang | Leetcode Golang题解之第202题快乐数

题目&#xff1a; 题解&#xff1a; func isHappy(n int) bool {cycle : map[int]bool{4: true, 6: true, 37: true, 58: true, 89: true, 145: true, 42: true, 20: true}for n ! 1 && !cycle[n] {n step(n)}return n 1 }func step(n int) int {sum : 0for n > …