关键路径

关键路径详细原理 一、概述   关键路径,顾名思义,就是一个程序中最关键的路径,它关系到整个程序的时间进度,而关键二字指临界点。 我们需要引进两个概念,AOE和AOV网。 二、AOE和AOV网   AOE和AOV网都是一个大型程序的示意图。而AOV关注事件,AOE网关注时间。   举个例子:我需要写一篇博客,在脑回路清奇的我来看,应该具有以下步骤。首先写之前你的明白自己写什么吧(设定目标),然后你得有主干... 阅读详情

关键路径

1.相关概念

AOE网

  • AOE网:在一个表示工程的带权有向图中,用顶点表示事件(如V0),用有向边表示**活动(如<v0,v1> = a1),**边上的权值表示活动的持续时间,称这样的有向图为边表示的活动的网,简称AOE网(activity on edge network)

  • 始点(源点):AOE网中没有入边的顶点,如顶点V0

  • 终点(汇点):没有出边的顶点,如顶点V3

2. 比较

在这里插入图片描述
深红色便是关键路径
在这里插入图片描述

3. 性质

①只有在进入某顶点的活动都已经结束,该顶点所代表的事件才发生。例如:a1和a2活动都结束了,顶点V2所代表的事件才会发生。

②只有在某顶点所代表的事件发生后,从该顶点出发的各活动才开始。例如:只有顶点V1所代表的事件结束之后,活动a2和a4才会开始。

4.关键路径部分解析

  • 在AOE网中,所有活动都完成才能到达终点,因此完成整个工程所必须花费的时间(即最短工期)应该为源点到终点的最大路径长度。具有最大路径长度的路径称为关键路径。

  • 关键路径上的活动称为关键活动。
    在这里插入图片描述

  • 事件的最早发生时间:ve[k]。根据AOE网的性质,只有进入Vk的所有活动<Vj, Vk>都结束,Vk代表的事件才能发生,而活动<Vj, Vk>的最早结束时间为ve[j]+len<Vj, Vk>。所以,计算Vk的最早发生时间的方法为:ve[0] = 0,ve[k] = max(ve[j] + len<Vj, Vk>)

  • 事件的最迟发生时间:vl[k]。vl[k]是指在不推迟整个工期的前提下,事件Vk允许的最迟发生时间。根据AOE网的性质,只有顶点Vk代表的事件发生,从Vk出发的活动<Vk, Vj>才能开始,而活动<Vk, Vj>的最晚开始时间为vl[j] - len<Vk, Vj>。

  • 活动的最早发生时间:ee[i]。ai由有向边<Vk, Vj>,根据AOE网的性质,只有顶点Vk代表的事件发生,活动ai才能开始,即活动ai的最早开始时间等于事件Vk的最早开始时间。

在这里插入图片描述

  • 活动的最迟发生时间:el[i]。el[i]是指在不推迟真个工期的前提下,活动ai必须开始的最晚时间。若活动ai由有向边<Vk, Vj>表示,则ai的最晚开始时间要保证事件vj的最迟发生时间不拖后。

