有這樣幾類問題:
建立數學模型,在有限時間內,用解析的方法求解
建立數學模型,但在有限時間內,用數學解析的方法求解困難,只好用搜尋或模擬來求解,常見方法有:
窮舉深度優先搜尋方法
廣度優先搜尋方法
啟發式演算法
窮舉,適用於:
可預見確定解元素個數,且問題規模不是特別大
對於每個解變數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平均情況分析 以一場籃球比賽為例。平均情況分析 比賽結束後乙個隊伍的得分就是所有隊員得分的總分,除以隊員數,就是每個隊員平均得分。攤...