算法設(shè)計(jì)與分析 課件 第3、4章 分治法;動(dòng)態(tài)規(guī)劃_第1頁(yè)
算法設(shè)計(jì)與分析 課件 第3、4章 分治法;動(dòng)態(tài)規(guī)劃_第2頁(yè)
算法設(shè)計(jì)與分析 課件 第3、4章 分治法;動(dòng)態(tài)規(guī)劃_第3頁(yè)
算法設(shè)計(jì)與分析 課件 第3、4章 分治法;動(dòng)態(tài)規(guī)劃_第4頁(yè)
算法設(shè)計(jì)與分析 課件 第3、4章 分治法;動(dòng)態(tài)規(guī)劃_第5頁(yè)
已閱讀5頁(yè),還剩64頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

計(jì)算機(jī)算法設(shè)計(jì)與分析第三章

分治法學(xué)習(xí)目標(biāo)掌握分治法的基本思想掌握分治法的特點(diǎn)和基本框架掌握分治法解決實(shí)際問(wèn)題3.1分治法基本思想孫子兵法兵勢(shì)篇曰:凡治眾如治寡,分?jǐn)?shù)是也。其大致意思就是管理大規(guī)模部隊(duì)和管理小股部隊(duì)是一樣的,分開(kāi)治理就是了。這就是分治法在軍事上的運(yùn)用。分治法的基本思想就是將一個(gè)較難以解決的規(guī)模大的問(wèn)題,分割成多個(gè)相似的規(guī)模較小的子問(wèn)題,先求出小規(guī)模子問(wèn)題的解,然后將各小規(guī)模子問(wèn)題的解組合起來(lái)就是規(guī)模大的問(wèn)題的解。其中的一個(gè)關(guān)鍵點(diǎn)是分割的子問(wèn)題一定要相似,這樣就可以采取同樣的方法來(lái)求解,從而將問(wèn)題簡(jiǎn)化。例3.1

二分查找問(wèn)題。在一個(gè)升序的含n個(gè)元素的數(shù)組a[]中查找x,輸出x在數(shù)組a中的下標(biāo)位置,若沒(méi)查到返回-1。分析:可以考慮使用分治思想來(lái)解決,具體做法是設(shè)計(jì)三個(gè)變量left,mid和right將整個(gè)數(shù)組分成3個(gè)部分a[left,mid-1],a[mid],a[mid+1,right]。如果a[mid]>x,則使用相同的辦法在較小范圍[left,mid-1]中查找;如果a[mid]=x,則已查找到,返回mid即可;如果a[mid]<x,則使用相同的辦法在較小范圍[mid+1,right]中查找。以上過(guò)程都沒(méi)查找到的話,則數(shù)組中不存在x,返回-1。3.1分治法基本思想例3.2

二分歸并排序。將含有n個(gè)元素的數(shù)組a[]按關(guān)鍵字大小升序排列。以數(shù)組a[8]={8,4,5,7,1,3,6,2}為例來(lái)分析。3.1分治法基本思想3.2分治法的特點(diǎn)和基本框架當(dāng)采用分治法時(shí),一般原問(wèn)題都需要具備以下幾個(gè)特征:(1)難度遞降:即原問(wèn)題的解決難度,隨著數(shù)據(jù)的規(guī)模的縮小而降低,當(dāng)降低到一定程度時(shí),問(wèn)題很容易解決。(2)問(wèn)題可分:原問(wèn)題可以分解為若干個(gè)規(guī)模較小的同類型問(wèn)題,即該問(wèn)題具有最優(yōu)子結(jié)構(gòu)性質(zhì)。這是應(yīng)用分治法的前提。(3)解可合并:利用所有子問(wèn)題的解,可合并出原問(wèn)題的解。這個(gè)特征很關(guān)鍵,能否利用分治法完全取決于這個(gè)特征。(4)相互獨(dú)立:各個(gè)子問(wèn)題之間相互獨(dú)立,某個(gè)子問(wèn)題的求解不會(huì)影響到另一個(gè)子問(wèn)題。如果子問(wèn)題之間不獨(dú)立,則分治法需要重復(fù)地解決公共的子問(wèn)題,造成效率低下的結(jié)果。設(shè)P是要求解的問(wèn)題,|P|為問(wèn)題P的輸入規(guī)模,現(xiàn)將分治法求解問(wèn)題的基本框架描述如下:Divide-and-Conquer(P):if|P|≤cthenS(P)

