1. 程式人生 > >學大偉業 Day 2 培訓總結

學大偉業 Day 2 培訓總結

多少 總結 分析 最優解 dfs 方法 深度優先搜索 可能 使用

一.dp

動態規劃的本質

是一種思想。通過對原問題劃分成子問題,尋找子問題之間的聯系,通過求解子問題得出原問題的解。與貪心不同的是,動歸是深謀遠慮,考慮全局最優解;而貪心則目光短淺,只考慮局部最優解。

子問題 對應 狀態

子問題之間的聯系 對應 狀態轉移

邊界子問題 對應 邊界狀態(狀態轉移的邊界)

邊界子問題:其結果不依賴其他子問題

求解動態規劃類題目的要點

定義狀態

尋找狀態轉移方程

邊界狀態

值得一提的是 動態規劃中邊界狀態是可以由狀態定義輕松得出 邊界不能忽略。

動態規劃的分類

按照常用套路的不同,可以對動態規劃進行如下分類:

一維動規

背包動規

區間動規

樹形動規

DAG動規


二.搜索

搜索的重點

搜索的實現

剪枝與優化

盲目搜索與啟發式搜索

盲目搜索(只是搜索的順序不同):

深度優先搜索 寬度優先搜索

啟發式搜索:

A*算法

dfs

問題

1.深度問題

2.死循環問題

解決方法

1.對深度加以限制

2.記錄從初始狀態到當前狀態的路徑

深度優先搜索的性質

一般不能保證找到最優解 當深度限制不合理時,可能找不到解,可以將算法改為可變深度限制

最壞情況時,搜索空間等同於窮舉

是一個通用的與問題無關的方法

節省內存,只存儲從初始節點到當前節點的路徑

bfs

優先擴展深度淺的節點 通常使用一個隊列來實現

廣度優先搜索的性質

當問題有解時,一定能找到解

當問題為單位耗散值,且問題有解時,一定能找到最優解

方法與問題無關,

效率較低

存儲量比較大

叠代加深搜索

解決寬搜內存消耗大和深搜不能保證最優解的問題

分析:

寬搜內存消耗大是由於記錄了搜索擴展的節點

深搜不能保證最優解是由於其擴展不是按照代價的順序擴展的

所以我們需要:

不記錄所有擴展節點

按照順序擴展

解決辦法:

枚舉最大的代價,用深搜判斷是否有解

啟發式搜索

在OI中常常也被稱為A*搜索

關鍵在於對當前局面作出預估,判斷當前局面到目的局面至少還需要多少步

估價函數:估價函數的好壞決定了A*算法的優劣

學大偉業 Day 2 培訓總結