演算法四 回溯和分支界定

2021-09-06 13:30:47 字數 1110 閱讀 5688

演算法四:回溯和分支界定

回溯:

尋找問題的解的一種可靠的方法是首先列出所有候選解,然後依次檢查每乙個,在檢查完:

所有或部分候選解後,即可找到所需要的解。理論上,當候選解數量有限並且通過檢查所有或

部分候選解能夠得到所需解時,上述方法是可行的。不過,在實際應用中,很少使用這種方法,

因為候選解的數量通常都非常大(比如指數級,甚至是大數階乘),即便採用最快的計算機也

只能解決規模很小的問題。

對候選解進行系統檢查的方法有多種,其中回溯和分枝定界法是比較常用的兩種方法。按

照這兩種方法對候選解進行系統檢查通常會使問題的求解時間大大減少(無論對於最壞情形

還是對於一般情形)。事實上,這些方法可以使我們避免對很大的候選解集合進行檢查,同時

能夠保證演算法執行結束時可以找到所需要的解。因此,這些方法通常能夠用來求解規模很大

的問題。

本章集中闡述回溯方法,這種方法被用來設計貨箱裝船、揹包、最大完備子圖、旅行商和

電路板排列問題的求解演算法

演算法思想

分枝定界(branch and bound)是另一種系統地搜尋解空間的方法,它與回溯法的主要區

別在於對e-節點的擴充方式。每個活節點有且僅有一次機會變成e-節點。當乙個節點變為e-

節點時,則生成從該節點移動一步即可到達的所有新節點。在生成的節點中,拋棄那些不可

能匯出(最優)可行解的節點,其餘節點加入活節點表,然後從表中選擇乙個節點作為下一

個e-節點。從活節點表中取出所選擇的節點並進行擴充,直到找到解或活動表為空,擴充過

程才結束。

有兩種常用的方法可用來選擇下乙個e-節點(雖然也可能存在其他的方法):

1) 先進先出(f i f o) 即從活節點表中取出節點的順序與加入節點的順序相同,因此活節

點表的性質與佇列相同。

2) 最小耗費或最大收益法在這種模式中,每個節點都有乙個對應的耗費或收益。如果查

找乙個具有最小耗費的解,則活節點表可用最小堆來建立,下乙個e-節點就是具有最小耗費

的活節點;如果希望搜尋乙個具有最大收益的解,則可用最大堆來構造活節點表,下乙個e-

節點是具有最大收益的活節點。

39 回溯演算法

var res 全域性遍歷,下標表示行,值表示queen所在列 cal8queens 0 遞迴函式,求每行的queen function cal8queens row for let col 0 col 8 col 判斷棋子放在 row,col 位置,是否正確 function isok row,c...

演算法8 回溯

理論基礎 回溯法是一種組織搜尋的一般技術,有 通用的解題法 之稱,用它可以系統的搜尋乙個問題的所有解或任一解。有許多問題,當需要找出它的解集或者要求回答什麼解是滿足某些約束條件的最佳解時,往往要使用回溯法。可以系統地搜尋乙個問題的所有解或任意解,既有系統性又有跳躍性。回溯法的基本做法是搜尋,或是一種...

五大演算法四 回溯演算法

回溯演算法實際上乙個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就 回溯 返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,...