在这里插入图片描述

  • 案例:

    AOE网

    事件的最早发生时间:ve[k]

    从源点向终点方向计算

    ve[0] = 0

    ve[1] = ve[0] + a0 = 0 + 4 = 4

    ve[2] = max( ve[0] + a1, ve[1] + a2 ) = max(0 + 3, 4 + 2 = 6

    ve[3] = max(ve[1] + a4, ve[2] + a3) = max(4 + 6, 3 + 4) = 10

    事件的最迟发生时间:vl[k]

    从终点向源点方向计算

    vl[3] = ve[3] = 10

    vl[2] = vl[3] - a3 = 10 - 4 = 6

    vl[1] = min(vl[3] - a4, vl[2] - a2) = min(10-6, 6-2) = 4

    vl[0] = min(vl[2] - a1, vl[1] - a0) = min(4-4, 4-2) = 0

    活动的最早发生时间:ee[i]

    共有五个活动:

    ee[0] = ve[0] = 0

    ee[1] = ve[0] = 0

    ee[2] = ve[1] = 4

    ee[3] = ve[2] = 6

    ee[4] = ve[1] = 4

    活动的最迟发生时间:el[i]

    el[0] = v[1] - a0 = 4 - 4 = 0

    el[1] = vl[2] - a1 = 6 - 3 = 3

    el[2] = vl[2] - a2 = 6 - 2 = 4

    el[3] = vl[3] - a3 = 10 - 4 = 6

    el[4] = vl[3] - a4 = 10 - 6 = 4

    活动的最早开始时间和最晚开始时间相等,则说明该活动时属于关键路径上的活动,即关键活动。

    经过比较,得出关键活动有:a0, a2, a3, a4,画出示意图如下:

    关键路径图

    该AOE网有两条关键路径。

    所以,通过此案例也可以发现,一个AOE网的关键路径可能有多条。
    再举个例子
    在这里插入图片描述
    在这里插入图片描述
    etv可以推出ete ltv可以简单换算出lte:这个点的事件最晚发生时间-弧活动的最晚发生时间
    关键路径就是ete == lte

5.代码

在之前拓扑序列算法上进行修改

int *etv, *ltv;
int *stack2; //用于存储拓扑序列的栈
int top2; //用于stack2的栈顶指针

//改进后的求拓扑序列的算法
Status TopologicalSort(GraphAdjList GL)
{
    EdgeNode *e;
    int i, k, gettop;
    int top = 0;
    int count = 0;
    int *stack;
    stack = (int *)malloc(sizeof(int) * Gl -> numVertexes);
    for(i = 0; i < GL -> numVertexes; i++)
    {
        if(0 == Gl -> adjList[i].in)
        {
            stack[++top] = i;
        }
    }
    top2 = 0;
    etv = (int *)malloc(GL -> numVertexes *sizeof(int));
    for(i = 0; i < GL-> numVertexes; i++)
    {
        etv[i] = 0;
    }
    stack2 = (int *)malloc(GL -> numVertexes * sizeof(int));
    while(top != 0)
    {
        gettop = stack[top--];
        count++;
        stack2[++top2] = gettop; //将弹出的顶点序号压入拓扑序列的栈
        for(e = GL -> adjList[gettop].firstedge; e; e = e -> next)
        {
            k = e -> adjvex;
            if(!(--GL -> adjList[k].in))
            {
                stack[++top] = k;
            }
            if((etv[gettop] + e -> weight) > etv[k]) //求各顶点事件最早发生时间值
            {
                etv[k] = etv[gettop] + e -> weight;
            }
        }
    }
    if(count < GL -> numVertexes)
    {
        return ERROR;
    }
    else
    {
        return OK;
    }
}

//求关键路径,GL为有向网,输出GL的各项关键活动
void CriticalPath(GraphAdjList GL)
{
    EdgeNode *e;
    int i, gettop, k, j;
    int ete, lte;
    TopologicalSort(GL); //求拓扑序列 计算数组etv和stack2的值
    //初始化ltv都为汇点的时间
    ltv = (int *)malloc(GL -> numVertexes * sizeof(int));
    for(i = 0; i < GL -> numVertexes; i++)
    {
        ltv[i] = etv[GL -> numVertexes - 1];
    }
    //从汇点倒过来逐个计算ltv
    while(top2 != 0)
    {
        gettop = stack2[top2--]; //将拓扑序列出栈,后进先出(倒着推回去)第一个出栈的时汇点
        for(e = GL -> adjList[gettop].firstedge; e; e = e -> next)
        {
            k = e -> adjvex;
            if(ltv[k] - e -> weight < ltv[gettop])
            {
                ltv[gettop] = ltv[k] - e -> weight;
            }
        }
    }
    //通过etv和ltv求ete和lte
    for(j = 0; j < GL -> numVertexes; j++)
    {
        for(e = GL -> adjList[j].firstedge; e; e = e -> next)
        {
            k = e -> adjvex;
            ete = etv[j];
            lte = ltv[k] - e -> weight;
            if(ete == lte) //两者相等即在关键路径上
            {
                printf("<v%d, v%d> length: %d", GL -> adjList[j].data, GL -> adjList[k].data, e -> weight);
            }
        }
    }
}
【数据结构】AOE网——关键路径 相关概念 AOE网 AOE网(Activity On Edge Network)用边表示活动,用顶点表示事件(活动的完成)。边是带权的,表示活动需要的时间。 源点与汇点 源点:入度为0的点,表示一个工程的开始。 汇点:出度为0的点,表示一个工程的结束。 关键活动与关键路径 在AOE网中,从源点到汇点最长的路径称为关键路径,在关键路径上的活动称为关键活动。 因为AOE网中的活动是可以并行进行的,所以整个工程的时间开销,其实是最长路径的时间开销。即关键路径制约整个工程的工期。   >_< 阅读详情

相关推荐

选择题快速求解AOE网的关键路径

#引言 求解AOE网关键路径时,书上的方法为先从源点到汇点求解事件最早发生时间ve,再从汇点到源点求解事件最迟发生时间vl,再利用ve和vl求解每个活动的最早开始时间e(i)和最迟开始时间l(i),e(i)和l(i)相等的活动则为关键活动,他们一起组成的从源点到汇点的路径即为关键路径。 王道的书上在举例子的时候,备注了一小行话:“如果这是一道选择题,根据上述求ve()的过程就已经能知道关键路径。”,但并没有展开讲如何确定。本文就补充说明一下。 #求法 这里直接举例给出求法 如下AOE图,我们从V1

u014302425的博客 8638

数据结构(51)关键路径

在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动所需的时间),称之为用边表示活动的网络,简称AOE网。AOE网和AOV网都是有向无环图,不同之处在于它们的边和顶点所代表的含义是不同的,AOE网中的边有权值;而AOV网中的边无权值,仅表示顶点之间的前后关系。 AOE网具有以下两个性质: ①只有某顶点所代表的事情发生后,从该顶点出发的各有向边所代表的活动才能开始 ②只有在进入某顶点的各有向边所代表的活动都已结束时,该顶点所代表的事情才能发生。 在AOE网中仅

