1. 程式人生 > >MIT演算法導論公開課之第18課 最短路徑演算法、Bellman和差分約束系統

MIT演算法導論公開課之第18課 最短路徑演算法、Bellman和差分約束系統

Bellman-Ford 演算法

圖G=(V,E),選取s∈V作為圖的原點,此演算法可計算最短路徑δ(s,v)(v∈V)或報告出圖中存在負權值的環路。

Exercise

在路徑中存在負權值的環路時,將δ(s,v)設定為-∞。

Bellman-Ford 演算法偽碼

d[s] ← 0
for each v∈V-{s}
    d[v] ← ∞
for i ← 1 to |V|-1
    for each edge(u,v)∈E
        if d[v] > d[u]+w(u,v)
            d[v] ← d[u]+w(u,v) //鬆弛步驟
for each
edge(u,v)∈E if d[v] > d[u]+w(u,v) 報告圖中存在負權值的環路 else δ(s,v)=d[v] 執行時間Time=O(V·E)。
  • Ex:
    Bellman-Ford 演算法例項
    注:每次選取邊的順序可以是都不一樣的,這裡為了簡單描述都採取了一樣的順序。

Bellman-Ford 演算法正確性

Bellman-Ford 演算法正確性

線性規劃(Linear Programming)

  • 給定一個m x n階的矩陣A,一個m階的向量b和一個n階的向量c,目標是找到一個n階的向量x,能夠最大化cT·x且滿足約束條件Ax<=b,或是說明沒有符合要求的x存在。
  • 圖解:
    線性規劃

線性規劃問題解法

單一演算法(simplex algorithm):
    最古老的演算法,最壞情況下執行時間為指數階的,但在實際使用中效果還不錯。
橢球演算法(ellipsoid algorithm):
    理論上是第一個在多項式時間內解決線性規劃的演算法,但在實際使用中效果差。
內點法(interior point method):
    在多項式時間內解決線性規劃,在實際使用中也很實用。
隨機抽樣(random sampling):
    兩位MIT教授發明的演算法,理論上效果不錯。

線性可行性問題

找到x滿足約束條件Ax<=b,而不用最大化cT·x(找到可行解即可)。
此問題的複雜度並不比線性規劃問題低。

差分約束系統(System of difference constraints):

一個差分約束系統是一個線性可行性問題,矩陣A的每一行只有一個1,一個-1,其他值都為0。

即每一個描述約束條件的不等式都只包含兩個變數和一些數字,xj-xi<=wij。

  • Ex:

    • 問題:
      x1-x2<=3
      x2-x3<=-2
      x1-x3<=2
    • 解:
      x1=3
      x2=0
      x3=2
  • 約束圖:
    將xj-xi<=wij轉化為:
    約束圖
    由此可知轉化後的圖G=(V,E),|V|=n,|E|=m。
    與xj<=xi+wij類似的形式d[vj]<=d[vi]+wij。

Ex:
這裡寫圖片描述

  • 定理:
    如果約束圖存在負權值的環路,那麼相應的差分約束系統無解。
    證明:
    假設v1 → v2 → … → Vk → V1是一個負權值的環路。
    則有:
    x2-x1<=w12
    x3-x2<=w23
    .
    .
    .
    x1-xk<=wk1
    左側相加為0,右側相加為負數,從而證明了差分約束無解。

  • 定理:
    如果約束圖不存在負權值的環路,那麼相應的差分約束系統有解。
    證明:
    在約束圖G中加入一個新的頂點s,並加入從頂點s到其他所有頂點的邊,權值都設為1。
    約束圖不存在負權值
    這樣就可以在此圖上執行Bellman-Ford演算法求最短路徑。

xi=δ(s,vi)
要滿足xj-xi<=wij
即證δ(s,vj)-δ(s,vi)<=w(vi,vj)
    δ(s,vj)<=δ(s,vi)+ w(vi,vj)
由反正法此式可知顯然成立,即Bellman-Ford演算法求得的鍵值即為可行解。
  • 差分約束系統時間:
    使用Bellman-Ford演算法,執行時間為O(m·n)。

  • Exercise:
    使用Bellman-Ford演算法獲得的差分約束系統的解,滿足xi<=0,xj-xi<=wij,且得到的是Max(x1+x2+…+xn)和Min(max xi – min xi)(儘可能的密集)的解。
    最小化了線性規劃範數。

VLSI佈局問題

將一堆電路零件放在一起,要求它們之間有個距離限制。
這裡寫圖片描述
一維上的佈局可抽象成差分約束問題,進而使用Bellman-Ford演算法求得儘可能緊湊的積體電路佈局方案。

  • 其他應用:
    例如視訊剪輯方案的制定。