//當(dāng)問(wèn)題規(guī)模較小時(shí),很容易求出解endifdividePintoP1,P2,...,Pk//將原問(wèn)題分割為規(guī)模小的子問(wèn)題fori=1tokdoxi=Divide-and-Conquer(Pi)//遞歸求解每個(gè)子問(wèn)題endforreturnMerge(x1,x2,...,xk)//將子問(wèn)題的解合并成原問(wèn)題的解3.2分治法的特點(diǎn)和基本框架3.3分治法的時(shí)間復(fù)雜度分析分治法的實(shí)現(xiàn)一般都是采用遞歸算法。分析分治法的時(shí)間復(fù)雜度需要使用其遞推公式來(lái)推導(dǎo)。分治法中通常的遞推方程有以下兩種類型:第一類是歸約后子問(wèn)題規(guī)模比原問(wèn)題規(guī)模呈常數(shù)級(jí)減少。遞推方程為如Hanoi塔問(wèn)題使用分治法,將n個(gè)圓盤的問(wèn)移動(dòng)題歸約為兩個(gè)n-1圓盤移動(dòng)子問(wèn)題,也就是歸約后的子問(wèn)題規(guī)模只比原問(wèn)題規(guī)模少1。遞推方程為解得:第二類是歸約后子問(wèn)題規(guī)模比原問(wèn)題規(guī)模呈倍數(shù)減少。該算法的時(shí)間復(fù)雜度可以通過(guò)以下遞推公式求出:根據(jù)1.4.4節(jié)介紹的MasterTheorem主定理結(jié)論可知:3.3分治法的時(shí)間復(fù)雜度分析3.4.1分治法的典型實(shí)例——快速排序快速排序是數(shù)據(jù)結(jié)構(gòu)中經(jīng)典且高效的一種排序算法,它在實(shí)踐中應(yīng)用非常廣泛。設(shè)待排的數(shù)組為A,快速排序的基本思想為:用數(shù)組的首元素作為標(biāo)準(zhǔn)將A劃分為前、后兩部分,前部分元素都比首元素小,后部分元素都比首元素大,這兩部分就構(gòu)成兩個(gè)新的子問(wèn)題。算法接著分別對(duì)這兩部分遞歸地進(jìn)行排序,各子問(wèn)題排序完成后自然整個(gè)數(shù)組也就排序完成。算法的關(guān)鍵在于怎樣劃分?jǐn)?shù)組A而將其歸約成兩個(gè)相同結(jié)構(gòu)的子問(wèn)題。3.4.1分治法的典型實(shí)例——快速排序快速排序算法Quicksort(A,p,r) //p和r分別為數(shù)組A的首元素和尾元素的下標(biāo)輸入:數(shù)組A[p..r],1≤p≤r≤n輸出:從A[p]到A[r]按照升序排好序的數(shù)組Aifp<rthenq←Partition(A,p,r) //劃分?jǐn)?shù)組,找到首元素A[p]在排好序后的位置qA[p]?A[q] //交換A[p],A[q]中元素的值Quicksort(A,p,q-1) //對(duì)前部分繼續(xù)遞歸地用快速排序算法Quicksort(A,q+1,r) //對(duì)后部分繼續(xù)遞歸地用快速排序算法endif其算法中的Partition函數(shù)是劃分的過(guò)程函數(shù),它實(shí)現(xiàn)的就是以A[p..r]的首元素A[p]作為標(biāo)準(zhǔn),輸出q表示A[p]應(yīng)該處在的正確位置,即排好序后A[p]應(yīng)該放在數(shù)組下標(biāo)為q的位置。過(guò)程如下:(1)先從后向前掃描數(shù)組A,找到第一個(gè)不大于A[p]的元素A[j](2)從前向后掃描A找到第一個(gè)大于A[p]的元素A[i](3)當(dāng)i<j時(shí),交換A[i]與A[j]。這時(shí)A[j]后面的元素都大于A[p],A[i]前面的元素都小于或等于A[p]。(4)接著對(duì)數(shù)組A從i到j(luò)之間的部分繼續(xù)上面的掃描過(guò)程,直到i和j相遇,當(dāng)i>j時(shí),j就代表了A在排好序的數(shù)組中的正確位置q。此刻在q位置之前的元素都不大于A[p],在q位置后面的元素都大于A[p]。3.4.1分治法的典型實(shí)例——快速排序3.4.1分治法的典型實(shí)例——快速排序劃分算法Partition(A,p,r)輸入:數(shù)組A[p..r],1≤p≤r≤n輸出:數(shù)組首元素A[p]在排好序的數(shù)組中的位置x←A[p]i←pj←r+1whiletruedorepeatj←j-1untilA[j]≤x//從后往前找到不大于x的元素repeati←i+1untilA[i]>x//從前往后找到大于x的元素ifi<jthenA[i]?A[j]//交換A[i],A[j]中元素的值elsereturnj //i,j相遇,返回相遇的位置即為數(shù)組首元素A[p]的正確位置endifendwhile舉例說(shuō)明一趟劃分的過(guò)程數(shù)組A[6]={64,57,86,42,12,53},第一趟劃分以64為標(biāo)準(zhǔn),p=1i=2j=5交換A[2]和A[5]的值,繼續(xù)循環(huán)。j=4i=5i<j不成立,一趟劃分結(jié)束,返回值為4。在Quicksort中q=4,交換A[p],A[q]中元素的值,就得到一次劃分后的結(jié)果。在一趟快速排序結(jié)束后,繼續(xù)對(duì)兩個(gè)子數(shù)組{12,57,53,42}和{86}實(shí)施相同的操作。3.4.1分治法的典型實(shí)例——快速排序第1次循環(huán)645786421253第2次循環(huán)645753421286劃分后1257534264863.4.2分治法的典型實(shí)例——大整數(shù)乘法1.問(wèn)題描述采用分治法設(shè)計(jì)一個(gè)有效的算法,計(jì)算兩個(gè)n位大整數(shù)的乘法。(n=2k,k=1,2,3....)。2.問(wèn)題分析根據(jù)分治法的思想,可以將兩個(gè)大的整數(shù)乘法分而治之。將大整數(shù)按位數(shù)的一半分成兩個(gè)小整數(shù),轉(zhuǎn)換成稍簡(jiǎn)單的小整數(shù)乘法,再進(jìn)行合并。上述的過(guò)程可以重復(fù)進(jìn)行,直到得到最簡(jiǎn)單的兩個(gè)1位數(shù)的乘法,從而解決上述問(wèn)題。

