關鍵路徑

參閱:http://baike.baidu.com/view/288224.htm?fr=ala0_1

 

關鍵路徑

  關鍵路徑
  1、 AOE網
  用頂點表示事件,弧表示活動,弧上的權值表示活動持續的時間的有向圖叫AOE(Activity On Edge Network)網 。AOE網常用於估算工程完成時間。
  2、 AOE網研究的問題
  (1) 完成整個工程至少需要多少時間;
  (2) 哪些活動是影響工程的關鍵。
  1956年,美國杜邦公司提出關鍵路徑法,並於1957年首先用於1000萬美元化工廠建設,工期比原計劃縮短了4個月。杜邦公司在採用關鍵路徑法的一年中,節省了100萬美元。
  3、 關鍵路徑的幾個術語
  (1) 關鍵路徑 從源點到匯點的路徑長度最長的路徑叫關鍵路徑。
  (2) 活動開始的最早時間e(i)
  (3) 活動開始的最晚時間l(i) 定義e(i)=l(i)的活動叫關鍵活動。
  (4) 事件開始的最早時間ve(i)
  (5) 事件開始的最晚時間vl(i)
  設活動ai由弧<j,k>(即從頂點j到k)表示,其持續時間記爲dut(<j,k>),則
  e(i)=ve(j)
  l(i)=vl(k)-dut(<j,k>) (6_6_1)
  求ve(i)和vl(j)分兩步:
  · 從ve(1)=0開始向前遞推
  ve(j)=Max{ ve(i)+dut(<i,j>) } (6_6_2)
  <i,j>T, 2<=j<=n
  其中,T是所有以j爲弧頭的弧的集合。
  · 從vl(n)=ve(n)開始向後遞推
  vl(i)=Min{ vl(j)-dut(<i,j>) } (6_6_3)
  <i,j>S, 1<=i<=n-1
  其中,S是所有以i爲弧尾的弧的集合。
  兩個遞推公式是在拓撲有序和逆拓撲有序的前提下進行。
  4、 求關鍵路徑的算法
  (1) 輸入e條弧<j,k>,建立AOE網的存儲結構。
  (2) 從源點v1出發,令ve(1)=0,求 ve(j) 2<=j<=n。
  (3) 從匯點vn出發,令vl(n)=ve(n),求 vl(i) 1<=i<=n-1。
  (4) 根據各頂點的ve和vl值,求每條弧s(活動)的最早開始時間e(s)和最晚開始時間l(s),其中e(s)=l(s)的爲關鍵活動。
  求關鍵路徑是在拓撲排序的前提下進行的,不能進行拓撲排序,自然也不能求關鍵路徑。
  Status ToplogicalSort(ALGraph G,stack &T){
  FindInDegree(G,indegree);
  InitStack(S);count=0; ve[0..G.vexnum-1]=0;
  while(!StackEmpty(S))
  { Pop(S,j);Push(T,j); ++count;
  for(p=G.vertices[j].firstarc;p;p=p->nextarc)
  {k=p>adjvex;
  if(--indegree[k]==0) Push(S,k);
  if(ve[j]+*(p->info)>ve[k]) ve[k]=ve[j]+*(p->info);
  }
  }
  if(count<G.vexnum) return ERROR;
  else return OK;
  }
  status CriticalPath(ALGraph G){
  if(!ToplogicalOrder(G,T)) return ERROR;
  vl[0..G.vexnum-1]=ve[0..G.vexnum-1];
  while(!StackEmpty(T))
  for(Pop(T,j),p=G.vertices[j].firstarc;p;p=p->nextarc)
  {k=p>adjvex; dut=*(p->info);
  if(vl[k]-dut<vl[j]) vl[j]=vl[k]-dut;
  }
  for(j=0;j<G.vexnum;++j)
  for(p=G.vertices[j].firstarc;p;p=p->nextarc)
  {k=p>adjvex; dut=*(p->info);
  ee=ve[j]; el=vl[k];
  tag=(ee==el)?’*’:’’;
  printf(j,kdut,ee,el,tag);
  }
  }
  6、 求關鍵路徑的算法分析
  (1) 求關鍵路徑必須在拓撲排序的前提下進行,有環圖不能求關鍵路徑;
  (2) 只有縮短關鍵活動的工期纔有可能縮短工期;
  (3) 若一個關鍵活動不在所有的關鍵路徑上,減少它並不能減少工期;
  (4) 只有在不改變關鍵路徑的前提下,縮短關鍵活動才能縮短整個工期。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章