李白 5142

AOE关键路径步骤+例题

事件Vk(结点),活动ai(边)

Dys_debug的博客 7503

数据结构算法之关键路径

关键路径 文章目录: 基本概念 关键路径的构造过程 关键路径的特点 1.基本概念 首先要了解AOE网和关键路径的基本概念 这里详细说明一下,AOE网和AOV网的区别和联系: 联系:都代表的是有向无环图。 区别: 1.AOE网的边表示活动,边有权值,边一般代表的是活动持续时间,顶点表示事件,事件是图中新活动开始或者旧活动结束的标志。 2.AOV网的顶点表示活动,边无权值,边代表活动之间的先后关系。 3.对于一个表示工程的AOE网,只存在一个入度为0的顶点,称为源点,表示整个工程的开始;也只存在一个出度为

qq_43607916的博客 6763

数据结构之——关键路径

1.AOE网 边活动(Activity On Edge, AOE)网是指用带权的边集表示活动,用顶点表示事件的有向图,而用边权表示活动完成需要的时间。 如下图所示,边a1 -a6表示需要学习的课程,也就是“活动”,边权表示课程学习需要的时间;顶点V1-V6表示到此刻为止前面的课程已经学完,后面的课程可以开始学习,也就是“事件”,显然“事件”仅代表一个中介状态。 AOE网具有以下两种性质:(1)只有在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始,;(2)只有在进入某一顶点的各有向边所代

xiaoyong5854的博客 8877

AOE网关键路径求解例题

AOE网关键路径求解例题 三道 首先明确顶点是事件,边是活动。 1 2 3 解题技巧: 先求Ve 从前往后推,取活动之和最大的 作为顶点(事件)最早发生时间; 求Vl 通过Ve知道最后汇点的最晚发生时间(和汇点的最早发生时间相等),从后往前推,用顶点和活动做差取结果最小 作为顶点最晚发生时间。这里典型的例子就是V4,应该用V6的最晚发生时间减去a9和a6而不是直接减去a7,因为V6-a7 = 10 > 7 ,而我们要的是所有可能中最小的值,和求Ve时候相反。 接着求e活动的最早发生时

Blog 1万+

关键路径中最早/迟发生时间

概念:在AOE网中,顶点表示事件,弧表示活动,权表示活动持续的时间。一般求的是关键路径,而要求关键路径则要找到以下四个值 1.事件Vi的最早发生时间ve(i) 2.事件Vi的最迟发生时间vl(i) 3.活动ai的最早发生时间e(i) 4.活动ai的最迟发生时间l(i) 例子: 求V4和a4的以上四个值(下面有全部活动和事件的参考) 1.事件Vi的最早发生时间ve(i):要找事件(即图中顶点)的最早发生时间只需找到开始事件V0到该事件的最长路径即可,可以看到这里V0到V4有两条路,V0->V1-&g

wikl的博客 2万+

【数据结构】什么的图的关键路径?关键路径相关概念?关键路径算法实现?