3.4.2分治法的典型實(shí)例——大整數(shù)乘法3.4.2分治法的典型實(shí)例——大整數(shù)乘法3.算法設(shè)計(jì)BigIntMul(X,Y,n)輸入:大整數(shù)X,Y和位數(shù)n輸出:X與Y的乘積結(jié)果sx←sign(X),sy←sign(Y) //取X,Y的符號(hào)s←sx*sy //求出X×Y的符號(hào)ifs=0thenreturn0endifX←|X|,Y←|Y|ifn=1thenreturns*X*YendifA←X的左邊n/2位, B←X的右邊n/2位C←Y的左邊n/2位, D←Y的右邊n/2位m1←BigIntMul(A,C,n/2), m2←BigIntMul((A-B),(D-C),n/2)m3←BigIntMul(B,D,n/2)S←m1*10^n+(m1+m2+m3)*10^(n/2)+m3returnS舉例:以計(jì)算3141×5247為例來(lái)說(shuō)明。將3141分拆成31和41,5247分拆成52和47。然后計(jì)算31×52,-10×-5,41×47。當(dāng)出現(xiàn)兩個(gè)數(shù)位數(shù)不等時(shí),可以將位數(shù)小的高位補(bǔ)0再進(jìn)行計(jì)算。如:-10×-5=10×05=(1×10+0)×(0×10+5)=1×0×100+(1×5+1×0+0×5)×10+0×5=0+50+0=50其他兩個(gè)個(gè)同理算出:31×52=1612,41×47=1927。帶入原來(lái)的算式得:3141×5247=16120000+(50+1612+1927)×100+1927=16480827。3.4.2分治法的典型實(shí)例——大整數(shù)乘法4.算法效率分析根據(jù)上述的計(jì)算過(guò)程得到遞推方程。改進(jìn)前:根據(jù)主定理理論可得:改進(jìn)后:根據(jù)主定理可得:

