資料結構和演算法 五大常用演算法 分支限界法

2022-07-09 18:21:07 字數 4236 閱讀 9953

參考:

分支限界法

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

選擇下乙個e-結點的方式不同,則會有幾種不同的分支搜尋方式。

1)fifo搜尋

2)lifo搜尋

3)優先佇列式搜尋

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

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

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

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

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

方法對解空間樹的搜尋方式       儲存結點的常用資料結構      結點儲存特性常用應用

回溯法深度優先搜尋堆疊活結點的所有可行子結點被遍歷後才被從棧中彈出找出滿足約束條件的所有解

分支限界法廣度優先或最小消耗優先搜尋佇列、優先佇列每個結點只有一次成為活結點的機會找出滿足約束條件的乙個解或特定意義下的最優解

1. 分支限界法 – 廣度優先搜素                                         

1. 簡單概述

分支限界法思路的簡單描述是:把問題的解空間轉化成了圖或者樹的結構表示,然後使用廣度優先搜尋策略進行遍歷,遍歷的過程中記錄和尋找所有可行解或者最優解。

基本思想類同於:

圖的廣度優先遍歷

二叉樹的層序遍歷

也就是:對於當前節點,一次性擴充套件其所有可行的子節點。

對照圖的廣度優先遍歷就很容易理解。

2. 詳細描述

詳細的描述則為:

1) 首先將問題的解空間轉化成圖或者樹的結構表示,然後維護一張活節點表。

2) 初始時,將根節點加入活節點表

3) 當活節點表不空,從活節點表中取出乙個節點,成為當前擴充套件節點。如果表為空,跳轉至步驟6結束。

4) 判斷當前擴充套件節點是否得到了乙個可行解或更優解,如果是,記錄或更新問題的解。

5)將當前擴充套件節點的所有可行子節點一次性全部生成,加入到活節點表中。跳轉到步驟3

6)演算法結束

活節點表的資料結構可以是fifo佇列或者優先權佇列。

3. 回溯法應用

分支限界法通常用於求解問題的乙個可行解或者最優解。

2. 經典問題                                    

(1)裝載問題

(2)0-1揹包問題

(3)旅行售貨員問題

(4)八皇后問題

(5)迷宮問題

(6)圖的m著色問題

分支限界法和回溯法很相似,只是在空間樹的搜尋方式上不同(乙個深度優化,乙個廣度優先)。

分支限界法----旅行售貨員問題

分支限界法

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

選擇下乙個e-結點的方式不同,則會有幾種不同的分支搜尋方式。

1)fifo搜尋

2)lifo搜尋

3)優先佇列式搜尋

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

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

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

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

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

方法對解空間樹的搜尋方式       儲存結點的常用資料結構      結點儲存特性常用應用

回溯法深度優先搜尋堆疊活結點的所有可行子結點被遍歷後才被從棧中彈出找出滿足約束條件的所有解

分支限界法廣度優先或最小消耗優先搜尋佇列、優先佇列每個結點只有一次成為活結點的機會找出滿足約束條件的乙個解或特定意義下的最優解

1. 分支限界法 – 廣度優先搜素                                         

1. 簡單概述

分支限界法思路的簡單描述是:把問題的解空間轉化成了圖或者樹的結構表示,然後使用廣度優先搜尋策略進行遍歷,遍歷的過程中記錄和尋找所有可行解或者最優解。

基本思想類同於:

圖的廣度優先遍歷

二叉樹的層序遍歷

也就是:對於當前節點,一次性擴充套件其所有可行的子節點。

對照圖的廣度優先遍歷就很容易理解。

2. 詳細描述

詳細的描述則為:

1) 首先將問題的解空間轉化成圖或者樹的結構表示,然後維護一張活節點表。

2) 初始時,將根節點加入活節點表

3) 當活節點表不空,從活節點表中取出乙個節點,成為當前擴充套件節點。如果表為空,跳轉至步驟6結束。

4) 判斷當前擴充套件節點是否得到了乙個可行解或更優解,如果是,記錄或更新問題的解。

5)將當前擴充套件節點的所有可行子節點一次性全部生成,加入到活節點表中。跳轉到步驟3

6)演算法結束

活節點表的資料結構可以是fifo佇列或者優先權佇列。

3. 回溯法應用

分支限界法通常用於求解問題的乙個可行解或者最優解。

2. 經典問題                                    

(1)裝載問題

(2)0-1揹包問題

(3)旅行售貨員問題

(4)八皇后問題

(5)迷宮問題

(6)圖的m著色問題

分支限界法和回溯法很相似,只是在空間樹的搜尋方式上不同(乙個深度優化,乙個廣度優先)。

分支限界法----旅行售貨員問題

五大常用演算法

主要是演算法演算法的複雜度 1.分治法 話說遞迴與hanoi塔 二分法求方程近似解 用c 實現合併排序 求最大值和最小值的分治演算法 2.動態規劃法 動態規劃求0 1揹包問題 最長公共子串問題的實現 用動態規劃實現飛彈攔截 最大化投資回報問題的實現 3.貪心演算法 最小生成樹之prim演算法 最小生...

演算法 五大演算法之分支限界法

分枝界限法是由三棲學者查理德 卡普 richard m.karp 在20世紀60年代發明,成功求解含有65個城市的旅行商問題,創當時的記錄。分枝界限法 把問題的可行解展開如樹的分枝,再經由各個分枝中尋找最佳解。1.基本概念 描述 採用廣度優先產生狀態空間樹的結點,並使用剪枝函式的方法稱為分枝限界法。...

五大常用演算法總結

據說有人歸納了計算機的五大常用演算法,它們是貪婪演算法,動態規劃演算法,分治演算法,回溯演算法以及分支限界演算法。雖然不知道為何要將這五個演算法歸為最常用的演算法,但是毫無疑問,這五個演算法是有很多應用場景的,最優化問題大多可以利用這些演算法解決。演算法的本質就是解決問題。當資料量比較小時,其實根本...