算法設計與分析 ch4 學習課件_第1頁
算法設計與分析 ch4 學習課件_第2頁
算法設計與分析 ch4 學習課件_第3頁
算法設計與分析 ch4 學習課件_第4頁
算法設計與分析 ch4 學習課件_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

算法設計與分析第四講動態(tài)規(guī)劃哈爾濱工業(yè)大學王宏志wangzh@/pages/wang/請各位評審老師提出寶貴建議!謝謝!本講內(nèi)容

4.1動態(tài)規(guī)劃的原理 4.2矩陣乘法問題

4.3最長公共子序列問題

4.40-1背包問題2分治技術的問題子問題是相互獨立的如果子問題不是相互獨立的,分治方法將重復計算公共子問題,效率很低優(yōu)化問題給定一組約束條件和一個代價函數(shù),在解空間中搜索具有最小或最大代價的優(yōu)化解很多優(yōu)化問題可分為多個子問題,子問題相互關聯(lián),子問題的解被重復使用Why?動態(tài)規(guī)劃的特點把原始問題劃分成一系列子問題求解每個子問題僅一次,并將其結(jié)果保存在一個表中,以后用到時直接存取,不重復計算,節(jié)省計算時間自底向上地計算適用范圍一類優(yōu)化問題:可分為多個相關子問題,子問題的解被重復使用What?

使用動態(tài)規(guī)劃的條件優(yōu)化子結(jié)構(gòu)當一個問題的優(yōu)化解包含了子問題的優(yōu)化解時,我們說這個問題具有優(yōu)化子結(jié)構(gòu)。縮小子問題集合,只需那些優(yōu)化問題中包含的子問題,降低實現(xiàn)復雜性優(yōu)化子結(jié)構(gòu)使得我們能自下而上地完成求解過程重疊子問題在問題的求解過程中,很多子問題的解將被多次使用How?動態(tài)規(guī)劃算法的設計步驟分析優(yōu)化解的結(jié)構(gòu)遞歸地定義最優(yōu)解的代價自底向上地計算優(yōu)化解的代價保存之,并獲取構(gòu)造最優(yōu)解的信息根據(jù)構(gòu)造最優(yōu)解的信息構(gòu)造優(yōu)化解

請各位評審老師提出寶貴建議!謝謝!本講內(nèi)容

4.1動態(tài)規(guī)劃的原理

4.2矩陣乘法問題

4.3最長公共子序列問題4.40-1背包問題7輸入:<A1,A2,...,An>,

Ai是矩陣輸出:計算A1

A2

...

An的最小代價方法問題的定義矩陣乘法的代價/復雜性:乘法的次數(shù)若A是p

q矩陣,B是q

r矩陣,則A

B的代價是O(pqr)矩陣鏈乘法的實現(xiàn)矩陣乘法滿足結(jié)合率。計算一個矩陣鏈的乘法可有多種方法:

例如,(A1

A2

A3

A4)=(A1

(A2

(A3

A4)))=((A1

A2)

(A3

A4))

=((A1

A2)

A3)

A4)動機矩陣鏈乘法的代價與計算順序的關系設A1=10

100矩陣,A2=100

5矩陣,A3=5

50矩陣T((A1

A2)

A3)=10

100

5+10

5

50=7500T(A1(A2

A3))=100

5

50+10

100

50=750000結(jié)論:不同計算順序有不同的代價p(n)=1ifn=1p(n)=ifn>1p(n)=C(n-1)=Catalan數(shù)==

(4n/n3/2)

矩陣鏈乘法優(yōu)化問題的解空間設p(n)=計算n個矩陣乘積的方法數(shù)

p(n)的遞歸方程(A1

…Ak)(Ak+1…An)如此之大的解空間是無法用枚舉方法求出最優(yōu)解的!

下邊開始設計求解矩陣鏈乘法問題的動態(tài)規(guī)劃算法分析優(yōu)化解的結(jié)構(gòu)遞歸地定義最優(yōu)解的代價自底向上地計算優(yōu)化解的代價保存之,并獲取構(gòu)造最優(yōu)解的信息根據(jù)構(gòu)造最優(yōu)解的信息構(gòu)造優(yōu)化解