,有較大的改進(jìn)。3.4.3分治法的典型實(shí)例——平面內(nèi)最近點(diǎn)問(wèn)題

3.4.3分治法的典型實(shí)例——平面內(nèi)最近點(diǎn)問(wèn)題

2.問(wèn)題分析如果采用蠻力法,就需要遍歷平面上任意兩個(gè)點(diǎn)之間的距離,然后比較得出最小的值。很顯然其時(shí)間復(fù)雜度是O(n2)。那有沒(méi)有更快的方法呢?考慮分治法,如圖3.2所示,用一條垂直的直線l將整個(gè)平面中的點(diǎn)分為左半平面PL和右半平面PR兩部分,使得兩部分的點(diǎn)數(shù)近似相等。

3.4.3分治法的典型實(shí)例——平面內(nèi)最近點(diǎn)問(wèn)題將平面的點(diǎn)集一分為二PLPRP直線l

3.4.3分治法的典型實(shí)例——平面內(nèi)最近點(diǎn)問(wèn)題

3.4.4分治法的典型實(shí)例——選擇第k小問(wèn)題

大小S3S4S1S2中位數(shù)組M

3.4.3分治法的典型實(shí)例——平面內(nèi)最近點(diǎn)問(wèn)題平面上最臨近點(diǎn)對(duì)算法MinDistance(P,X,Y)輸入:n()個(gè)點(diǎn)集合P,X,Y分別表示n個(gè)點(diǎn)的x,y坐標(biāo)的值輸出:最近的兩個(gè)點(diǎn)以及距離ifn≤

3then直接計(jì)算n個(gè)點(diǎn)之間的最短距離endifSort(n,X,Y) //把所有的點(diǎn)按照橫坐標(biāo)X排序

l←mid(X) //用一條豎直的線L將所有的點(diǎn)分成兩等份MinDistance(PL,XL,YL)d1←PL中最短距離MinDistance(PR,XR,YR)d2←PR中最短距離d←min(d1,d2)while(PL中的點(diǎn)andXL≥l-d)dowhile(PR中的點(diǎn)andXR≤l+d)doifdistance(XL,YL,XR,YR)<dthen存儲(chǔ)點(diǎn)對(duì)(XL,YL),(XR,YR)d←distance(XL,YL,XR,YR)endifendwhileendwhile該算法是遞歸算法,且里面有排序,為了提高效率,可以把排序操作放到遞歸算法的外面。另外在直線l兩邊距離不超過(guò)d的區(qū)域內(nèi)檢查與所取點(diǎn)的距離是否小于d的點(diǎn)不超過(guò)7個(gè)即可。

3.4.3分治法的典型實(shí)例——平面內(nèi)最近點(diǎn)問(wèn)題

3.4.4分治法的典型實(shí)例——選擇第k小問(wèn)題1.問(wèn)題描述設(shè)A是含有n個(gè)元素的數(shù)組,從A中選出第k小的元素,其中1≤k≤n。所以選最小就是k=1;選最大就是k=n;選次大就是k=n-1;選中位數(shù)就是k=n/2。

3.4.4分治法的典型實(shí)例——選擇第k小問(wèn)題

3.4.4分治法的典型實(shí)例——選擇第k小問(wèn)題

計(jì)算機(jī)算法設(shè)計(jì)與分析第四章

