1. 程式人生 > >對於搜索的新理解

對於搜索的新理解

目的 搜索 最大 叠代加深 ont 廣搜 back 什麽 lsp

搜索是什麽?

1.問題全狀態空間

2.搜索空間

3.解路徑

分類

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

1.深度優先搜索

2.寬度優先搜索

二,啟發式搜索

A*算法

分類來講

1.深度優先搜索

例題:皇後問題

存在的問題:1.深度問題,2.死循環問題

解決辦法:1.對搜索深度加以限制

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

性質:一般不能保證找到最優解

當深度現在不合理時,可能找不到解,可以將算法改為可變深度限制

最壞的情況,搜索空間相當於窮舉

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

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

2.寬度優先搜索

優先擴展深度淺的節點

通常用一個隊列來實現

例題:八數碼

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

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

方法與問題無關,具有通用性

效率較低

存儲量比較大

【對比】

深搜 廣搜
不保證最優解,除非枚舉所有情況 每步代價相同時,一定能找到最優解
空間消耗低 空間消耗高
具有通用性
效率低

叠代加深搜索(dbfs)

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

解決方案:枚舉最大的代價,用深搜判斷是否有解--》卡時間

3.啟發式搜索(A*搜索)

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

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

練習題:1.01迷宮

2.高手去散步

3.血色先鋒隊

對於搜索的新理解