演算法分析與設計C 第六章 回溯演算法

2021-09-28 21:39:31 字數 1145 閱讀 3252

深度優先的方式系統地搜尋問題的解的方法稱為回溯法。

可以系統地搜尋乙個問題的所有解任意解

有許多問題,當需要找出它的解集或者要求回答什麼解是滿足某些約束條件的最佳解時,往往要使用回溯法。

回溯法的基本做法是搜尋,或是一種組織得井井有條的,能避免不必要搜尋的窮舉式搜尋法

回溯演算法解題思路

void

backtrack

(int i,

int n,other parameters)

//第i個位置,往往從0開始,n代表解空間的大小

//求解空間第i個位置上的下乙個解

for(next ans in position i of solution space)

}

回溯法解題時通常包含3個步驟:

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

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

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

回溯的問題的難度在於如何定義解空間

問題的解空間應至少包含問題的乙個(最優)解。

解空間的特點:

(完全)二叉樹.

問題的解是一棵子樹(一條路)

通過深度優先搜尋獲得最優解

在生成解空間樹時,定義以下幾個相關概念:

活結點:

如果已生成乙個結點而它的所有兒子結點還沒有全部生成,則這個結點叫做活結點。

擴充套件結點:

當前正在生成其兒子結點的活結點叫擴充套件結點(正擴充套件的結點)。

死結點:

不能再進一步擴充套件或者其兒子結點已全部生成的結點就是死結點。

在回溯法搜尋解空間樹時,通常採用兩種策略(剪枝函式)避免無效搜尋以提高回溯法的搜尋效率:

用約束函式在擴充套件結點處剪去不滿足約束條件的子樹;

用限界函式剪去不能得到最優解的子樹。

第六章 回溯演算法

以深度優先的方式系統地搜尋問題的解的方法稱為回溯法。可以系統地搜尋乙個問題的所有解或任意解。有許多問題,當需要找出它的解集或者要求回答什麼解是滿足某些約束條件的最佳解時,往往要使用回溯法。回溯法的基本做法是搜尋,或是一種組織得井井有條的,能避免不必要搜尋的窮舉式搜尋法。if pd a 20 a 1 ...

第六章 Apriori演算法

apriori演算法是agrawal和r.srikant於1994年提出的,為布林關聯規則挖掘頻繁項集的原創性演算法。演算法的名字基於這樣的事實 演算法使用頻繁項集性質的先驗知識。apriori演算法使用一種稱為逐層搜尋的迭代演算法,其中k項集用於探索 k 1 項集。首先,通過掃瞄資料庫,累計每個項...

第六章(2) 關聯分析 FP增長演算法

fp增長演算法 使用fp樹的緊湊資料結構組織資料,並從中提取頻繁項集 fp樹表示法 fp樹是一種輸入資料的壓縮表示,把每個事務對映到fp樹中的一條路徑來構造 步驟 掃瞄一次資料集,確定每個項的支援度,事務資料去除非頻繁項,將事務中的項按支援度降序 第二次掃瞄資料集,構建fp樹,讀入第乙個事務,路徑上...