https://www.cnblogs.com/zeng-/p/4911644.html
一、基本描述
類似于回溯法铅檩,也是一種在問題的解空間樹T上搜索問題解的算法憎夷。但在一般情況下,分支限界法與回溯法的求解目標不同柠并。回溯法的求解目標是找出T中滿足約束條件的所有解岭接,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出使某一目標函數(shù)值達到極大或極小的解臼予,即在某種意義下的最優(yōu)解鸣戴。
??? 所謂“分支”就是采用廣度優(yōu)先的策略,依次搜索E-結(jié)點的所有分支粘拾,也就是所有相鄰結(jié)點窄锅,拋棄不滿足約束條件的結(jié)點,其余結(jié)點加入活結(jié)點表缰雇。然后從表中選擇一個結(jié)點作為下一個E-結(jié)點入偷,繼續(xù)搜索。
???? 選擇下一個E-結(jié)點的方式不同械哟,則會有幾種不同的分支搜索方式疏之。
?? 1)FIFO搜索
?? 2)LIFO搜索
?? 3)優(yōu)先隊列式搜索
由于求解目標不同暇咆,導(dǎo)致分支限界法與回溯法在解空間樹T上的搜索方式也不相同锋爪。回溯法以深度優(yōu)先的方式搜索解空間樹T丙曙,而分支限界法則以廣度優(yōu)先或以最小耗費優(yōu)先的方式搜索解空間樹T。
分支限界法的搜索策略是:在擴展結(jié)點處其骄,先生成其所有的兒子 結(jié)點(分支)亏镰,然后再從當(dāng)前的活結(jié)點表中選擇下一個擴展對點。為了有效地選擇下一擴展結(jié)點拯爽,以加速搜索的進程索抓,在每一活結(jié)點處,計算一個函數(shù)值(限界)毯炮, 并根據(jù)這些已計算出的函數(shù)值逼肯,從當(dāng)前活結(jié)點表中選擇一個最有利的結(jié)點作為擴展結(jié)點,使搜索朝著解空間樹上有最優(yōu)解的分支推進否副,以便盡快地找出一個最優(yōu)解汉矿。
分支限界法常以廣度優(yōu)先或以最小耗費(最大效益)優(yōu)先的方式搜索問題的解空間樹。問題的解空間樹是表示問題解空間的一棵有序樹备禀,常見的有子集樹和排列樹洲拇。 在搜索問題的解空間樹時,分支限界法與回溯法對當(dāng)前擴展結(jié)點所使用的擴展方式不同曲尸。在分支限界法中赋续,每一個活結(jié)點只有一次機會成為擴展結(jié)點×砘迹活結(jié)點一旦成 為擴展結(jié)點纽乱,就一次性產(chǎn)生其所有兒子結(jié)點。在這些兒子結(jié)點中昆箕,那些導(dǎo)致不可行解或?qū)е路亲顑?yōu)解的兒子結(jié)點被舍棄鸦列,其余兒子結(jié)點被子加入活結(jié)點表中。此后鹏倘, 從活結(jié)點表中取下一結(jié)點成為當(dāng)前擴展結(jié)點薯嗤,并重復(fù)上述結(jié)點擴展過程。這個過程一直持續(xù)到找到所求的解或活結(jié)點表為空時為止纤泵。
??? 有一些問題其實無論用回溯法還是分支限界法都可以得到很好的解決,但是另外一些則不然捏题。也許我們需要具體一些的分析——到底何時使用分支限界而何時使用回溯呢玻褪?
回溯法和分支限界法的一些區(qū)別:
方法對解空間樹的搜索方式?存儲結(jié)點的常用數(shù)據(jù)結(jié)構(gòu)????? 結(jié)點存儲特性常用應(yīng)用
? 回溯法深度優(yōu)先搜索堆棧活結(jié)點的所有可行子結(jié)點被遍歷后才被從棧中彈出找出滿足約束條件的所有解
? 分支限界法廣度優(yōu)先或最小消耗優(yōu)先搜索隊列公荧、優(yōu)先隊列每個結(jié)點只有一次成為活結(jié)點的機會找出滿足約束條件的一個解或特定意義下的最優(yōu)解