兩個記號Ai-j=Ai

Ai+1

Ajcost(Ai-j)=計算Ai-j的代價優(yōu)化解的結(jié)構(gòu)若計算A1

n的優(yōu)化順序在k處斷開矩陣鏈,即A1

n=A1

k

Ak+1

n,則在A1

n的優(yōu)化順序中,對應于子問題A1

k的解必須是A1-k的優(yōu)化解,對應于子問題Ak+1

n的解必須是Ak+1

n的優(yōu)化解

分析優(yōu)化解的結(jié)構(gòu)具有優(yōu)化子結(jié)構(gòu):問題的優(yōu)化解包括子問題優(yōu)化解子問題重疊性A1

A2

A3

A4(A1)

(A2

A3

A4)(A1

A2)

(A3

A4)(A1

A2

A3)

(A4)(A2

A3)(A3

A4)(A1

A2)(A3

A4)(A1

A2)(A2

A4)具有子問題重疊性(A3

A4)(A3

A4)(A1

A2)(A1

A2)假設m[i,j]=計算Aij的最小乘法數(shù)m[1,n]=計算A1n的最小乘法數(shù)A1...AkAk+1An是優(yōu)化解(k實際上是不可預知)代價方程m[i,i]=

計算Ai

i

的最小乘法數(shù)=0m[i,j]=m[i,k]+m[k+1,j]+pi-1pkpj其中,pi-1pkpj是計算Ai

k

Ak+1

j所需乘法數(shù),Ai

k和Ak+1j分別是pi-1

pk和pk

pj矩陣.遞歸地定義最優(yōu)解的代價考慮到所有的k,優(yōu)化解的代價方程為

m[i,j]=0ifi=jm[i,j]=mini

k<j{m[i,k]+m[k+1,j]+pi-1pkpj}

ifi<j

自底向上計算優(yōu)化解的代價m[i,j]=mini

