1. 程式人生 > >poj 1160 Post Office //四邊形不等式優化

poj 1160 Post Office //四邊形不等式優化

http://blog.csdn.net/find_my_dream/archive/2009/12/03/4931222.aspx

這個部落格概括的比較好

四邊形不等式優化------郵局問題

m[p,n]為問題的解

m[i,j]表示在前j個村莊建立i個郵局的最小距離和

狀態轉移方程和邊界條件是

m[1,j]=w[1,j]

m[i,j]=min(m[i-1,k]+w[k+1,j])  i<=j

其中w[i,j]表示在d[i..j]之間建立一個郵局的最小距離和,

可以證明,當僅建立一個郵局時,最優解出現在中位數,

即設建立郵局的村莊為k,則k=(i+j)/2

計算w[i,j]是比較簡單的,不作闡述

同時令s[i,j]=k,記錄使用前i-1個郵局的村莊數

便於在算出最小距離和之後構造最優建立方案。

上述演算法中w[i,j]可通過O(n)時間的預處理,在O(1)的時間內算出,

所以,該演算法的狀態總數為O(n*p),每個狀態轉移的狀態數為O(n),

每次狀態轉移的時間為O(1),該演算法總的時間複雜度為O(p*n^2)。

以下就是演算法的優化

首先這個題目的狀態轉移方程讓我猜測它是否也滿足單調性

即  s[i-1,j]<=s[i,j]<=s[i,j+1]

首先我們證明函式w滿足四邊形不等式,即

w[i,j]+w[i',j']<=w[i',j]+w[i,j'] , i<=i'<=j<=j'

設y=(i'+j)/2  z=(i+j')/2

下面可分兩種情形討論,z<=y和z>y,不過這兩種情形相似

證明可參考毛子青大牛的論文,不作闡述

再用數學歸納法證明m函式也滿足四邊形不等式,

最後,我們證明決策s[i,j]滿足單調性。

為討論方便,令mk[i,j]=m[i-1,k]+w[k+1,j];

我們先來證明s[i-1,j]≤s[i,j],

只要證明對於所有i≤k<k'<j且mk'[i-1,j]≤mk[i-1,j],

有:mk'[i,j]≤mk[i,j]。

類似地,我們可以證明一個更強的不等式

mk[i-1,j]-mk'[i-1,j]≤mk[i,j]-mk'[i,j]

也就是:mk[i-1,j]+mk'[i,j]≤mk[i,j]+mk'[i-1,j]

利用遞推定義式展開整理的:m[i-2,k]+m[i-1,k']≤m[i-1,k]+m[i-2,k'],

這就是i-2<i-1<k<k'時m的四邊形不等式。

我們再來證明s[i,j]≤s[i,j+1],

與上文類似,設k<k'<j,則我們只需證明一個更強的不等式:             

mk[i,j]-mk'[i,j]≤mk[i,j+1]-mk'[i,j+1]

也就是:mk[i,j]+mk'[i,j+1]≤mk[i,j+1]+mk'[i,j]

利用遞推定義式展開整理的:

w[k+1,j]+w[k'+1,j+1]≤w[k+1,j+1]+w[k'+1,j],

這就是k+1<k'+1<j<j+1時w的四邊形不等式。

綜上所述,該問題的決策s[i,j]具有單調性,

m[1,j]=w[1,j]

m[i,j]=min(m[i-1,k]+w[k+1,j])  i<=j

s[i,j]=k

同上文所述,優化後的演算法時間複雜度為O(n*p)。