五大常用演算法之五:分支限界法
一、基本描述
類似於回溯法,也是一種在問題的解空間樹T上搜尋問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是找出T中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出使某一目標函式值達到極大或極小的解,即在某種意義下的最優解。
(1)分支搜尋演算法
所謂“分支”就是採用廣度優先的策略,依次搜尋E-結點的所有分支,也就是所有相鄰結點,拋棄不滿足約束條件的結點,其餘結點加入活結點表。然後從表中選擇一個結點作為下一個E-結點,繼續搜尋。
選擇下一個E-結點的方式不同,則會有幾種不同的分支搜尋方式。
1)FIFO搜尋
2)LIFO搜尋
3)優先佇列式搜尋
(2)分支限界搜尋演算法
二、分支限界法的一般過程
由於求解目標不同,導致分支限界法與回溯法在解空間樹T上的搜尋方式也不相同。回溯法以深度優先的方式搜尋解空間樹T,而分支限界法則以廣度優先或以最小耗費優先的方式搜尋解空間樹T。
分支限界法的搜尋策略是:在擴充套件結點處,先生成其所有的兒子結點(分支),然後再從當前的活結點表中選擇下一個擴充套件對點。為了有效地選擇下一擴充套件結點,以加速搜尋的程式,在每一活結點處,計算一個函式值(限界),並根據這些已計算出的函式值,從當前活結點表中選擇一個最有利的結點作為擴充套件結點,使搜尋朝著解空間樹上有最優解的分支推進,以便儘快地找出一個最優解。
分支限界法常以廣度優先或以最小耗費(最大效益)優先的方式搜尋問題的解空間樹。問題的解空間樹是表示問題解空間的一棵有序樹,常見的有子集樹和排列樹。在搜尋問題的解空間樹時,分支限界法與回溯法對當前擴充套件結點所使用的擴充套件方式不同。在分支限界法中,每一個活結點只有一次機會成為擴充套件結點。活結點一旦成為擴充套件結點,就一次性產生其所有兒子結點。在這些兒子結點中,那些導致不可行解或導致非最優解的兒子結點被捨棄,其餘兒子結點被子加入活結點表中。此後,從活結點表中取下一結點成為當前擴充套件結點,並重覆上述結點擴充套件過程。這個過程一直持續到找到所求的解或活結點表為空時為止。
三、回溯法和分支限界法的一些區別
有一些問題其實無論用回溯法還是分支限界法都可以得到很好的解決,但是另外一些則不然。也許我們需要具體一些的分析——到底何時使用分支限界而何時使用回溯呢?
回溯法和分支限界法的一些區別:
方法對解空間樹的搜尋方式 儲存結點的常用資料結構 結點儲存特性常用應用
回溯法深度優先搜尋堆疊活結點的所有可行子結點被遍歷後才被從棧中彈出找出滿足約束條件的所有解
分支限界法廣度優先或最小消耗優先搜尋佇列、優先佇列每個結點只有一次成為活結點的機會找出滿足約束條件的一個解或特定意義下的最優解
相關文章
- 五大常用演算法總結演算法
- 五大常用演算法:一文搞懂分治演算法演算法
- 【五大常用演算法】一文搞懂分治演算法演算法
- 常用演算法之回溯法演算法
- 【演算法】分支界限法演算法
- 分享Go語言的常用的五大IDEGoIDE
- python常用的資料庫有哪些?五大類!Python資料庫
- Android之五大應用開發框架Android框架
- python 程式設計師必備的五大常用庫Python程式設計師
- 每日演算法第103期:演算法實驗5(三種方法解決01揹包問題:動態規劃,回溯,分支限界)演算法動態規劃
- 五大庫
- FL Studio新手教程:FL Studio五大常用按鈕介紹
- 簡單介紹一下Java常用的五大框架!Java框架
- Java專案中常用的的五大設計原則Java
- Redis 五大資料型別之 String(字串)Redis大資料資料型別字串
- Redis五大資料型別之 List(列表)Redis大資料資料型別
- Redis五大資料型別之 Set(集合)Redis大資料資料型別
- 淺談Linux的五大便捷之處Linux
- 五大生存法則,贏在人工智慧時代人工智慧
- Beano for Brands:阿爾法一代五大趨勢Bean
- 普歌-雲言-Vue的五大基本語法使用Vue
- 八、android當中五大布局控制元件。其它常用佈局Android控制元件
- Redis五大資料型別之 Hash(雜湊)Redis大資料資料型別
- Redis五大資料型別之 Zset(有序集合)Redis大資料資料型別
- python實現常用五種排序演算法Python排序演算法
- 分支定界演算法演算法
- 常用演算法之貪心演算法演算法
- git 遠端分支常用操作Git
- hadoop常用四大模組及五大程式節點介紹Hadoop
- Python程式設計師常用的五大工具,你知道幾個?Python程式設計師
- Think2018:IBM釋出未來五年五大科技預測之黑客IBM黑客
- 常用排序演算法之桶排序排序演算法
- [git]git分支常用命令Git
- redis的五大資料型別和相關語法的使用Redis大資料資料型別
- Hibernate的五大核心介面
- PHP五大執行模式PHP模式
- 雲原生五大技術
- 未來五年五大商業趨勢
- Quartz.Net系列(六):Quartz五大構件Trigger之TriggerBuilder解析quartzUI