k<j{m[i,k]+m[k+1,j]+p0pkp5}m[1,5]m[1,1]m[4,4]m[5,5]m[2,2]m[3,3]m[4,5]m[3,4]m[2,3]m[1,2]m[1,3]m[2,4]m[3,5]m[1,4]m[2,5]m[2,4]=min{m[2,2]+m[3,4]m[2,3]+m[4,4]m[i,j]=mini

k<j{m[i,k]+m[k+1,j]+pi-1pkpj}m[1,5]m[1,1]m[4,4]m[5,5]m[2,2]m[3,3]m[4,5]m[3,4]m[2,3]m[1,2]m[1,3]m[2,4]m[3,5]m[1,4]m[2,5]Matrix-Chain-Order(p)n=length(p)-1;FORi=1TOnDO

m[i,i]=0;FORl=2TOnDO/*計算地l對角線*/FORi=1TOn-l+1DO

j=i+l-1;

m[i,j]=∞;

FORk

iToj-1DO/*計算m[i,j]*/

q=m[i,k]+m[k+1,j]+pi-1pkpjIFq<m[i,j]THENm[i,j]=q;Returnm.

Matrix-Chain-Order(p)n=length(p)-1;FORi=1TOnDO

m[i,i]=0;FORl=2TOnDOFORi=1TOn-l+1DO

j=i+l-1;

m[i,j]=∞;FORk

iToj-1DO

q=m[i,k]+m[k+1,j]+pi-1pkpjIFq<m[i,j]THENm[i,j]=q,s[i,j]=k;Returnmands.獲取構(gòu)造最優(yōu)解的信息S[i,j]記錄AiAi+1…Aj的最優(yōu)劃分處在Ak與Ak+1之間

Print-Optimal-Parens(s,i,j)IFj=iTHENPrint“A”i;

ELSEPrint“(”Print-Optimal-Parens(s,i,s[i,j])Print-Optimal-Parens(s,s[i,j]+1,j)Print“)”

構(gòu)造最優(yōu)解調(diào)用Print-Optimal-Parens(s,1,n)即可輸出A1

n的優(yōu)化計算順序S[i,j]記錄Ai…Aj的最優(yōu)劃分處;S[i,S[i,j]]記錄Ai…As[i,j]的最優(yōu)劃分處;S[S[i,j]+1,j]記錄As[i,j]+1…Aj的最優(yōu)劃分處.?DKE-LAB(2009)時間復雜性計算代價的時間(l,i,k)三層循環(huán),每層至多n-1步O(n3)構(gòu)造最優(yōu)解的時間:

O(n)總時間復雜性為:O(n3)空間復雜性

使用數(shù)組m和S需要空間O(n2)算法復雜性請各位評審老師提出寶貴建議!謝謝!本講內(nèi)容

4.1動態(tài)規(guī)劃的原理 4.2矩陣乘法問題

4.3最長公共子序列問題4.40-1背包問題23子序列X=(A,B,C,B,D,B)Z=(B,C,D,B)是X的子序例W=(B,D,A)不是X的子序例公共子序列Z是序列X與Y的公共子序列如果Z是X的子序也是Y的子序列。問題的定義最長公共子序列(LCS)問題輸入:X=(x1,x2,...,xn),Y=(y1,y2,...ym)輸出:Z=X與Y的最長公共子序列最長公共子序列結(jié)構(gòu)分析第i前綴設X=(x1,x2,...,xn)是一個序列,X的第i前綴Xi是一個序列,定義為Xi=(x1,...,xi)

例.

X=(A,B,D,C,A),X1=(A),X2=(A,B),X3=(A,B,D)優(yōu)化子結(jié)構(gòu)定理1(優(yōu)化子結(jié)構(gòu))設X=(x1,...,xm)、Y=(y1,...,yn)是兩個序列,Z=(z1,...,zk)是X與Y的LCS,我們有:

如果xm=yn,

則zk=xm=yn,

Zk-1是Xm-1和Yn-1的LCS,即,LCSXY=LCSXm-1Yn-1+<xm=yn>.

如果xm

yn,且zk

xm,則Z是Xm-1和Y的LCS,即LCSXY=LCSXm-1Y

如果xm

yn,且zk

yn,則Z是X與Yn-1的LCS,即LCSXY=LCSXYn-1?DKE-LAB(2009)證明:

⑴.X=<x1,…,xm-1,xm>,Y=<y1,…,yn-1,xm>,則LCSXY=LCSXm-1Yn-1+<xm=yn>.

設zk

xm,則可加xm=yn到Z,得到一個長為k+1的X與Y的公共序列,與Z是X和Y的LCS矛盾。于是zk=xm=yn。

現(xiàn)在證明Zk-1是Xm-1與Yn-1的LCS。顯然Zk-1是Xm-1與Yn-1的公共序列。我們需要證明Zk-1是LCS。設不然,則存在Xm-1與Yn-1的公共子序列W,W的長大于k-1。增加xm=yn到W,我們得到一個長大于k的X與Y的公共序列,與Z是LCS矛盾。于是,Zk-1是Xm-1與Yn-1的LCS.⑵X=<x1,…,xm-1,xm>,Y=<y1,…,yn-1,yn>,xm

yn,zk

xm,則

LCSXY=LCSXm-1Y

由于zk

xm,Z是Xm-1與Y的公共子序列。我們來證Z是Xm-1與Y的LCS。設Xm-1與Y有一個公共子序列W,W的長大于k,則W也是X與Y

的公共子序列,與Z是LCS矛盾。

⑶同⑵可證。X和Y的LCS的優(yōu)化解結(jié)構(gòu)為

LCSXY=LCSXm-1Yn-1+<xm=yn>ifxm=yn

LCSXY=LCSXm-1Y

ifxm

yn,zk

xm

LCSXY=LCSXYn-1

if

xm

yn,zk

yn子問題重疊性LCSXYLCSXm-1Yn-1LCSXm-1YLCSXYn-1LCSXm-2Yn-2LCSXm-2Yn-1LCSXm-1Yn-2……LCS問題具有子問題重疊性建立LCS長度的遞歸方程C[i,j]=Xi與Yj的LCS的長度LCS長度的遞歸方程

C[i,j]=0ifi=0或

j=0C[i,j]=C[i-1,j-1]+1ifi,j>0且xi=yjC[i,j]=Max(C[i,j-1],C[i-1,j])ifi,j>0且xi

yj

基本思想自底向上計算LCS的長度C[i-1,j-1]C[i-1,j]C[i,j-1]

C[i,j]計算過程C[0,0]C[0,1]C[0,3]C[0,2]C[0,4]C[1,0]C[2,0]C[3,0]C[1,1]C[2,1]C[3,1]C[1,2]C[1,3]C[1,4]C[2,2]C[2,3]C[2,4]C[3,2]C[3,3]C[3,4]計算LCS長度的算法數(shù)據(jù)結(jié)構(gòu)

C[0:m,0:n]:C[i,j]是Xi與Yj的LCS的長度

B[1:m,1:n]:B[i,j]是指針,指向計算C[i,j]時所選擇的子問題的優(yōu)化解所對應的C表的表項?DKE-LAB(2009)

LCS-length(X,Y)

m

length(X);n

length(Y);Fori

1TomDoC[i,0]

0;Forj

1TonDoC[0,j]

0;Fori

1TomDoForj

1TonDoIfxi=yj

ThenC[i,j]

C[i-1,j-1]+1;B[i,j]

“↖”;ElseIfC[i-1,j]

C[i,j-1]ThenC[i,j]

C[i-1,j];B[i,j]

“↑”;ElseC[i,j]

C[i,j-1];B[i,j]

“←”;ReturnCandB.

基本思想從B[m,n]開始按指針搜索若B[i,j]=“↖”,則xi=yj是LCS的一個元素如此找到的“LCS”是X與Y的LCS構(gòu)造優(yōu)化解Print-LCS(B,X,i,j)IFi=0orj=0THENReturn;IFB[i,j]=“↖”THENPrint-LCS(B,X,i-1,j-1);Printxi;ELSEIfB[i,j]=“↑”THENPrint-LCS(B,X,i-1,j);ELSEPrint-LCS(B,X,i,j-1).Print-LCS(B,X,length(X),length(Y))可打印出X與Y的LCS。

時間復雜性計算代價的時間(i,j)兩層循環(huán),i循環(huán)m步,j循環(huán)n步O(mn)構(gòu)造最優(yōu)解的時間:

O(m+n)總時間復雜性為:O(mn)空降復雜性

使用數(shù)組C和B需要空間O(mn)算法復雜性請各位評審老師提出寶貴建議!謝謝!本講內(nèi)容

4.1動態(tài)規(guī)劃的原理 4.2矩陣乘法問題

4.3最長公共子序列問題4.40-1背包問題40問題的定義

給定n種物品和一個背包,物品i的重量是wi,價值vi,背包容量為C,問如何選擇裝入背包的物品,使裝入背包中的物品的總價值最大?對于每種物品只能選擇完全裝入或不裝入,一個物品至多裝入一次。輸入:C>0,wi>0,vi>0,1

i

n

輸出:(x1,x2,…,xn),xi

{0,1},滿足

1

i

nwixi

C,

1

i

nvixi

最大等價的整數(shù)規(guī)劃問題max

1invixi

1inwixiCxi{0,1},1i

n?DKE-LAB(2009)優(yōu)化解結(jié)構(gòu)的分析定理(優(yōu)化子結(jié)構(gòu))

如果(y1,y2,…,yn)是0-1背包問題的優(yōu)化解,則(y2,…,yn)是如下子問題的優(yōu)化解:max

2invixi

2inwixiC–w1y1xi{0,1},2i

n證明:如果(y2,…,yn)不是子問題優(yōu)化解,則存在(z2,…,zn)是子問題更優(yōu)的解。于是,(y1,z2,…,zn)是原問題比(y1,y2,…,yn)更優(yōu)解,矛盾。建立優(yōu)化解代價的遞歸方程設子問題max

iknvkxk

iknwkxkjxk{0,1},ik

n

的最優(yōu)解代價為m(i,j).即m(i,j)是背包容量為j,可選物品為i,i+1,…,n

時問題最優(yōu)解的代價.遞歸方程

m(i,j)=m(i+1,j)0j<wim(i,j)=max{m(i+1,j),m(i+1,j-wi)+vi}jwi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論