關鍵路徑不涉及原理,純應試解法分享:
前言:
關鍵路徑是有向帶權無環圖的一種尋求路徑的算法,采用四組數據,兩組點的,兩組邊的,表格化后一目了然。
分別是:ve(k),vl(k),e(i) ,l(i)
點:k表示點的標識
ve:最早發生時間
vl:最遲發生時間
邊:i表示邊的標識
e:最早開始時間
l:最遲開始時間
再引入一個d的概念,l-e,最終選取d為0的邊來串聯點,構成關鍵路徑。
給出圖如下,舉例說明
第一步:求ve
ve(k),從起點0出發,權值最長的走法,從前到后。ve(0)=0
ve(1)=3,就是a0
ve(2)=4,就是a1
ve(3)=ve(1)+a2=5,可以這么理解,也可以理解成從0到3,最長路徑是0-1-3,權值加起來是3+2=5
ve(4)=max{ve(1)+a3 , ve(2)+a4} 取較大的值,也可以理解成0-1-4和0-2-4,哪個權值大取哪個。
以此類推……
入度不為1的節點,通過前一節點加上指向該節點的權值取較大值更科學,直接算路徑長更直觀
第二步:求vl
vl(k),從終點往回倒,減去前一邊的權值,取最小。vl(10)=28
vl(9)=vl(10)-a14=22
vl(8)=vl(9)-a13=21
vl(7)=min{vl(9)-a11 ,vl(8)-a12}=11
以此類推……
第三步:求e
最早開始時間,就是邊的出發節點的ve
第四步:求l
用邊的終止節點的 vl 減去邊的權值
a0從0指向1,用vl(1)-a0
l(a0)=vl(1)-a0 = 3
a2從1指向3,用vl(3)-a2
l(a2)=vl(3)-a2=13
以此類推……
通過 l-e 得出d
d為0的邊,構成關鍵路徑
即,a1,a4,a8,a12,a13,a14構成關鍵路徑
參考書目:天勤數據結構高分筆記