搜尋
搜尋演算法是利用計算機的高效能來有目的的窮舉乙個問題解空間的部分或所有的可能情況,從而求出問題的解的一種方法。
狀態:對問題往某乙個時刻進展情況的數學描述,或者是數學抽象。
狀態轉移:動態規劃中本階段的狀態往往是上一階段狀態和上一階段決策的結果,在盡可能短的時間內找到最優化問題的全域性最優解或近似最優解。
兩種方法:
1.廣度優先搜尋(bfs)
2.深度優先搜尋(dfs)
1.廣度優先搜尋
簡單的說,bfs是從根節點開始,沿著樹的寬度遍歷樹的節點,如果發現目標,則演算終止。
廣度優先搜尋框架
while not queue.empty()
begin
可加結束條件
tmp = queue.top()
從tmp迴圈擴充套件下乙個狀態next
if狀態next合法 then
begin
生成新狀態next
next.step = tmp.step + 1
queue.pushback(next)
endqueue.pop()
end2.深度優先搜尋深度優先搜尋框架
遞迴實現:
function dfs(int step, 當前狀態)
begin
可加結束條件
從當前狀態迴圈擴充套件下乙個狀態next
if 狀態next合法 then
dfs(step + 1, next)
end非遞迴實現:
while not stack.empty()
begin
tmp = stack.top()
從tmp拓展下乙個未拓展的狀態next
if 沒有未拓展狀態(到達葉節點)then
stack.pop()
else if 狀態next合法 then
stack.push(next)
end
ACM課程心得
ios sync with stdio false 在c 中的輸入和輸出有兩種方式,一種是scanf和printf,另一種是cin和cout,這兩種方法看似,實則相差很大 一.首先,scanf與printf使用的標頭檔案是stdio.h cin與cout的標頭檔案是 iostream 二.兩者在效率...
ACM課程心得
課程上介紹到了記憶化搜尋 1.記憶化搜尋的實質是動態規劃,效率也和動態規劃接近,形式是搜尋,簡單直觀,也容易編寫,不需要進行什麼拓撲排序了。可以歸納為 記憶化搜尋 搜尋的形式 動態規劃的思想 在數塔例題中的應用 在求max 2,1 max 2,2 的時候兩次呼叫函式max 3,2 也就是說,函式ma...
ACM課程心得
c 學習 1.過程化程式設計中,程式的基本單位是函式 在物件導向程式設計中,程式的基本單位是類 返回型別 類名 函式名 參數列 友元函式friendfun必須在參數列中顯式地指明要訪問的物件aobj.friendfun aobj,5 成員函式memberfun則在它的物件上操作 aobj.membe...