動(dòng)態(tài)規(guī)劃學(xué)習(xí)目標(biāo)了解動(dòng)態(tài)規(guī)劃法的基本概念。掌握動(dòng)態(tài)規(guī)劃法的基本思想。掌握動(dòng)態(tài)規(guī)劃法解決實(shí)際問(wèn)題。4.1動(dòng)態(tài)規(guī)劃的提出在現(xiàn)實(shí)生活中,有一類活動(dòng)的過(guò)程,由于它的特殊性,可將過(guò)程分成若干個(gè)互相聯(lián)系的階段,在它的每一階段都需要作出決策,從而使整個(gè)過(guò)程達(dá)到最好的活動(dòng)效果。當(dāng)然,各個(gè)階段決策的選取不是任意確定的,它依賴于當(dāng)前面臨的狀態(tài),又影響以后的發(fā)展,當(dāng)各個(gè)階段決策確定后,就組成一個(gè)決策序列,因而也就確定了整個(gè)過(guò)程的一條活動(dòng)路線,如下圖所示。這種把一個(gè)問(wèn)題看作是一個(gè)前后關(guān)聯(lián)具有鏈狀結(jié)構(gòu)的多階段過(guò)程就稱為多階段決策過(guò)程,這種問(wèn)題就稱為多階段決策問(wèn)題。1狀態(tài)決策2狀態(tài)狀態(tài)決策n狀態(tài)狀態(tài)...決策4.1動(dòng)態(tài)規(guī)劃的提出在多階段決策問(wèn)題中,各個(gè)階段采取的決策,一般來(lái)說(shuō)是與時(shí)間有關(guān)的,決策取決于當(dāng)前的狀態(tài),然后又會(huì)引起狀態(tài)的轉(zhuǎn)移,一個(gè)決策序列就是在不斷變化的狀態(tài)中依次產(chǎn)生出來(lái)的,故有動(dòng)態(tài)的含義。因此,把處理它的方法稱為動(dòng)態(tài)規(guī)劃方法。但是,一些與時(shí)間沒(méi)有關(guān)系的靜態(tài)規(guī)劃,如線性規(guī)劃、非線性規(guī)劃等問(wèn)題,只要人為地引進(jìn)時(shí)間因素,也可把它視為多階段決策問(wèn)題,用動(dòng)態(tài)規(guī)劃方法去處理。4.2動(dòng)態(tài)規(guī)劃基本概念1.階段動(dòng)態(tài)規(guī)劃方法求解的問(wèn)題都屬于多階段決策問(wèn)題。因此需要將所求問(wèn)題劃分為若干個(gè)階段。把描述階段的變量稱為階段變量,用k來(lái)表示。在劃分階段時(shí),要求劃分后的階段按照時(shí)間或空間特征是有序的,否則問(wèn)題就無(wú)法求解。在下圖中,階段可以劃分為5個(gè),即k=1,2,3,4,5。2.狀態(tài)每個(gè)階段所處的客觀條件稱為狀態(tài),它描述了研究問(wèn)題過(guò)程的中間狀況。狀態(tài)就是某階段的出發(fā)位置,既是該階段某支路的起點(diǎn),又是前一階段某支路的終點(diǎn)。通常一個(gè)階段有若干狀態(tài)。在下圖中,第一階段只有狀態(tài){A},第二階段有狀態(tài){B1,B2},第三階段有狀態(tài){C1,C2,C3,C4}。描述狀態(tài)的變量稱為狀態(tài)變量。通常用Sk表示第k階段的狀態(tài)變量。在圖中,S3={C1,C2,C3,C4},該集合就稱為第三階段的可達(dá)狀態(tài)集。4.2動(dòng)態(tài)規(guī)劃基本概念2.狀態(tài)這里的狀態(tài)必須滿足無(wú)后效性(馬爾可夫性),即某階段狀態(tài)一旦確定,就不受這個(gè)狀態(tài)以后決策的影響。也就是說(shuō),某狀態(tài)以后的過(guò)程不會(huì)影響以前的狀態(tài),而只與當(dāng)前狀態(tài)有關(guān)。4.2動(dòng)態(tài)規(guī)劃基本概念

