精华内容
下载资源
问答
  • 每千次展示费用 关键路径法(或关键路径分析),使用它来进行关键路径分析。 在其他开放源代码项目(例如JUNG,Joda-Time和DateCalc)的帮助下用Java编写。
  • 企业持续盈利关键路径分析.ppt
  • 软考项目管理工程师网络图、关键路径分析方法
  • 一种基于关键路径分析的CPU-GPU异构系统综合能耗优化方法.pdf
  • HMCPA:利用关键路径分析进行超标量微处理器设计空间探索的启发式方法
  • 图算法 无圈图和关键路径分析

    千次阅读 2013-10-07 21:56:22
    无圈图 如果已知图是无圈的,则可以利用拓扑顺序选择顶点来改进Dijkstra算法。由于选择和更新可以在拓扑排序执行的时候进行,因此算法能够一趟完成。...关键路径分析 如图,每个节点表示一个必须执行的动作以

    无圈图

    如果已知图是无圈的,则可以利用拓扑顺序选择顶点来改进Dijkstra算法。由于选择和更新可以在拓扑排序执行的时候进行,因此算法能够一趟完成。

    因为当一个顶点v被选取之后,按照拓扑排序法则它没有从unknown顶点发出的进入边,因此它的距离dv可不再被更新。这样的话,就不需要优先队列了。运行时间为O(|E| + |V|)。

    关键路径分析


    如图,每个节点表示一个必须执行的动作以及完成动作所花费的时间。该图叫做动作节点图。图中的边代表优先关系,一条边(v,w)意味着动作v必须在动作w开始前完成。(这意味着这个图必然是无圈的)。

    这个图可以模拟两类问题:

    1. 整个方案最早什么时间完成

    2. 确定哪些动作时可以延迟的,延迟多长,而不致影响最少完成时间

    我们把动作节点图转化为事件节点图

    1. 每个事件对应一个动作和所有相关的动作的完成;

    2. 从事件节点图中的节点v可达到的事件可以在事件v完成后开始;

    3. 在一个动作依赖于几个其他动作的情况下,可能需要插入哑边和哑节点(保证每个真实点只有一条入边)。


    为了找出方案的最早完成时间,我们只要找出从第一个事件到最后一个事件的最长路径长度

    由于这是个无圈图,可以采纳最短路径算法计算图中所有节点的最早完成时间。

    如果ECi是节点i的最早完成时间,则有

    1. EC1 = 0;

    2. ECw = max(ECv + c(v,w))


    用以下法则计算每个节点最晚完成时间

    1. LCn = ECn;//最后一个点的最晚完成时间和最早完成时间相同

    2.LCv = min(LCw - c(v,w))


    对于每个顶点,通过保存一个所有邻接且在先的顶点的表,这些值就可以以线性时间算出。借助顶点的拓扑顺序计算它们的最早完成时间,而最晚完成时间则通过倒转它们的拓扑顺序来计算。

    每条边的松弛时间代表对应动作可以被延迟而又不至于推迟整体的完成的时间量。

    Slack(v,w)= LCw - ECv - c(v,w)


    展开全文
  • 如果您正在寻找一种轻量级的工具来分析您的分布式内存MPI程序的关键路径成本,那么您来对地方了。 critter旨在了解您的MPI程序的关键路径,并分解由以下指标定义的关键路径: 执行时间处理时间 计算时间 交流时间 ...
  • 制定项目进度计划的工具和方法有:干特图,关键路径分析和PERT估计。 3.10.1 干特图 这是一种用日历形式来列出项目活动及其活动起止时间的项目图示方法。由于这种图形表示方法最初是由泰勒的同事亨利.干特所发明,...

    活动定义、活动排序以及资源和历时估算的结果就构成了制定项目进度计划的基础。项目的进度计划既是回答每个活动的进度安排,而更重要的是得到有关项目整体的进度信息。制定项目进度计划的工具和方法有:干特图,关键路径分析和PERT估计。

     

    这是一种用日历形式来列出项目活动及其活动起止时间的项目图示方法。由于这种图形表示方法最初是由泰勒的同事亨利.干特所发明,所以又被称作干特图。现在大多数项目管理软件都可以自动生成干特图。

    在项目的干特图中,有几个特殊的符号需要关注:

    任务(Task),用带状的水平横道来代表一个任务,所以有的时候干特图又叫横道图。横道的起点和终点就代表了任务的起止时间,横道的长度就代表了任务的持续时间。

    里程碑(Milestone),具有零历时的重要事件。在图中用菱形符号代表。

    依赖关系(Dependency),指各个任务之间存在着一定的依赖关系,例如:结束-开始,开始-开始,结束-结束,开始-结束关系。

    概要任务(Summary Task),是指的一些任务集合成一个更大的任务,通常代表了任务的不同层级。

     

    由于干特图在表示项目进度信息方面简单明了,所以是现在应用最广泛的项目进度表示方法。

     

    关键路径分析也称为关键路径法(Critical Path Method),是一种用来预测总体项目历时的项目网络分析技术。所谓“关键路径”,是指当我们完成了项目进度计划后,在项目的网络图上,存在着若干条从项目启动到项目结束之间的路径,但是对其中一条(严格的来说,可能存在一条以上)路径上来说:

            其上所有活动的时间之和就是完成项目的最短历时;

            路径上任何活动的延误都会导致项目时间的延长;

            如果我们想缩短项目历时,就必须缩短这条路径上活动的历时;

    这条路径就是项目的关键路径。如下图:

    制定进度计划 <wbr>关键路径分析

    图 - 2.        关键路径

    怎样确定关键路径呢?它实际是项目网络图中(历时)最长的路径。下面我们来下一个定义,一个项目的关键路径:是指一系列决定项目最早完成时间的活动。在关键路径上的活动都很“关键”,因为它们直接决定了项目的进度。每个活动都只有最少的浮动时间或时差。所谓浮动时间或时差是指一项活动在不耽误后续活动或项目完成日期的条件下可以拖延的时间长度。

    现在所有的项目管理软件工具都将寻找一个项目的关键路径作为最基本的功能。它是运用某种运算法则来计算而得出项目关键路径信息的。该运算法则被称为正推法和倒推法,这个法则输出的结果就是项目的关键路径,当然也包括项目的总历时和项目中每个活动关于进度的“关键”信息。虽然今天已经很少需要手工计算来得到项目的关键路径了,但是仔细了解一下它的算法将会非常有助于更深刻地理解所得到各项信息的意义。下面我们就来看一下如何用正推法和倒推法来计算项目的关键路径。

    正推法和倒推法主要是用来计算有关一个项目活动的:

            最早开始时间(Early Start,简称ES),在条件具备的情况下,该活动可以开始进行的最早可能;

            最早结束时间(Early Finish,简称EF), 在条件具备的情况下,该活动可以完成的最早可能;

            最晚开始时间(Late Start,简称LS),在不拖延项目进度的情况下,该活动可以开始进行的最晚可能;

            最早结束时间(Late Finish,简称LF), 在不拖延项目进度的情况下,该活动可以完成的最晚可能;

    如下图所示,对每一个项目活动的这4个参数都是一个时间点。

    制定进度计划 <wbr>关键路径分析

    图 - 3.        正推法和倒推法的活动参数

    所谓正推法就是从项目的第一个活动到最后一个活动跟踪全部活动的先后关系,计算出每个活动的最早开始时间(ES)和最早结束时间(EF)。

    所谓倒推法则是从最后一个活动开始向前追溯到第一个活动,计算出每个活动的最晚开始时间(LS)和最晚结束时间(LF)。

     

    正推法的计算过程包括四步:

    步骤一:设定项目的第一个活动的最早开始时间是从第一天开始,如图:

    制定进度计划 <wbr>关键路径分析

    图 - 4.        关键路径正推法的步骤一

    步骤二:计算第一个活动的最早结束时间,可以用第一个活动的最早开始时间加该活动的历时减1得出:EF = ES + 历时-1,如图:

    制定进度计划 <wbr>关键路径分析

    图 - 5.        关键路径正推法的步骤二

    步骤三:计算该活动的所有后续活动的最早开始时间(ES):

    后续活动的ES=前导活动的EF+1

    制定进度计划 <wbr>关键路径分析

    图 - 6.        关键路径正推法的步骤三

    步骤四:过重复步骤二、三,为项目中的每个活动计算最早开始时间(ES)和结束时间(EF),如图所示:

    EF = ES + 历时 – 1

    ES = 前导活动EF + 1

    制定进度计划 <wbr>关键路径分析

    图 - 7.        关键路径正推法的步骤四

    但是这里有一种情况需要特别考虑,因为正推法是依赖每个活动的前导活动来决定的,所以如果一个活动存在多个前导活动的话,需要采用前导活动中EF最晚的那个活动来计算该活动的ES。

     

    倒推法的计算过程也包括四个步骤,只不过这次你是从项目的结束时间开始。但这里要用到正推法的结果:

    步骤一:因为你不能延误项目的完成时间,因此最后一个活动的最早结束时间EF等同于最晚结束时间LF。

    制定进度计划 <wbr>关键路径分析

    图 - 8.        关键路径倒推法的步骤一

    步骤二:计算最后一个活动的最晚开始时间,可以通过用最晚结束时间减去该活动的历时然后加1来得出。

    LS = LF – 历时+1

    制定进度计划 <wbr>关键路径分析

    图 - 9.        关键路径倒推法的步骤二

     

    步骤三:每个活动必须在后续活动开始之前完成,因此可以为每个活动计算最晚结束时间。

    LF = 后续活动 LS – 1

    制定进度计划 <wbr>关键路径分析

    图 - 10.    关键路径倒推法的步骤三

    步骤四:然后重复第二、三步骤,计算出每个活动的最晚开始时间和最晚结束时间

    制定进度计划 <wbr>关键路径分析

    图 - 11.    关键路径正推法的步骤四

    同样在计算过程中也需要处理一个特殊情况,由于倒推法是依赖每个活动的后续活动来考虑的,所以如果一个活动出现多个后续活动的时候,应该取后续活动中LS最早的那个来计算该活动的LF。

     

    事实上在完成倒推法的计算之后,我们得到了每个活动有关进度的关键信息:

            最后一个活动的EF(LF)就是项目可能的最早完成时间,也就是项目的最终进度;

            活动的LS确定了我们需要给该活动提供资源的最晚时间,如果超过了这个时间则意味着可能的项目最早交付时间会被延迟;

            项目中历时最长的路径就是项目的关键路径;

            如果关键路径上的活动历时没有被延误,那么项目进度就不会有延误;

            如果我们要缩短项目的历时,就要缩短该路径上活动的历时;

            我们可以通过公式来计算每个活动的总浮动时间(Total Float)TF = LF-EF,又被称为总时差。它代表了在不影响项目总体进度的前提下,活动可以延误的时间段;

            我们还可以通过公式计算每个活动的自由浮动时间(Free Float)FF(活动X)=后续活动的ES - EF(活动X)- 1。它代表了该活动不影响后续活动而可以被延误的时间。上面所说的总时差是自由浮动时间的一种。总时差是每个活动历时可以延误的范围,并且可以不影响总体项目的进度,而自由浮动时间是指在不延误任何活动最早开始的情况下,项目活动可以延误的时间范围。

     

    下面我们来看一个例子的推演,帮助大家更好的理解。如下图是一个小项目的网络图,已经完成每个活动的历史估算,我们需要确定利用正推法和倒推法求出个活动的ES-EF-LS-LF,以及项目的关键路径:

    制定进度计划 <wbr>关键路径分析

    图 - 12.    例题-推算关键路径

    正推法求ES-EF:

    步骤一:活动A的ES=1,EF=ES+20-1=20,如下图:

    制定进度计划 <wbr>关键路径分析

    图 - 13.    例题-推算关键路径正推法步骤一

    步骤二:求出以活动A为前导活动的那些活动的ES以及EF。

    ES = 前导活动的EF+1  EF = ES + 历时 - 1

    如下图:

    制定进度计划 <wbr>关键路径分析

    图 - 14.    例题-推算关键路径正推法步骤二

    步骤三:重复步骤二,计算出所有活动的ES-EF。但对于出现了两个前导活动的活动E来说,由于B的EF晚于D的EF,所以其计算取B的EF。如下图:

    制定进度计划 <wbr>关键路径分析

    图 - 15.    例题-推算关键路径正推法步骤三

    然后我们用倒推法来计算LS-LF。

    步骤一:设最后一个活动E的LF=EF。LS = LF – 历时 + 1。如下图:

    制定进度计划 <wbr>关键路径分析

    图 - 16.    例题-推算关键路径倒推法步骤一

    步骤二:计算那些以活动E为后续活动的活动的LF-LS。

    LF = 后续活动的LS – 1    Ls = LF – 历时 + 1

    如下图:

    制定进度计划 <wbr>关键路径分析

    图 - 17.    例题-推算关键路径倒推法步骤二

    步骤三:重复步骤二计算所有活动的LS-LF。其中活动A有两个后续活动B和C,

     

    TF=10

    制定进度计划 <wbr>关键路径分析

    图 - 18.    例题-推算关键路径倒推法步骤三

    现在我们就得到了这个项目的关键路径:A- B-E。对于每一个活动的进度要求信息也很清楚,我们可以看到每个活动的浮动时间。在关键路径上活动的浮动时间都为0,意味着这些活动不能有半点拖延。而活动C和D的浮动时间为10,所以只要延误在10以内就不影响项目的总进度。因此我们可以灵活安排活动C和活动D的资源,可以在这些活动即将开始的时候再安排资源。这些活动也可以在最早开始时间时开始,也可以延后10天才开始,但都不会影响项目的结束。在资源平衡过程中,我们也经常会用到总时差。

    实际上,活动C和活动D有10天的浮动时间,并不是意味着每个活动都有10天的浮动时间,而是两个活动共有10天的浮动时间。我们习惯上将活动C的浮动时间扣除掉,即只有活动D有浮动时间。路径CD的浮动时间仅为10天。

     

    但是活动C的总时差和活动D的总时差是有差别的。换句话说,就是活动C允许偏离进度的时间和活动D允许偏离进度的时间是有差别的。

    如果活动D在第31天开始,这是活动D的最早开始时间,由于活动D有10天的延误时间,那么该活动在第60天结束,那么会不会影响项目的结束呢?回答是:不会。

    现在,我们假设活动C 可以准时在第21天开始,并且最晚要在第40天时完成。如果这样的话就不会影响项目的进度。但由于活动C的进度发生偏离,那么会影响项目D不能在最早时间开始和最早时间结束。如果在工作计划中,被安排到活动D的资源的使用时间段为:第31天到第40天。在第40天的时候,这些资源将被撤走,安排到其它的项目中。因为活动C的进度延误将会导致活动D的资源出现短缺,因而活动D也会出现延误,并最终导致项目的延误。因此活动C间接地导致了项目的延误。

    在这里我就可以看到总时差和自由浮动时间的区别,例如:

    FF(活动C)=31(后续活动最早ES)-30(EF(活动C))- 1 = 0

    FF(活动D)=61(后续活动最早ES)-50(EF(活动C))- 1 = 10

    因此活动D有10天的自由浮动时间,而活动C没有。

     

    问题总结:

    1. 关键路径是什么


    2. 总时差与自由时差的区别
    总时差是指在不延误项目完成日期或违反进度因素的前提下,某活动可以推迟的时间。总时差= LS-ES=LF-EF
    自由时差是指在不影响紧后活动最早开始的情况下,当前活动可以推迟的时间。自由时差=( 后一活动)ES-( 前一活动的)EF-1
    所以总时差影响总工期,自由时差影响紧后活动。
     
     
    3. 如何计算ES,EF,LS,LF
    前推法来计算最早时间

    某一活动的最早开始时间(ES)=指向它的所有紧前活动的最早结束时间的最大值。
    某一活动的最早结束时间(EF)=ES+T(作业时间)

    逆推法来计算最迟时间
    某一活动的最迟结束时间(LF)=指向它的所有紧后活动的最迟开始时间的最小值。
    某一活动的最迟开始时间(LS)=LF-T(作业时间)

     

    4.计算关键路径的步骤
    1. 用有方向的线段标出各结点的紧前活动和紧后活动的关系,使之成为一个有方向的网络图(PDM)
    2. 用正推和逆推法计算出各个活动的ES,LS, EF, LF,并计算出各个活动的自由时差。找出所有总时差为零或为负的活动,就是关键活动
    3. 关键路径上的活动持续时间决定了项目的工期,总和就是项目工期。

     

    5. 进度压缩的方法
    增加人手,聘请更有经验的人员,或找兼职人员
    加班
    并行
    重新估算后面的工期
    加强沟通,减少变更
    加强控制,避免返工
    外包
    加强沟通,先完成关键需求
    增加资源有时可能压缩工期有限
    降低要求或减少项目的范围。

     

    原文链接:http://blog.sina.com.cn/s/blog_508ae0b20100tz0f.html

    展开全文
  • MPP格式,有关宏业信息化项目管理方面的内容,监控变更一些关键路径分析
  • 拓扑排序和关键路径分析

    千次阅读 2018-03-13 23:19:49
    在这里贴一道关键路径分析的经典题:hdu 4109(鶸用来一种很傻缺的思路写这个题,实在是太丑了233) #include #include #include #include using namespace std; queue<int> cost[1005];//存时间消耗 queue...

    肛了小一天的《离散数学》和《算法导论》,希望能深入浅出的说明这个本来就很简单的问题

    拓扑排序是一个比较神奇的东西。

    下面给出它的定义:

    在集合论中它的定义是:构造一个包含某个给定偏序的全序的过程称为拓扑排序。(见《离散数学》P41)

    在图论中的定义是:对于一个有向无环图G = (V,E),对于某条边(u,v)属于G ,则结点u在拓扑排序中处于结点v的前面。(见《算法导论》P355)

    是不是有一点晦涩难懂呢?哈哈,找张图来说明吧

    (谁画的图,好丑啊)

    在这张图中,我们可以知道1->2,1->3,2->4,3->4;

    但是,2和3之间的关系怎么确定呢?

    简单啊,自己加一条边呗(嘿嘿嘿)

    2->3,3->2都可以,喜欢那个用哪个

    以 2->3为例 加上一条边之后,就成了这个样子:


    之后 这个图就可以写成 1->2->3->4 了;

    当然 因为加边的过程是任意的,你也可以写成 1->3->2->4;

    这就是拓扑排序

    是不是很简单呢?

    个人理解:拓扑排序的意义就在于在一个有向图中,找出一个顺序,可以在有向图中,依次遍历各个点。

    那我们应该怎么实现拓扑排序呢?

    也很简单,首先,我们需要找到这个图中的“头”,也就是在图中,只向外指的点。例如图中的“1”,他就是这个图中的“头”;我们把1记录下来,然后砍掉他


    现在出现了两个“头”,怎么办呢?随便砍一个吧!


    砍了2之后,接下来的操作,想必你已经会了吧!接着砍砍砍……

    直到没有头可砍,我们的任务就完成了。

    如果觉得已经掌握这种算法了

    那我就来介绍一个拓扑排序的应用——关键路径分析法(看离散知道的233)

    大家可以想一下起床的过程——起床,穿衣,穿裤子,穿袜子,刷牙洗脸,煮饭,吃饭,出门。

    有些事情的顺序是不能变的,比方说,我不能没穿衣服就出门;

    但有一些顺序是可变的,比如煮饭可以先于刷牙洗脸,而且他们可以同时进行,这样会大大节省时间;

    但是,不管我再怎么节省时间,时间还是在流逝。我要找我总共需要花费多少时间以及找出我为什么要花这么多时间(即找出一条关键路径来刻画我完成这些流程所需时间的过程)


    在这里贴一道关键路径分析的经典题:hdu 4109(鶸用来一种很傻缺的思路写这个题,实在是太丑了233)

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    using namespace std;
    
    queue<int> cost[1005];//存时间消耗
    queue<int> son[1005];//存儿子
    queue<int> H; //存头
    int h[1005],e[1005];
    int ans[1005];
    int main() {
        int n,m;
        while(cin >> n >> m) {
            for (int i = 0; i < n; i++) {
                cost[i] = son[i] = queue<int>();
                h[i] = e[i] = ans[i] = 0;
            }
            while(m--) {
                int x,y,z;
                 cin >> x >> y >> z;
                 h[y]++;
                 e[x] = 1;
                 son[x].push(y);
                 cost[x].push(z);
            }
            for (int i = 0; i < n; i++) {
                if(!h[i]) {
                    H.push(i);
                    ans[i] = 1;
                }
            }
            while(!H.empty()) {
                int tmp = H.front();
                while(!son[tmp].empty()) {
                    int tmp1 = son[tmp].front();
                    ans[tmp1] = max(ans[tmp1],cost[tmp].front() + ans[tmp]);
                    h[tmp1]--;
                    if(!h[tmp1])
                   		H.push(tmp1);
                    son[tmp].pop();
                    cost[tmp].pop();
                }
                H.pop();
            }
            int Max = 0;
            for (int i = 0; i < n; i++) {
                if(!e[i]) { 
                    Max = max(Max,ans[i]);
                }
            }
            cout << Max <<endl;
        }
        return 0;
    }
    /*
    10 11
    0 2 4
    1 2 3
    2 3 5
    2 4 4
    2 6 4
    3 5 3
    4 5 3
    6 7 2
    5 8 6
    7 9 11
    8 9 3
    要是wa了就试一试这一组数据吧
    */

    展开全文
  • 关键路径

    千次阅读 多人点赞 2017-02-28 10:41:47
    关键路径

    AOE网:在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,用边上的权值表示活动的持续时间,这种有向图的边表示活动的网,我们称之为AOE网(Activity On Edge Network)。

    如下图所示:



    AOV网与AOE网的比较

    下面是AOV网


    下面是AOE网



    下面介绍几个名词解释:

    etv(Earliest Time Of Vertex):事件最早发生时间,就是顶点的最早发生时间;
    ltv(Latest Time Of Vertex):事件最晚发生时间,就是每个顶点对应的事件最晚需要开始的时间,如果超出此时间将会延误整个工期。
    ete(Earliest Time Of Edge):活动的最早开工时间,就是弧的最早发生时间。
    lte(Latest Time Of Edge):活动的最晚发生时间,就是不推迟工期的最晚开工时间。

    所以可以知道:


    此图的etv和ltv和ete和lte

    如下图:



    由此,可以做出他的邻接表,如下所示:


    所以可以得出他的关键路径:


    代码如下:

    // 边表结点声明
    typedef struct EdgeNode
    {
    	int adjvex;
    	struct EdgeNode *next;
    }EdgeNode;
    
    // 顶点表结点声明
    typedef struct VertexNode
    {
    	int in;			// 顶点入度
    	int data;
    	EdgeNode *firstedge;
    }VertexNode, AdjList[MAXVEX];
    
    typedef struct
    {
    	AdjList adjList;
    	int numVertexes, numEdges;
    }graphAdjList, *GraphAdjList;
    
    int *etv, *ltv;
    int *stack2;			// 用于存储拓扑序列的栈
    int top2;				// 用于stack2的栈顶指针
    
    // 拓扑排序算法
    // 若GL无回路,则输出拓扑排序序列并返回OK,否则返回ERROR
    Status TopologicalSort(GraphAdjList GL)
    {
    	EdgeNode *e;
    	int i, k, gettop;
    	int top = 0;		// 用于栈指针下标索引
    	int count = 0;		// 用于统计输出顶点的个数
    	int *stack;			// 用于存储入度为0的顶点
    	
    	stack = (int *)malloc(GL->numVertexes * sizeof(int));
    	
    	for( i=0; i < GL->numVertexes; i++ )
    	{
    		if( 0 == GL->adjList[i].in )
    		{
    			stack[++top] = i;	// 将度为0的顶点下标入栈
    		}
    	}
    	
    	// 初始化etv都为0
    	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( 0 != top )
    	{
    		gettop = stack[top--];		// 出栈
    		// printf("%d -> ", GL->adjList[gettop].data); 
    		stack2[++top2] = gettop;	// 保存拓扑序列顺序 C1 C2 C3 C4 .... C9
    		count++;				
    		
    		for( e=GL->adjList[gettop].firstedge; e; e=e->next )
    		{
    			k = e->adjvex;
    			// 注意:下边这个if条件是分析整个程序的要点!
    			// 将k号顶点邻接点的入度-1,因为他的前驱已经消除
    			// 接着判断-1后入度是否为0,如果为0则也入栈
    			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 )	// 如果count小于顶点数,说明存在环
    	{
    		return ERROR;
    	}
    	else
    	{
    		return OK;
    	}
    }
    
    // 求关键路径,GL为有向图,输出GL的各项关键活动
    void CriticalPath(GraphAdjList GL)
    {
    	EdgeNode *e;
    	int i, gettop, k, j;
    	int ete, lte;
    	
    	// 调用改进后的拓扑排序,求出etv和stack2的值
    	TopologicalSort(GL);
    	
    	// 初始化ltv都为汇点的时间
    	ltv = (int *)malloc(GL->numVertexes*sizeof(int));
    	for( i=0; i < GL->numVertexes; i++ )
    	{
    		ltv[i] = etv[GL->numVertexes-1];
    	}
    	
    	// 从汇点倒过来逐个计算ltv
    	while( 0 != top2 )
    	{
    		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 );
    			}
    		}
    	}
    }


    展开全文
  • 案例分析如何确定项目关键路径.ppt
  • 案例分析如何确定项目关键路径 .ppt
  • 案例分析-如何确定项目关键路径.ppt
  • 关键路径转化率分析——漏斗模型

    千次阅读 2017-08-11 11:53:55
    6.关键路径转化率分析——漏斗模型 转化:在一条指定的业务流程中,各个步骤的完成人数及相对上一个步骤的百分比 6.1 需求分析 step number rate 1 101110 100% 2 40000 40% 3 20000 20% 4 1000
  • 关键路径

    2012-05-25 11:39:04
    关键路径法(Critical Path Method, CPM)是一种基于数学计算的项目计划管理方法,是网络...在关键路径法的活动上加载资源后,还能够对项目的资源需求和分配进行分析关键路径法是现代项目管理中最重要的一种分析工具。
  • 关键路径法举例和分析

    千次阅读 2013-08-31 16:15:24
    引自百度:...在关键路径法中,一般有以下一些时间参数: 最早开始时间(Early Start)活动最早开始时间由所有前置活动中最后一个最早结束时间确定。 最早结束时间(Early Finish)活动的
  • 路径分析

    千次阅读 2018-12-16 11:04:13
    # sunburst事件路径图 # 加载sunburstR包 require(sunburstR) # 导入sequences数据 sequences &lt;- read.csv( system.file("examples/visit-sequences.csv",package="sunburstR") ,...
  • 从仿真系统工作流的关键路径分析,确定关键路径上的联邦成员节点,使网格资源调度方面优先获得保证。鉴于仿真网格系统运行的复杂性和不确定性,引入了随机规划理论,提出了仿真网格的动态关键路径概念以及基于动态...
  • 论文针对导水断层缩短了煤层和含水层距离特点,建立了断层突水的关键路径力学模型。将极限平衡理论和尖点突变理论引入断层突水分析,建立了承压水及采动影响下断层突水关键部位失稳破坏模型,获得了断层突水的力学判据,...
  • 本资料主要是关于FPGA的设计技巧以及一些关键路径分析指导
  • 关键路径法(CPM)

    千次阅读 2013-11-06 15:13:06
    关键路径法(CPM),也称为关键路径分析,是一种用来预测项目总体历时的项目网络分析技术,它既可以用来估计软件项目的总体进度,也是帮助项目经理克服项目进度拖延现象的一种重要工具。  一个项目的关键路径是指...
  • 项目关键路径

    千次阅读 2016-06-23 17:53:42
    项目关键路径 项目关键路径,在项目管理中,关键路径是指网络终端元素的元素的序列,该序列具有最长的总工期并决定了整个项目的最短完成时间。关键路径的工期决定了整个项目的工期。任何关键路径上的终端元素的延迟...
  • CPM关键路径

    2021-04-22 17:09:05
    目录CPM关键路径法定义构造方法CPM中节点表示例题关键路径的意义: CPM关键路径法 定义 关键路径法(CriticalPath ...在关键路径法的活动上加载资源后,还能够对项目的资源需求和分配进行分析关键路径法是现代项目管
  • 关键路径

    千次阅读 2017-10-10 15:08:36
    关键路径图 Critical Path Mapping, 在网络图中路径最长的路径。也表明在其中一个步骤推延,输出地整个时间将增加。 关键路径通常(但并非总是)是决定项目工期的进度活动序列。它是项目中最长的路径,即使很小浮动...
  • 图——关键路径

    万次阅读 多人点赞 2019-04-02 09:10:27
    活动的最早开始时间和最晚开始时间相等,则说明该活动时属于关键路径上的活动,即关键活动。 经过比较,得出关键活动有:a0, a2, a3, a4,画出示意图如下: 该AOE网有两条关键路径。 所以,通过此案例也...
  • 关键路径算法

    千次阅读 2016-04-06 18:09:12
    关键路径的算法是建立在拓扑排序的基础之上的,这个算法中用到了拓扑排序,所以在这里先以拓扑排序开篇。 1. 什么是拓扑排序? 举个例子先:一个软件专业的学生学习一系列的课程,其中一些课程必须再学完它的基础...
  • 关键路径详解

    千次阅读 2019-11-22 15:46:36
    ),而把关键路径上的活动称为关键活动,显然关键活动会影响整个工程的进度。 关键概念: 1. 事件的最早发生时间 ve[k] ( earliest time of vertex ):即 顶点 vk 的最早发生时间。 从源点向终点方向...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 201,287
精华内容 80,514
关键字:

关键路径分析