




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第9章搜索算法9.1回溯法9.2分支界限法
9.1回溯法
9.1.1回溯法的算法框架
1.問題的解空間
應(yīng)用回溯法求解問題時(shí),首先應(yīng)明確定義問題的解空間,該解空間應(yīng)至少包含問題的一個(gè)最優(yōu)解。例如,對于有n種物品的0-1背包問題,其解空間由長度為n的0-1向量組成,該解空間包含了對變量的所有可能的0-1賦值。當(dāng)n=3時(shí),其解空間是
{(0,0,0),(0,0,1),(0,1,0),(0,1,1),(1,0,0),(1,0,1),
(1,1,0),(1,1,1)}在定義了問題的解空間后,還需要將解空間有效地組織起來,使得回溯法能方便地搜索整個(gè)解空間,通常將解空間組織成樹或圖的形式。例如,對于n=3的0-1背包問題,其解空間可以用一棵完全二叉樹表示,如圖9-1所示。從樹根到葉子結(jié)點(diǎn)的任意一條路徑可表示解空間中的一個(gè)元素,如從根結(jié)點(diǎn)A到結(jié)點(diǎn)J的路徑對應(yīng)于解空間中的一個(gè)元素(1,0,1)。圖9-10-1背包問題的解空間樹
2.回溯法的基本思想
確定了問題的解空間結(jié)構(gòu)后,回溯法將從開始結(jié)點(diǎn)(根結(jié)點(diǎn))出發(fā),以深度優(yōu)先的方式搜索整個(gè)解空間。開始結(jié)點(diǎn)成為活結(jié)點(diǎn),同時(shí)也成為擴(kuò)展結(jié)點(diǎn)。在當(dāng)前的擴(kuò)展結(jié)點(diǎn)處,向縱深方向搜索并移至一個(gè)新結(jié)點(diǎn),這個(gè)新結(jié)點(diǎn)就成為一個(gè)新的活結(jié)點(diǎn),并成為當(dāng)前的擴(kuò)展結(jié)點(diǎn)。如果在當(dāng)前的擴(kuò)展結(jié)點(diǎn)處不能再向縱深方向移動(dòng),則當(dāng)前的擴(kuò)展結(jié)點(diǎn)就成為死結(jié)點(diǎn)。此時(shí)應(yīng)往回移動(dòng)(回溯)至最近的一個(gè)活結(jié)點(diǎn)處,并使其成為當(dāng)前的擴(kuò)展結(jié)點(diǎn)?;厮莘ㄒ陨鲜龉ぷ鞣绞竭f歸地在解空間中搜索,直至找到所要求的解或解空間中已無活結(jié)點(diǎn)時(shí)為止。圖9-2四個(gè)頂點(diǎn)的無向帶權(quán)圖
圖9-3旅行售貨員問題的解空間樹綜上所述,運(yùn)用回溯法解題的關(guān)鍵要素有以下三點(diǎn):
(1)針對給定的問題,定義問題的解空間;
(2)確定易于搜索的解空間結(jié)構(gòu);
(3)以深度優(yōu)先方式搜索解空間,并且在搜索過程中用剪枝函數(shù)避免無效搜索。
3.遞歸和迭代回溯
一般情況下可以用遞歸函數(shù)實(shí)現(xiàn)回溯法,遞歸函數(shù)模板如下:采用迭代的方式也可實(shí)現(xiàn)回溯算法,迭代回溯算法的模板如下:
4.子集樹與排列樹
圖9-1和圖9-3中的兩棵解空間樹是回溯法解題時(shí)常用的兩類典型解空間樹。
當(dāng)給定的問題是從n個(gè)元素的集合S中找出滿足某種性質(zhì)的子集時(shí),相應(yīng)的解空間樹稱為子集樹。例如,n個(gè)物品的0-1背包問題所對應(yīng)的解空間樹是一棵子集樹,該類樹通常有2n個(gè)葉子結(jié)點(diǎn),總結(jié)點(diǎn)數(shù)為2n+1-1,遍歷子集樹的任何算法需要的計(jì)算時(shí)間復(fù)雜度均為O(2n)。9.1.2最大團(tuán)問題
1.問題描述
給定一個(gè)無向圖G=(V,E),如果U
V,且對任意u,v∈U有(u,v)∈E,則稱U是G的一個(gè)完全子圖。G的完全子圖U是G的一個(gè)團(tuán)當(dāng)且僅當(dāng)U不包含在G的更大的完全子圖中;G的最大團(tuán)是指G中所含頂點(diǎn)數(shù)最多的團(tuán)。(注:完全圖是全連通圖)。
在圖9-4中,子集?{1,2}?是G的一個(gè)大小為2的完全子圖,它不是一個(gè)團(tuán),原因是它包含于G的更大完全子圖?{1,2,5}?中;而?{1,2,5}?是G的一個(gè)最大團(tuán)。同理,完全子圖?
{1,4,5}和?{2,3,5}?也是G的最大團(tuán)。圖9-4無向圖G及其補(bǔ)圖G'
2.算法設(shè)計(jì)
無向圖G的最大團(tuán)和最大獨(dú)立集問題都可以用回溯法在時(shí)間復(fù)雜度為O(n2n)以內(nèi)解決,且都可以看做圖G的頂點(diǎn)集
V的子集選取問題,因此可以用子集樹表示問題的解空間。9.1.3圖的m著色問題
1.問題描述
給定一個(gè)無向連通圖G和m種不同的顏色,用這些顏色為圖G的各頂點(diǎn)著色,每個(gè)頂點(diǎn)染一種顏色,那么是否存在一種著色方案使得相鄰頂點(diǎn)不重色。若一個(gè)圖至少需要m種顏色才能使圖中任何相鄰頂點(diǎn)不重色,則m稱為該圖的色數(shù)。求一個(gè)圖的色數(shù)m的問題稱為圖的m可著色優(yōu)化問題。
2.算法設(shè)計(jì)
對于任意一個(gè)圖G=(V,E)和m種顏色,如果這個(gè)圖不是m可著色的,則給出不能著色;如果這個(gè)圖是m可著色的,則找出所有不同的著色方案。圖9-5n=3和m=3時(shí)的解空間樹示意圖9.1.4旅行售貨員問題
設(shè)某旅行售貨員要到多個(gè)城市推銷商品,已知各城市之間的路程(旅費(fèi)),現(xiàn)在為其設(shè)計(jì)一條售貨路線,要求從某駐地出發(fā)經(jīng)過每個(gè)城市一遍,最后又回到駐地,且使總的路程(旅費(fèi))最小。
9.2分?支?界?限?法
9.2.1分支界限法的基本思想
分支界限法以廣度優(yōu)先或最小耗費(fèi)(最大效益)優(yōu)先的方式搜索問題的解空間樹。常見的解空間樹有子集樹和排列樹。從活結(jié)點(diǎn)表中選擇下一個(gè)擴(kuò)展結(jié)點(diǎn)作為當(dāng)前擴(kuò)展結(jié)點(diǎn),常用的方法有兩種:
(1)一般隊(duì)列方法。一般隊(duì)列方法是將活結(jié)點(diǎn)表組織成一般隊(duì)列,并按隊(duì)列中結(jié)點(diǎn)先進(jìn)先出的原則選取下一個(gè)結(jié)點(diǎn)作為當(dāng)前擴(kuò)展結(jié)點(diǎn)。
(2)優(yōu)先級隊(duì)列方法。優(yōu)先級隊(duì)列方法是將活結(jié)點(diǎn)表組織成一個(gè)優(yōu)先級隊(duì)列,并按優(yōu)先級隊(duì)列中規(guī)定的結(jié)點(diǎn)優(yōu)先級來選取優(yōu)先級最高的下一個(gè)結(jié)點(diǎn)作為當(dāng)前擴(kuò)展結(jié)點(diǎn)。9.2.2裝載問題
設(shè)有n個(gè)集裝箱,計(jì)劃將其裝上兩艘載重量分別為c1和c2的輪船,其中集裝箱i的重量為wi,且wi≤c1+c2。那么是否有一個(gè)合理的裝載方案,可將n個(gè)集裝箱裝上這兩艘輪船。
當(dāng)wi=c1+c2時(shí),裝載問題就等價(jià)于子集和問題;當(dāng)c1=c2,且wi=2c1時(shí),裝載問題就等價(jià)于劃分問題。如果給定的裝載問題有解,則采用下面的策略可以得到一個(gè)最優(yōu)裝載方案:
(1)將第一艘輪船盡可能地裝滿;
(2)將剩余的集裝箱裝到第二艘輪船上。
第一艘輪船盡可能地裝滿等價(jià)于選取全體集裝箱的一個(gè)子集,使該子集中的集裝箱重量之和最接近c(diǎn)1。由此可知,裝載問題等價(jià)于以下特殊的0-1背包問題:
1.一般隊(duì)列分支界限法
求解裝載問題的一般隊(duì)列分支界限法只求出所要求的最優(yōu)值,最優(yōu)解將在后續(xù)內(nèi)容介紹。
2.算法改進(jìn)
設(shè)bestw是當(dāng)前最優(yōu)解,Ew是當(dāng)前擴(kuò)展結(jié)點(diǎn)對應(yīng)的重量,r是剩余集裝箱的重量。若Ew+r≤bestw,則可以將擴(kuò)展結(jié)點(diǎn)所對應(yīng)的子樹剪去。
函數(shù)MaxLoading將bestw初始化為0,直至搜索到葉子結(jié)點(diǎn)時(shí)才更新bestw,因此在算法搜索到第一個(gè)葉子結(jié)點(diǎn)之前bestw=0,且r>0,故Ew+r>bestw總成立,即此時(shí)右子樹測試不起作用。
3.構(gòu)造最優(yōu)解
為了在算法結(jié)束后能方便地構(gòu)造出與最優(yōu)值相對應(yīng)的最優(yōu)解,算法必須記錄相應(yīng)子集樹中從活結(jié)點(diǎn)到根的路徑,為此,必須設(shè)置指向其雙親結(jié)點(diǎn)的指針,并設(shè)置左右孩子標(biāo)志。9.2.3布線問題
印刷電路板將布線區(qū)域劃分成n?m個(gè)方格陣列,如圖
9-6(a)所示。電路布線問題要求確定連接方格a的中點(diǎn)和方格b的中點(diǎn)的最短布線方案。在布線時(shí),電路只能沿直線或直角布線,并且要求所布線路不能相交,如圖9-6(b)所示。圖9-6印制電路板布線方格陣列在實(shí)現(xiàn)上述算法中,首先考慮記錄電路板上某方格的位置:用結(jié)構(gòu)體表示,結(jié)構(gòu)體中有row和col兩個(gè)成員。其次需要表示布線前進(jìn)的方向:布線可沿右、下、左、上四個(gè)方向移動(dòng),分別用0、1、2、3表示。再用offset[i].row和offset[i].col(i=0,1,2,3)表示沿著四個(gè)方向移動(dòng)一步時(shí)對于當(dāng)前方格的相對位移,如表9-1所示。在一個(gè)7×7方格陣列中布線的例子如圖9-7所示,其中,起始位置a=(3,2);目標(biāo)位置b=(4,6);陰影方格表示被封鎖的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 共享汽車托管合同范本
- 大型風(fēng)電葉片疲勞測試的雙激振器同步控制方法
- 供應(yīng)鏈視角下互聯(lián)網(wǎng)平臺跨界金融化信用風(fēng)險(xiǎn)傳染機(jī)制研究
- 農(nóng)村房子交易合同范例
- 沖擊碾壓租賃合同范例
- 教育教學(xué)論文-中學(xué)物理素質(zhì)教育改革初探
- 我國上市汽車公司供應(yīng)鏈韌性評價(jià)及提升路徑研究
- 農(nóng)村三產(chǎn)融合發(fā)展視野下的共同富裕研究
- 個(gè)人委托理財(cái)合同范本
- 農(nóng)村院子購買合同范例
- 2025年春新人教版生物七年級下冊課件 第三單元 植物的生活 第二章 植物體內(nèi)的物質(zhì)與能量變化 第一節(jié) 水的利用與散失
- 獸醫(yī)檢驗(yàn)測試題(附參考答案)
- 《臍橙采摘機(jī)器人結(jié)構(gòu)設(shè)計(jì)》13000字(論文)
- 2025年保險(xiǎn)公司工作計(jì)劃
- 《情緒ABC理論》課件
- 蜜柚種植基地新建項(xiàng)目可行性研究報(bào)告
- 霧化吸入療法合理用藥專家共識(2024版)解讀
- 電工(高級技師)理論知識試題庫+參考答案
- (2024)江西省公務(wù)員考試《行測》真題卷及答案解析
- CSB事故案例專欄丨BP德克薩斯州煉油廠火災(zāi)爆炸事故
- 社會管理和公共服務(wù)標(biāo)準(zhǔn)化試點(diǎn)實(shí)施細(xì)則范文(2篇)
評論
0/150
提交評論