4.2動(dòng)態(tài)規(guī)劃基本概念4.狀態(tài)轉(zhuǎn)移方程狀態(tài)轉(zhuǎn)移方程是確定從一個(gè)狀態(tài)轉(zhuǎn)移到另一個(gè)狀態(tài)的過(guò)程。給定第k階段的某個(gè)狀態(tài)變量sk,在選定好決策uk后,第k+1階段的狀態(tài)變量sk+1也就完全確定下來(lái)。這種由sk和uk確定sk+1的對(duì)應(yīng)關(guān)系Tk就稱為狀態(tài)轉(zhuǎn)移方程,即sk+1=Tk(sk,uk)。4.2動(dòng)態(tài)規(guī)劃基本概念5.指標(biāo)函數(shù)和最優(yōu)值函數(shù)指標(biāo)函數(shù)是用來(lái)衡量所選定策略優(yōu)劣的一種數(shù)量指標(biāo)。它是定義在全過(guò)程和所有后部子過(guò)程上確定的數(shù)量函數(shù)。常用Vk,n表示。即Vk,n=Vk,n(sk,uk,sk+1,...,sn+1),k=1,2,...,n。常見(jiàn)的指標(biāo)函數(shù)的形式如下:(1)過(guò)程和它的任一子過(guò)程的指標(biāo)是它所包含的各階段的指標(biāo)的和。(2)過(guò)程和它的任一子過(guò)程的指標(biāo)是它所包含的各階段的指標(biāo)的乘積。4.2動(dòng)態(tài)規(guī)劃基本概念5.指標(biāo)函數(shù)和最優(yōu)值函數(shù)指標(biāo)函數(shù)的最優(yōu)值,稱為最優(yōu)值函數(shù),記為fk(sk)。它表示從第k階段的狀態(tài)sk開(kāi)始到第n階段的終止?fàn)顟B(tài)的過(guò)程,采取最優(yōu)策略所得到的指標(biāo)函數(shù)值。在不同的問(wèn)題中,指標(biāo)函數(shù)的含義是不同的,它可能是距離、利潤(rùn)、成本、產(chǎn)品的產(chǎn)量或資源消耗等。4.2動(dòng)態(tài)規(guī)劃基本概念4.3動(dòng)態(tài)規(guī)劃基本思想與優(yōu)化原則動(dòng)態(tài)規(guī)劃的基本思想可以總結(jié)為:(1)將多階段決策過(guò)程劃分階段,恰當(dāng)?shù)倪x取狀態(tài)變量、決策變量及定義最優(yōu)指標(biāo)函數(shù),從而把問(wèn)題化為一組同類型的子問(wèn)題,然后逐個(gè)求解。(2)求解時(shí)從邊界條件開(kāi)始,逆(或順)過(guò)程行進(jìn)方向,逐段遞推尋優(yōu)。在每個(gè)子問(wèn)題求解時(shí),都要使用前面已求出的子問(wèn)題的最優(yōu)結(jié)果,最后一個(gè)子問(wèn)題的最優(yōu)解,就是整個(gè)問(wèn)題的最優(yōu)解。(3)動(dòng)態(tài)規(guī)劃的基本方程是遞推逐段求解的依據(jù),一般的動(dòng)態(tài)規(guī)劃的基本方程

4.3動(dòng)態(tài)規(guī)劃基本思想與優(yōu)化原則下面以例子來(lái)說(shuō)明(3)k=2,狀態(tài)變量可以取2個(gè)狀態(tài)B1、B2,它們到達(dá)終點(diǎn)E需要通過(guò)C1、C2、C3或C4,同樣需要選擇一條最短的路徑。計(jì)算如下:(4)k=1,同理可以計(jì)算出從而從起點(diǎn)A到終點(diǎn)E的最短路徑為A-B2-C4-D3-E,最短距離為13。4.3動(dòng)態(tài)規(guī)劃基本思想與優(yōu)化原則優(yōu)化原則(最優(yōu)子結(jié)構(gòu)性質(zhì)):一個(gè)最優(yōu)決策序列的任何子序列本身一定是相對(duì)于子序列的初始和結(jié)束狀態(tài)的最優(yōu)決策序列。一般來(lái)說(shuō),能用動(dòng)態(tài)規(guī)劃求解的問(wèn)題具有以下三個(gè)性質(zhì):(1)滿足最優(yōu)子結(jié)構(gòu);(2)滿足無(wú)后效性;(3)有重疊的子問(wèn)題。4.3動(dòng)態(tài)規(guī)劃基本思想與優(yōu)化原則動(dòng)態(tài)規(guī)劃和分治法的區(qū)別:

