演算法設計分析 解剖回溯法

2021-06-22 05:34:32 字數 1418 閱讀 6808

有這樣幾類問題:

建立數學模型,在有限時間內,用解析的方法求解

建立數學模型,但在有限時間內,用數學解析的方法求解困難,只好用搜尋或模擬來求解,常見方法有:

窮舉深度優先搜尋方法

廣度優先搜尋方法

啟發式演算法

窮舉,適用於:

可預見確定解元素個數,且問題規模不是特別大

對於每個解變數a1,…,an的可能值為乙個連續的值域

2)深度優先搜尋,適用於:

求解初始結點到目標結點的所有方案

求解初始結點到目標結點的一種方案

3)廣度優先搜尋,適用於:

求解初始結點到目標結點的所有方案

求解初始結點所能達到的所有結點

求某一結點到某目標結點的最短路徑

關於搜尋演算法

搜尋是平常最常用的一種演算法,同時應該也是最難掌握的一種演算法。搜尋類似於列舉、窮舉。顧名思義就是將所有的情況都試一下(這個「試」是有邏輯的順序的),當存在某種狀態符合問題要求的時候,那個這個狀態就是問題乙個解。

搜尋演算法的效率是非常低的,時間複雜度一般都是級數增長的。所以在搜尋演算法的同時我們通常要加上優化,例如:剪枝,記憶化搜尋,分枝定界,以降低時間複雜度。

純隨機搜尋(random  walk)

廣度優先搜尋(bfs)

深度優先搜尋(dfs)

啟發式搜尋:啟發式搜尋就是:在狀態空間中,對每乙個搜尋的位置進行評估,得到最好的位置,再從這個位置進行搜尋直到目標(即:通過啟發式函式,選擇代價最少的結點作為下一步搜尋結點而跳轉其上),使搜尋過程沿著被認為最有希望的前沿區段發展。

回溯法:

問題的解空間:

問題的解向量:回溯法希望乙個問題的解能夠表示成乙個n元式(x1,x2,…,xn)的形式。

顯約束:對分量xi的取值限定。

隱約束:為滿足問題的解而對不同分量之間施加的約束。

解空間:對於問題的乙個例項,解向量滿足顯式約束條件的所有多元組,構成了該例項的乙個解空間。

注意:有時同乙個問題可以有多種解空間表示,有些表示更簡單,所需表示的狀態空間也更小。(儲存量少,搜尋方法簡單)

生成問題狀態的基本方法:

基本思想:

回溯演算法框架=

問題的解空間+深度優先遍歷+判斷結果的函式+剪枝函式

這個剪枝函式:

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

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

回溯法對解空間作深度優先搜尋,因此,在一般情況下用遞迴方法實現回溯法。

void backtrack (int t)

}採用樹的非遞迴深度優先遍歷演算法,可將回溯法表示為乙個非遞迴迭代過程。

void iterativebacktrack ()

//end if

} //end for

else t--;

} //end while

}

演算法設計 回溯法

t1 設某一機器由n個部件組成,部件編號為1n,每一種部件都可以從m個不同的 商處購得,商編號為1m。設wij是從 商j處購得的部件i的重量,cij是相應的 對於給定的機器部件重量和機器部件 計算總 不超過d的最小重量機器設計。注意 輸出結果中第一行最後沒有空格。比如下面的輸出樣例中1 3 1後面沒...

演算法分析與設計 分治法 動態規劃

優化原則 最優子結構性質 問題的最優解中,每乙個子問題本身即是該子問題的最優解 即最優決策序列的任何子串行本身一定是相對於子串行的初始 結束狀態的最優決策序列 分解 盡量平衡 分解成規模盡量接近的子問題 解決 遞迴地解兩個規模為n 2的子問題 2.解決 遞迴地解兩個規模為n 2的子問題 合併描述最優...

演算法設計 分析篇(攤銷分析)

攤銷分析 攤銷是一種,功過相抵的思想 中國古代,某大臣因為犯錯,看在立下汗馬功勞的份上,從輕發落。圖靈被發現時個同性戀者,但因破解了德國海軍密碼,抵消罪過。攤銷分析vs平均情況分析 以一場籃球比賽為例。平均情況分析 比賽結束後乙個隊伍的得分就是所有隊員得分的總分,除以隊員數,就是每個隊員平均得分。攤...