估計函式與迭代加深相結合 IDA 演算法

2021-10-02 11:46:11 字數 468 閱讀 6186

a*演算法的關鍵在於設計估價函式。既然估價函式與優先佇列bfs結合可以產生a"演算法,那麼估價函式能否與dfs結合呢?當然,dfs也有乙個缺點,就是一旦估價出現失誤,容易向下遞迴深入乙個不能產生最優解的分支,浪費許多時間。因此,我們最終選擇把估價函式與迭代加深的dfs演算法相結合。得到 ida * 演算法

我們設計乙個估價函式, 估算從每個狀態到目標狀態需要的步數。當然,與a* 演算法一樣,估價函式需要遵守「估計值不大於未來實際步數」的準則。然後,以迭代加深dfs的搜尋框架為基礎,把原來簡單的深度限制加強為:若當前深度+未來估計步數深度限制,則立即從當前分支回溯。

ida* 演算法在許多場景下表現出了優秀的效率,並且程式實現的難度低於a*演算法。

相關題解

poj3460

poj2286

callable與runable相結合

本篇說明的是callable和future,它倆很有意思的,乙個產生結果,乙個拿到結果。callable介面類似於runnable,從名字就可以看出來了,但是runnable不會返回結果,並且無法丟擲返回結果的異常,而callable功能更強大一些,被執行緒執行後,可以返回值,這個返回值可以被fut...

qsort 與結構體相結合

題目描述 用一維陣列儲存學號和成績,然後,按成績排序輸出。輸入 輸入第一行包括乙個整數n 1 n 100 代表學生的個數。接下來的n行每行包括兩個整數p和q,分別代表每個學生的學號和成績。輸出 按照學生的成績從小到大進行排序,並將排序後的學生資訊列印出來。如果學生的成績相同,則按照學號的大小進行從小...

將QML與Qt Widgets相結合

在使用 qt widgets 時,經常要實現一些比較炫酷的效果 例如 滑動 翻頁 這時選擇 qml 會顯得非常簡單。那麼,問題來了 將 qml 與 qt widgets 相結合 建立了乙個簡單的 qml 檔案,用於顯示乙個綠色的矩形,其中包含乙個文字。為了說明 qml 與 qt widgets 的互...