搜尋演算法的感悟 解空間

2021-08-27 04:22:16 字數 1097 閱讀 9821

練習了將近乙個月的搜尋演算法了,也有了一些小小的感悟。

搜尋演算法的兩個關鍵問題:

(1):如何找到整個解空間。

(2):如何剪枝。

我的感悟是關於解空間的。問題的解往往需要經過一系列操作之後才能得到,而在這一系列的操作中,每一步的操作都會的到乙個狀態,當最終這個狀態與目標狀態相同時,此時也就是得到了結果,所以在搜尋的過程中,著重需要處理的就是

操作和狀態。只有考慮了所有可能的操作,才會得到所有可能的狀態。下面舉例說明。

每一步都有6種操作方法,那是不是按照這6種操作方法進行搜尋,就可以得到結果了呢?先來看看下面這組測試資料:

6 3 1

4 1 1

按照6中操作方法所得的搜尋樹如下圖:

如圖中紅色箭頭所示的搜尋路徑a→b→a……,a→c→a……,如果按照深度優先進行搜尋(當然,這道題最好使用寬度優先搜尋,這裡只是為了說明問題),這裡出現了死迴圈。那是不是只要避免出現這種搜尋路徑,就能避免出現死迴圈呢?遺憾的是出現死迴圈的路徑還可以是更複雜一些的,所以很難通過對操作進行限制來解決出現重複狀態。

通過這個例子,發現當考慮了所有的操作時,還要對操作所得狀態進行判斷,是否已出現過,來避免重複搜尋。這道題我糾結了好久,就是因為我想通過限制操作來避免出現重複狀態,而出現重複狀態的情況有很多,很難考慮全面。其實判斷狀態是否重複我之前也都做過,就是在搜尋迷宮的過程中,操作就是移動的方向,而狀態就是位置,為了避免重複搜尋就在地圖上做標記,當時這樣做的時候覺得順理成章,不過在這題裡,卻並沒有能直接這樣做。

總結下,在搜尋整個解空間時,首先是考慮所有的

操作,然後通過儲存已出現

狀態,來防止重複搜尋。如果很容易通過對操作進行限制來防止狀態的重複出現,或是儲存狀態所需的記憶體空間過大的話,那就不宜儲存狀態。

本人菜鳥,有高見者請賜教!

搜尋演算法的感悟 解空間

練習了將近乙個月的搜尋演算法了,也有了一些小小的感悟。搜尋演算法的兩個關鍵問題 1 如何找到整個解空間。2 如何剪枝。我的感悟是關於解空間的。問題的解往往需要經過一系列操作之後才能得到,而在這一系列的操作中,每一步的操作都會得到乙個狀態,當最終這個狀態與目標狀態相同時,此時也就是得到了結果,所以在搜...

搜尋演算法的感悟 解空間

練習了將近乙個月的搜尋演算法了,也有了一些小小的感悟。搜尋演算法的兩個關鍵問題 1 如何找到整個解空間。2 如何剪枝。我的感悟是關於解空間的。問題的解往往需要經過一系列操作之後才能得到,而在這一系列的操作中,每一步的操作都會得到乙個狀態,當最終這個狀態與目標狀態相同時,此時也就是得到了結果,所以在搜...

A 搜尋演算法

啟發式搜尋演算法 要理解 a 搜尋演算法,還得從啟發式搜尋演算法開始談起。所謂啟發式搜尋,就在於當前搜尋結點往下選擇下一步結點時,可以通過乙個啟發函式 來進行選擇,選擇代價最少的結點作為下一步搜尋結點而跳轉其上 遇到有乙個以上代價最 少的結點,不妨選距離當前搜尋點最近一次展開的搜尋點進行下一步搜尋 ...