分治法拆分的子問(wèn)題只是求解過(guò)程類似,但問(wèn)題本身是相互獨(dú)立的;而動(dòng)態(tài)規(guī)劃法的子問(wèn)題之間并不獨(dú)立,尤其是相鄰階段的子問(wèn)題最優(yōu)值函數(shù)是有依賴關(guān)系的,這就是所謂的有重疊的子問(wèn)題。有重疊的子問(wèn)題并非動(dòng)態(tài)規(guī)劃法必須滿足的性質(zhì),但如果沒(méi)有這個(gè)性質(zhì),那么動(dòng)態(tài)規(guī)劃法相比其他的算法不具備優(yōu)越性。因此,在使用動(dòng)態(tài)規(guī)劃法時(shí),從邊界條件開(kāi)始將某子問(wèn)題的最優(yōu)解求出并保存起來(lái),然后利用它來(lái)求解依賴它的其他子問(wèn)題,直到求出整個(gè)問(wèn)題的解。4.3動(dòng)態(tài)規(guī)劃基本思想與優(yōu)化原則4.4.1動(dòng)態(tài)規(guī)劃的典型實(shí)例——背包問(wèn)題1.問(wèn)題描述給定n種物品和一個(gè)背包。物品i的重量是wi,其價(jià)值為vi,背包的承重量為C。應(yīng)如何選擇裝入背包的物品,使得裝入背包中的物品重量在不超過(guò)C的前提下,總價(jià)值最大?在第2章中,假定每件物品至多只能裝一個(gè),所以所裝的第i件物品xi=0或1,是一個(gè)0-1背包問(wèn)題。現(xiàn)在問(wèn)題是每件物品可以裝多個(gè),但仍然不能分割只裝一部分,此時(shí)就是一個(gè)整數(shù)規(guī)劃問(wèn)題。2.問(wèn)題分析(1)不難驗(yàn)證該背包問(wèn)題滿足優(yōu)化原則和無(wú)后效性,可以使用動(dòng)態(tài)規(guī)劃法求解。(2)按照所裝物品種類來(lái)劃分階段,規(guī)定第i階段可以選擇新裝進(jìn)第i件物品,比如第1階段只能選擇裝第1種物品,第2階段可以選擇裝前兩種物品,……,第k階段可以選擇裝前k種物品,以此下去,最后一階段可以選擇裝入全部的物品,此時(shí)的最優(yōu)解就是背包問(wèn)題的解。4.4.1動(dòng)態(tài)規(guī)劃的典型實(shí)例——背包問(wèn)題

4.4.1動(dòng)態(tài)規(guī)劃的典型實(shí)例——背包問(wèn)題3.實(shí)例計(jì)算:設(shè)v1=1,v2=3,v3=5,v4=9;w1=2,w2=3,w3=4,w4=7;C=10。構(gòu)建遞推計(jì)算的備忘錄,根據(jù)優(yōu)化函數(shù)計(jì)算過(guò)程如下:現(xiàn)在還有一個(gè)問(wèn)題是如何得到這個(gè)最大價(jià)值12,也就是如何裝物品。4.4.1動(dòng)態(tài)規(guī)劃的典型實(shí)例——背包問(wèn)題ky1234567891010112233445201334667993013556810101140135569101012

4.4.1動(dòng)態(tài)規(guī)劃的典型實(shí)例——背包問(wèn)題

4.4.1動(dòng)態(tài)規(guī)劃的典型實(shí)例——背包問(wèn)題ky1234567891010111111111201222222223012333333340123334344

4.4.2動(dòng)態(tài)規(guī)劃的典型實(shí)例——最長(zhǎng)公共子序列問(wèn)題

