學大偉業 Day 2 培訓總結
一.dp
動態規劃的本質
是一種思想。通過對原問題劃分成子問題,尋找子問題之間的聯系,通過求解子問題得出原問題的解。與貪心不同的是,動歸是深謀遠慮,考慮全局最優解;而貪心則目光短淺,只考慮局部最優解。
子問題 對應 狀態
子問題之間的聯系 對應 狀態轉移
邊界子問題 對應 邊界狀態(狀態轉移的邊界)
邊界子問題:其結果不依賴其他子問題
求解動態規劃類題目的要點
定義狀態
尋找狀態轉移方程
邊界狀態
值得一提的是 動態規劃中邊界狀態是可以由狀態定義輕松得出 邊界不能忽略。
動態規劃的分類
按照常用套路的不同,可以對動態規劃進行如下分類:
一維動規
背包動規
區間動規
樹形動規
DAG動規
二.搜索
搜索的重點
搜索的實現
剪枝與優化
盲目搜索與啟發式搜索
盲目搜索(只是搜索的順序不同):
深度優先搜索 寬度優先搜索
啟發式搜索:
A*算法
dfs
問題
1.深度問題
2.死循環問題
解決方法
1.對深度加以限制
2.記錄從初始狀態到當前狀態的路徑
深度優先搜索的性質
一般不能保證找到最優解 當深度限制不合理時,可能找不到解,可以將算法改為可變深度限制
最壞情況時,搜索空間等同於窮舉
是一個通用的與問題無關的方法
節省內存,只存儲從初始節點到當前節點的路徑
bfs
優先擴展深度淺的節點 通常使用一個隊列來實現
廣度優先搜索的性質
當問題有解時,一定能找到解
當問題為單位耗散值,且問題有解時,一定能找到最優解
方法與問題無關,
效率較低
存儲量比較大
叠代加深搜索
解決寬搜內存消耗大和深搜不能保證最優解的問題
分析:
寬搜內存消耗大是由於記錄了搜索擴展的節點
深搜不能保證最優解是由於其擴展不是按照代價的順序擴展的
所以我們需要:
不記錄所有擴展節點
按照順序擴展
解決辦法:
枚舉最大的代價,用深搜判斷是否有解
啟發式搜索
在OI中常常也被稱為A*搜索
關鍵在於對當前局面作出預估,判斷當前局面到目的局面至少還需要多少步
估價函數:估價函數的好壞決定了A*算法的優劣
學大偉業 Day 2 培訓總結