AOE网中的关键路径,就是完成整个网络所需的最短时间,亦最长路径,AOE网中,往往有若干项活动可以平行的进行,因此,从开始顶点到最后一个顶点的最长路径称为关键路径。

四季轮换叶,一路招摇胜 6622

关键路径计算

转自http://blog.youkuaiyun.com/wang379275614/article/details/13990163 认识AOE网   有向图中,用顶点表示活动,用有向边表示活动之间开始的先后顺序,则称这种有向图为AOV网络;AOV网络可以反应任务完成的先后顺序(拓扑排序)。   在AOV网的边上加上权值表示完成该活动所需的时间,则称这样的AOV网为AOE网,如

lwtb的博客 2万+

自托管AI邮件助手imap-mcp:安全连接Claude与个人邮箱的完整指南

在AI助手日益普及的今天,如何安全地让AI访问个人邮箱数据成为关键挑战。传统方法如直接暴露IMAP/SMTP凭证存在严重安全隐患,而第三方SaaS服务则涉及隐私泄露风险。Model Context Protocol (MCP) 作为一种新兴的标准化协议,为AI工具安全接入提供了解决方案。其核心价值在于实现数据源与AI助手间的安全、标准化交互,特别适用于处理敏感信息的场景。imap-mcp正是基于MCP协议构建的自托管邮件网关,它通过多层安全机制(包括主密钥加密和OAuth令牌哈希化)保护用户凭证,让用户能在

weixin_28295799的博客 656

LSTM模型股价波动率预测(含Python代码)

源代码文件可在gzh’finance褪黑素'回复【24012203】获取。

celiaweiwei的博客 3776

图——关键路径

AOE网示例图: AOE网:在一个表示工程的带权有向图中,用顶点表示事件(如V0),用有向边表示活动(如<v0,v1> = a1),边上的权值表示活动的持续时间,称这样的有向图为边表示的活动的网,简称AOE网(activity on edge network) 源点: 在AOE网中,没有入边的顶点称为源点;如顶点V0 终点: 在AOE网中,没有出边的顶点称为终点;如...

fu_jian_ping的博客 7万+

XGBoost调参新姿势:Bayesian优化实战指南(附完整代码)

本文详细介绍了如何使用Bayesian优化方法高效调优XGBoost模型参数。通过解析Bayesian优化核心原理和XGBoost关键参数,提供完整的实战代码示例,帮助读者掌握这一智能调参技术,显著提升模型性能。文章特别适合机器学习工程师和数据科学家阅读。

weixin_42536058的博客 366

10分钟了解关键路径及如何求得关键路径

文章目录一,什么是关键路径二,求解关键路径需要的4个描述量三,如何求得关键路径 视频参考:6.6.4关键路径2–求解关键路径 一,什么是关键路径 【引例 1】某项目的任务是对A公司的办公室重新进行装修 如果10月1日前完成装修工程,项目最迟应该合适开始? (需要完成的活动、每个活动所需时间、及先期需完成工作如下图所示) 【引例 2】准备一个小型家庭宴会,晚6点宴会开始,最迟几点开始准备?压缩哪项活动时间可以使总时间减少? 我们把工程计划表示为边表示活动的网络,即 AOE网,用顶点表示事件,弧表示活动,弧

壮壮不太胖的学习笔记 7万+

Sigrity OptimizePI IC Device Power Pin Inductance Analysis模式如何计算IC电源管脚电感操作指导

Sigrity OptimizePI IC Device Power Pin Inductance Analysis模式可以计算电容到IC电源管脚的电感,用于评估电容位置对于IC电源管脚的效果,如何分析,以下图为例进行说明。Capacitors:选择层面,这里选择top layer(IC在top层),下方可以选择电容的size,这里选择All Size。IC devices,输入U*, A*, B*, Q*, P*,将所有这些字母开头的器件都识别为IC。模式如何计算IC电源管脚电感操作指导。

weixin_54787054的博客 410

【SpringBoot 4.x 第2节】夯爆了,学习 Spring Boot 4.x 前,需要具备哪些 Java 基础?

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 4570

图解:什么是关键路径?

小禹禹,五一假期马上结束了,你们过得怎么样呢?有没有玩得很开心,收获满满呢?好想听你们在评论区说一说。哈哈,不过我们还是先来说一说今日景禹要给你们分享的内容,关键路径。何为关键路径?如果...

Z景明的博客 4万+

Golang内存管理:GC调优实战案例

