回溯和分支限定

2021-07-11 15:09:10 字數 2526 閱讀 2334

**

1.1回溯法 

1.2分支限界法 

分支限界法是以廣度優先或以最小耗費優先的方式搜尋解空間樹,在每乙個活結點處,計算乙個函式值,並根據函式值,從當前活結點表中選擇乙個最有利的結點作為擴充套件結點,使搜尋朝著解空間上有最優解的分支推進,以便盡快地找出乙個最優解,這種方法稱為分支限界法。 

2、回溯法的基本思想 

用回溯法解問題時,應明確定義問題的解空間。問題的解空間至少應包含問題的乙個解。之後還應將解空間很好的組織起來,使得能用回溯法方便的搜尋整個解空間。在組織解空間時常用到兩種典型的解空間樹,即子集樹和排列樹。確定了解空間的組織結構後,回溯法從開始結點出發,以深度優先方式搜尋整個解空間。這個開始結點成為活結點,同時也成為當前的擴充套件結點。在當前的擴充套件結點處,搜尋向縱深方向移至乙個新結點。這個新結點就成為新的活結點,並成為當前擴充套件結點。如果在當前的擴充套件結點處不能再向縱深方向移動,則當前擴充套件結點就成為死結點。此時,應往回移動至最近的乙個活結點處,並使這個活結點成為當前的擴充套件結點。回溯法以這種工作方式遞迴的在解空間中搜尋,直至找到所要求的解或解空間中已無活結點時為止。 

3、分支限界法的基本思想 

用分支限界法解問題時,同樣也應明確定義問題的解空間。之後還應將解空間很好的組織起來。分支限界法也有兩種組織解空間的方法,即佇列式分支限界法和優先佇列式分支限界法。兩者的區別在於:佇列式分支限界法按照佇列先進先出的原則選取下乙個節點為擴充套件節點,而優先佇列式分支限界法按照優先佇列中規定的優先順序選取優先順序最高的節點成為當前擴充套件節點。分支限界法常以廣度優先或以最小耗費優先的方式搜尋問題的解空間樹。在分支限界法中,每乙個活結點只有一次機會成為擴充套件結點。活結點一旦成為擴充套件結點,就一次性產生其所有兒子結點。在這些兒子結點中,導致不可行解或導致非最優解的兒子結點被捨棄,其餘兒子結點被加入活結點表中。此後,從活結點表中取下一結點成為當前擴充套件結點,並重複上述結點擴充套件過程。這個過程一直持續到找到所需的解或活結點表為空時為止。 

4、回溯法的設計原理 

在設計乙個回溯演算法時,通常按照以下步驟進行: 

(1)針對所給問題,定義問題的解空間; 

(2)確定易於搜尋的解空間結構; 

(3)以深度優先方式搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋。 

在一般情況下用遞迴方法實現回溯法的基本框架如下: 

void backtrack (int t)  } 

其中:t表示遞迴深度,output(x)記錄或輸出得到的可行解x,f(n,t)和g(n,t)分別表示在當前擴充套件結點處未搜尋過的子樹的起始編號和終止編號,h(i)表示當前擴充套件結點處的第i個可選值,constraint(t)和bound(t)表示當前擴充套件結點的約束函式和限界函式。 

5、分支限界法的設計原理 

在設計乙個分支限界演算法時,通常按照以下步驟進行: 

(1)針對所給問題,定義問題的解空間; 

(2)確定易於搜尋的解空間結構; 

(3)以廣度優先方式搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋。 

6、回溯法與分支限界法的差異及應用 

回溯法與分支定界法都是在問題的解空間上搜尋問題解的演算法。但是兩者是有區別的: 

首先,求解目標不同: 

一般而言,回溯法的求解目標是找出解空間樹中滿足約束條件的所有解,而分支限界法的求解目標則是盡快地找出滿足約束條件的乙個解。 

其次,搜尋方法不同: 

由於求解目標不同,導致分支限界法與回溯法對解空間的搜尋方式也不同,回溯法採用深度優先方法搜尋解空間,而分支限界法一般採用用廣度優先或以最小耗費優先的方式搜尋解空間。 

再次,對擴充套件結點的擴充套件方式不同: 

在搜尋解空間書中兩者的主要區別在於它們對當前擴充套件結點所採用的擴充套件方式不同。在回溯法中,如果當前的擴充套件結點不能夠再向縱深方向移動,則當前擴充套件結點就成為死結點,此時應回溯到最近的乙個活結點處,並使此活結點成為擴充套件結點。而在分支限界法中,每乙個活結點只有一次機會成為擴充套件結點。活結點一旦成為擴充套件結點,就一次性產生其所有兒子結點。 

最後,儲存空間的要求不同: 

分支限界法的儲存空間比回溯法大得多,因此當記憶體容量有限時,回溯法成功的可能性更大。 

下面結合具體的例項來說明何種情況下比較適合採用回溯法,何種情況下比較適合採用分支限界法: 

適合採用回溯法的問題:最典型的代表如n後問題,即在n*n個格的棋盤上放置彼此不受攻擊的n個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。對於n後問題,解與解之間不存在優劣的區別。必須要搜尋到葉節點時才能確定出一組解。這種情況下,我們採用回溯法來解決時,採用排列樹的解空間結構,在最壞的情況下,其堆疊的深度不會超過n。而採用分支限界法時,由於解之間不存在優劣關係,故不可能用限界函式剪枝,需要較大的儲存空間。 

適合採用分支限界法的問題:最典型的代表如佈線問題,即印刷電路板將佈線區域劃分成n*m個方格陣列。要求確定連線方格a的中點到方格b的中點的最短佈線方案。在佈線時,電路只能沿直線或直角佈線。為了避免線路相交,已佈了線的方格做了封鎖標記,其他線路不允許穿過被封鎖的方格。此問題,如果採用回溯法來解決時,為了找到最短路徑,必須把整個區域的所有路徑逐一搜尋後才能得到最優解,這使得演算法效率較低。而如果用分支限界法來解決,則可以保證找到的解是最短的佈線方案,因為如果存在一條由a至b的更短的路徑,b結點一定會更早地被加入到活結點佇列中並得到處理。 

回溯演算法 分支限定 解最大團問題

最大團問題介紹 給定無向圖g g是乙個完全子圖 任何兩點之間都有邊 就稱為g的乙個團,問題是找乙個最大團 頂點 數最多的團 先實現只從中找乙個最大團,題目也可能要求找所有的最大團 最大團問題 include using namespace std const int n 10 int n 原圖頂點數...

回溯與分支定界

假定演算法已經找到部分解為 x1,x2,xj 然後再考慮向量v x1,x2,xj xj 1 有下面的情況 解向量中每個xi都屬於乙個有限的線序集xi 1.如果v表示問題的最後解,演算法記錄下它作為乙個解,在僅希望獲得乙個解時終止,或者繼續去找出其他解。2.向前步驟 如果v表示乙個部分解,演算法通過選...

回溯與分支限界

代價函式 當前取得的價值 後面可以取得的最大價值 如果這個價值比之前得到的路徑的價值的最大值都小的話,那麼這個分支不再需要繼續延伸 分支策略 分支較少的結點先展開 預計可以得到較多解的結點先展開 對稱性 比如n皇后問題,可以又中線縱軸分成等價的兩部分的搜尋空間 裝箱問題中,可以以箱子的角度來回溯,也...