五大常用算法:分支限界法

一、基本描述

類似於回溯法,也是一種在問題的解空間樹 T 上搜索問題解的算法,但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是則是找出滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出使某一目標函數值達到極大或極小的解,即在某種意義下的最優解。

- 分支搜索算法

所謂“分支”就是採用廣度優先的策略,一次搜索E-節點的所有分支,也就是所有相鄰節點,拋棄不滿足約束條件的節點,其餘節點加入活節點表。然後從表中選擇一個節點作爲下一個E-節點,繼續搜索。

選擇下一個E-節點的方式不同,則會有幾種不同的分支搜索方式。
1. FIFO 搜索
2. LIFO 搜索
3. 優先隊列式搜索

二、分支限界法的一般過程

由於求解目標不同,導致分支限界法與回溯法在解空間樹 T 上的搜索方式也不相同。回溯法以深度優先的方式搜索解空間樹T,而分支限界法則以廣度優先或以最小耗費優先的方式搜索解空間樹T。

分支限界法的搜索策略是:在擴展節點處,先生成其所有的兒子節點(分支),然後再從當前的活節點表中選擇下一個擴展節點,爲了有效地選擇下一擴展節點,以加速搜索的進程,在每一活節點處,計算一個函數值(限界),並根據這些已計算出的函數值,從當前活節點表中選擇一個最有利的的節點作爲擴展節點,使搜索朝着解空間樹上最優解的分支推進,以便儘快地找出一個最優解。

分支限界法常以廣度優先或以最小耗費(最大效益)優先的方式搜索問題的解空間樹。問題的解空間樹是表示問題解空間的一棵有序樹,常見的有子集樹和排列樹,在搜索問題的解空間樹時,分支限界法與回溯法對當前擴展節點所使用的擴展方式不同。在分支限界法中,每一個活節點只有一次機會稱爲擴展節點。活節點一旦成爲擴展節點,就一次性產生其所有兒子節點。在這些兒子節點中,那些導致不可行解或導致非最優解的兒子節點被捨棄,其餘兒子節點被加入活節點表中。此後,從活節點表中取下一節點成爲當前擴展節點,並重覆上述節點擴展過程。這個過程一直持續到找到所有求的解或活節點表爲空時爲止。

三、回溯法和分支限界法的一些區別

有一些問題其實無論用回溯法還是分支限界法都可以得到很好的解決,但是另外一些則不然。也許我們需要具體一些的分析——到底何時使用分支限界而何時使用回溯法呢?

回溯法和分支限界法的一些區別:

  1. 方法對解空間樹的搜索方式
  2. 儲存節點的常用數據結構
  3. 節點儲存特性常用應用
  4. 回溯法深度優先搜索堆棧活節點的所有可行子節點被遍歷後才被從棧中彈出,找出滿足約束條件的所有解
  5. 分支限界法廣度優先或最小消耗優先搜索隊列 ,優先隊列每個節點只有一次成爲活節點的機會找出滿足約束條件的一個解或特定意義下的最優解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章