在Golang编程中,内存管理是一个非常重要的方面。良好的内存管理可以提高程序的性能和稳定性,而GC(垃圾回收)调优则是优化内存管理的关键手段。本文的目的就是通过实际案例,深入讲解Golang中GC调优的方法和技巧,让读者能够在实际项目中更好地进行内存管理和性能优化。范围涵盖了从核心概念的解释到具体代码实现和调优过程的详细分析。本文首先会介绍一些相关的术语和核心概念,让读者对Golang内存管理和GC有一个基本的认识。然后通过故事引入的方式,更加形象地解释核心概念及其相互关系。

AI Agent Harness Engineering 1118

简单理解关键路径

一,关键路径问题的相关概念 通常,一个项目可以被拆分成多个子项目,多个子项目间会具有并行和串行的特点。 例如造汽车时,造发动机和造车轮是两个可以并行完成的任务,而组装整车又必须等发动机和车轮等部件完成后才能开始,具有串行的特点。 关键路径是指能影响项目整体时间的活动和事件的集合,是项目中最长的路径。 关键路径问题也即指从多个子项目中流程中找到影响项目整体运营时间的关键路径。 对以上问题进行建...

ZhangP.H的博客 1万+

勇闯dify v1.0.0之设置模型供应商。解决:Reached maximum retries (3) for URL https://marketplace.dify.ai/

朋友们,大家好,今天带大家来勇闯dify v1.0.0。为什么叫勇闯呢?我就这么说吧,本来我昨天就想带大家勇闯v1.0.0的。但是dify的marketplace访问不了。公司的网和手机热点都试了,就是访问不了。我们连个模型都没有,还勇闯个球啊,对吧,就搁置了。今天,我赶紧看看这个marketplace好了没。一看,可以了。赶紧写下这篇博客,帮助同志们走出困境。

xiezhipu的博客 4617

Lumerical 教程,包含作者个人理解及相关设计案例 (目前共计184篇,持续更新中)

4138。

u011699626的博客 1630

【算法专题】关键路径及代码实现

关键路径 一. 问题描述 概念 一项工程计划可以被看成一个有向图,图中的顶点表示事件,边代表活动,边上的权值代表完成这项活动需要的时间,这样的有向图称为AOE网。 表示实际工程计划的AOE网应该是无环的,在正常情况下存在唯一的开始顶点(源点)和唯一的完成顶点(汇点)。 AOE网中的某些活动可以并行进行,完成工程的最短时间是从开始顶点到完成顶点的最长路径长度。路径长度最长的路径为关键路径。关键路径上所有活动都叫做关键活动。我们只有减少关键路径上活动用时才能加快工程的进度。 我们的问题就是输

weixin_42638946的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数据结构——关键路径

在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动需要的时间),称之为用边表示活动的网络,简称AOE网。(6)若一个活动的时间余量为0,则说明该活动必须要如期完成,d(i)=0即l(i)=e(i)的活动ai是关键活动,由关键活动组成的路径就是关键路径。(5)活动ai的时间余量:d(i)=l(i)-e(i),表示在不增加完成整个工程所需总时间的情况下,活动ai可以拖延的时间;(2)活动ai的最早开始时间e(i):指该活动弧的起点所表示的事件的最早发生时间;

weixin_64084604的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

关键路径AOE网及其如何求关键路径步骤(C语言)

一、关键路径 (一)AOE网 在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动所需的时间),称之为⽤边表示活动的网络,简称AOE网 (Activity On Edge NetWork) 在这里插入图片描述 AOE⽹具有以下两个性质: ① 只有在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始; ② 只有在进入某顶点的各有向边所代表的活动都已结束时,该顶点所代表的事件才能发⽣。 另外,有些活动是可以并行进行的

派拉斯兔子的博客 9145

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

关键路径算法

1、拓扑排序的意义? 举个例子先:一个软件专业的学生学习一系列的课程,其中一些课程必须再学完它的基础的先修课程才能开始。如:在《程序设计基础》和《离散数学》学完之前就不能开始学习《数据结构》。这些先决条件定义了课程之间的领先(优先)关系。这个关系可以用有向图更清楚地表示。图中顶点表示课程,有向边表示先决条件。若课程i是课程j的先决条件,则图中有弧。若要对这个图中的顶点所表示的课程进行拓扑排序的话

destiny的专栏 3万+

Day_39关键路径

关键路径

DARRENANJIAN的博客 4557
上一篇: 拓扑排序
下一篇: Java学习提要以及HelloWorld程序总结
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值