4.4.2動(dòng)態(tài)規(guī)劃的典型實(shí)例——最長(zhǎng)公共子序列問(wèn)題

4.4.2動(dòng)態(tài)規(guī)劃的典型實(shí)例——最長(zhǎng)公共子序列問(wèn)題

4.4.2動(dòng)態(tài)規(guī)劃的典型實(shí)例——最長(zhǎng)公共子序列問(wèn)題3.算法設(shè)計(jì)算法LCS(X,Y,m,n) else//最后一個(gè)字符不同時(shí) ifC[i-1,j]>C[i,j-1]then //滿足情況(2) C[i,j]←C[i-1,j] B[i,j]←‘↑’ endif else //滿足情況(3) C[i,j]←C[i,j-1] B[i,j]←‘←’ end end endforendfor

4.4.2動(dòng)態(tài)規(guī)劃的典型實(shí)例——最長(zhǎng)公共子序列問(wèn)題

4.4.2動(dòng)態(tài)規(guī)劃的典型實(shí)例——最長(zhǎng)公共子序列問(wèn)題

4.4.2動(dòng)態(tài)規(guī)劃的典型實(shí)例——最長(zhǎng)公共子序列問(wèn)題4.實(shí)例計(jì)算:設(shè)X=<1,3,5,4,2,6,7,8>,Y=<1,4,8,6,7,5>,其中m=8,n=6。構(gòu)建遞推計(jì)算的備忘錄,根據(jù)優(yōu)化函數(shù)計(jì)算過(guò)程如下:4.4.2動(dòng)態(tài)規(guī)劃的典型實(shí)例——最長(zhǎng)公共子序列問(wèn)題ij0123456000000001011111120111111301111124012222250122222601223337012234480123344

4.4.2動(dòng)態(tài)規(guī)劃的典型實(shí)例——最長(zhǎng)公共子序列問(wèn)題根據(jù)以上遞推得下表:下面給出求解的追蹤過(guò)程:B[8,6]→B[8,5]→B[7,5]→B[6,4]→B[5,3]→B[5,2]→B[4,2]→B[3,1]→B[2,1]→B[1,1],其中B[7,5],B[6,4],B[4,2],B[1,1]的值為↖,也就是第①種情況,此時(shí)應(yīng)該將對(duì)應(yīng)的字符加入最長(zhǎng)公共子序列中,即為<1,4,6,7>。4.4.2動(dòng)態(tài)規(guī)劃的典型實(shí)例——最長(zhǎng)公共子序列問(wèn)題ij1234561↖←←←←←2↑←←←←←3↑←←←←↖4↑↖←←←←5↑↑←←←←6↑↑←↖←←7↑↑←↑↖←8↑↑↖←↑←6.算法效率分析在算法LCS中,兩重for循環(huán)時(shí)間復(fù)雜度為,在算法TrackSolution中,最多標(biāo)記m+n次,時(shí)間復(fù)雜度為。因此,綜合起來(lái)整個(gè)算法的時(shí)間復(fù)雜度為,它從蠻力法的降至,可見(jiàn)在求解這個(gè)問(wèn)題中動(dòng)態(tài)規(guī)劃法的優(yōu)越性。

4.4.2動(dòng)態(tài)規(guī)劃的典型實(shí)例——最長(zhǎng)公共子序列問(wèn)題

4.4.3動(dòng)態(tài)規(guī)劃的典型實(shí)例——最大字段和問(wèn)題

4.4.3動(dòng)態(tài)規(guī)劃的典型實(shí)例——最大字段和問(wèn)題

4.4.3動(dòng)態(tài)規(guī)劃的典型實(shí)例——最大字段和問(wèn)題

4.4.3動(dòng)態(tài)規(guī)劃的典型實(shí)例——最大字段和問(wèn)題3.算法設(shè)計(jì)算法MaxConSubSeqSum_DP(A[],n)輸入:序列A[1..n]輸出:最大子段和maxSum,對(duì)應(yīng)的開(kāi)始和結(jié)束位置begin和endmaxSum←-INFb←

0//b是前一個(gè)最大子段和fori←

溫馨提示

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

評(píng)論

0/150

提交評(píng)論