一、優(yōu)先隊(duì)列式分支限界法的通俗的解釋
分支界限法,就是用了某種方法來選擇較好的情況,略過不必要的情況,達(dá)到降低復(fù)雜度的目的。其實(shí)就是優(yōu)化(也稱剪枝)。用優(yōu)先隊(duì)列實(shí)現(xiàn)dijkstra就是問題中的例子。建議上oj手寫一下,動手做過更能理解。
所謂“分支”就是采用廣度優(yōu)先(BFS)的策略,依次搜索E-結(jié)點(diǎn)的所有分支,也就是所有相鄰的結(jié)點(diǎn),拋棄不滿足約束的結(jié)點(diǎn),其余節(jié)點(diǎn)加入活結(jié)點(diǎn)表。然后從表中選擇一個結(jié)點(diǎn)作為下一個E-結(jié)點(diǎn),繼續(xù)搜索。
選擇下一個E-結(jié)點(diǎn)的方式不同,則會有幾種不同的分支搜索方式:1.FIFO搜索;2.LIFO搜索;優(yōu)先隊(duì)列式搜索。
分支界限法的一般過程
由于求解目標(biāo)不同,導(dǎo)致分支界限法與回溯法在解空間樹T上的搜索方式也不相同。回溯法以深度優(yōu)先的方式搜索解空間樹T,而分支界限法則以廣度優(yōu)先或以最小耗費(fèi)優(yōu)先的方式搜索解空間樹T:
搜索策略
在擴(kuò)展結(jié)點(diǎn)處,先生成所有的子結(jié)點(diǎn)(分支),然后從當(dāng)前的活結(jié)點(diǎn)表中選擇下一個擴(kuò)展結(jié)點(diǎn)。為了有效的選擇下一個擴(kuò)展結(jié)點(diǎn),以加速搜索的進(jìn)程,在每一活結(jié)點(diǎn)處,計算一個函數(shù)值(限界),并根據(jù)這些已經(jīng)計算出的函數(shù)值,從當(dāng)前活結(jié)點(diǎn)表中選擇一個最有利的結(jié)點(diǎn)作為擴(kuò)展結(jié)點(diǎn),使搜索朝著解空間樹上有優(yōu)異解的分支推進(jìn),以便盡快找出一個優(yōu)異解。
分支界限法以廣度優(yōu)先或以最小耗費(fèi)(最大效益)優(yōu)先的方式搜索問題的解空間樹。問題的解空間樹是表示問題解空間的一棵有序樹,常見的有子集樹和排列樹。在搜索問題的解空間樹時,分支限界法與回溯法對當(dāng)前擴(kuò)展結(jié)點(diǎn)所使用的擴(kuò)展方式不同。在分支限界法中,每一個活結(jié)點(diǎn)只有一次機(jī)會稱為擴(kuò)展結(jié)點(diǎn)?;罱Y(jié)點(diǎn)一旦成為擴(kuò)展結(jié)點(diǎn),就一次性產(chǎn)生其所有子結(jié)點(diǎn)。在這些子結(jié)點(diǎn)中,那些導(dǎo)致不可行解或?qū)е路莾?yōu)異解的子結(jié)點(diǎn)被舍棄,其余子結(jié)點(diǎn)被加入活結(jié)點(diǎn)中。此后,從活結(jié)點(diǎn)表中取下一結(jié)點(diǎn)成為當(dāng)前擴(kuò)展結(jié)點(diǎn),并重復(fù)上述結(jié)點(diǎn)擴(kuò)展過程。這個過程一直持續(xù)到找到所求的解或活結(jié)點(diǎn)表為空時為止。
對某個節(jié)點(diǎn)進(jìn)行搜索時,先估算出目標(biāo)的解,再確定是否向下搜索(選擇最小損耗的結(jié)點(diǎn)進(jìn)行搜索)在分支結(jié)點(diǎn)上,預(yù)先分別估算沿著它的各個兒子結(jié)點(diǎn)向下搜索的路徑中,目標(biāo)函數(shù)可能取得的界,然后把它的這些兒子結(jié)點(diǎn)和它們可能取得的界保存在一張結(jié)點(diǎn)表中,再從表中選擇界最小或最大的結(jié)點(diǎn)向下搜索。一般采用優(yōu)先隊(duì)列維護(hù)這張表。
延伸閱讀:
二、回溯法和分支界限法的區(qū)別
回溯法
1)(求解目標(biāo))回溯法的求解目標(biāo)是找出解空間中滿足約束條件的一個解或所有解。
2)(搜索方式深度優(yōu)先)回溯法會搜索整個解空間,當(dāng)不滿條件時,丟棄,繼續(xù)搜索下一個兒子結(jié)點(diǎn),如果所有兒子結(jié)點(diǎn)都不滿足,向上回溯到它的父節(jié)點(diǎn)。
分支限界法
1)(求解目標(biāo))分支限界法的目標(biāo)一般是在滿足約束條件的解中找出在某種意義下的優(yōu)異解,也有找出滿足約束條件的一個解。
2)(搜索方式)分支限界法以廣度優(yōu)先或以最小損耗優(yōu)先的方式搜索解空間。
3)常見的兩種分支界限法
a.隊(duì)列式(FIFO)分支界限法(廣度優(yōu)先):按照隊(duì)列先進(jìn)先出原則選取下一個結(jié)點(diǎn)為擴(kuò)展結(jié)點(diǎn)。
b.優(yōu)先隊(duì)列式分支限界法(最小損耗優(yōu)先):按照優(yōu)先隊(duì)列規(guī)定的優(yōu)先級選取優(yōu)先級較高的結(jié)點(diǎn)成為當(dāng)前擴(kuò)展結(jié)點(diǎn)。