歐幾里得旅行商問題是對平面上給定的n個點,確定一條連線各點的最短閉合旅程的問題。這個解的一般形式為np完全的。
j.l. bentley 建議通過只考慮雙調旅程(bitonictour)來簡化問題,這種旅程即為從最左點開始,嚴格地從左到右直至最右點,然後嚴格地從右到左直至出發點。
在這種情況下,多項式時間的演算法是可能的。描述乙個確定最優雙調路線的o(n^2)時間的演算法。
將點按照橫座標從小到大排序並編號為1,2...n。
令dist[i,j]表示點i與點j之間的距離。
定義f[i,j](i>j)為從點i向左到點1,從點1向右到點j的最短距離。
1、當j2、當j=i-1時,f[i,j]=min(f[j][k]+dist[k][i])(k
double dp(int i,int j) {
if (f[i][j] >= 0) return f[i][j];
if (j < i-1) f[i][j] = dp(i-1,j) + dist[i][i-1];
else {
double res = oo;
for (int k=1;k
考慮在乙個印表機上整齊地列印一段文章的問題。輸入的正文是n個長度分別為l1、l2、……、ln(以字元個數度量)的單詞構成的序列。我們希望將這個段落在一些行上整齊地列印出來,每行至多m個字元。「整齊度」的標準如下:如果某一行包含從i到j的單詞(i
令w[i,j]表示將單詞i至單詞j放入同一行的多餘空格字元的立方和。
f[i]表示將前i個單詞放入文章所能得到的最小立方和。注意w[j+1,i]<0時不進行計算。
初始化:
狀態轉移方程:
消滅:
f[i]表示在以i為根的子樹中,選取結點i,所能獲得的最大歡樂。
g[i]表示在以i為根的子樹中,不選取結點i,所能獲得的最大歡樂。
按deadline排序後用01揹包解。
《演算法導論》筆記 第22章 總結與思考
a g 的根是g的掛接點,當且僅當在g 中該根頂點至少有兩個子女。b 設v是g 中的某一非根頂點,證明v是g的掛接點當且僅當v有乙個子頂點s,使得不存在從s或s的任何後裔頂點指向v的某個真祖先頂點的反向邊。c 設low v min d v d w d w 對v的後裔u,u,w 是反向邊 試說明對所有...
演算法導論 第15章
動態規劃,就是一種求解最優解問題的。這麼說,估計大家也覺得太空泛了。想看詳細的說明,請點這裡 那麼我就講我的理解了。首先,演算法是一種策略,方法,思想,其中,有一種非常常見的常用思想 動態思想。你要做一件事情,然後,到最後完成。而你沒做一件事情都影響後面,而且你每次有很多的選擇 那麼如何每次遇到岔路...
演算法導論第15章
第三版的clrs改寫了15.1.用乙個rod cut問題代替了assembly line問題。不過總覺得還沒第2版講得好啊。15.1 1 print station l n 如果n 2,print l 2 l 否則的話print station l n l n 1 print n station,l...