[問題] 有關A*跟IDA*

作者: s89162504 (阿本)   2012-12-11 20:18:51
新手發問,不好意思
A*是在搜尋時把每個狀態做估計值
每次展開結點時都展開目前估計值最優的
但缺點是耗費記憶體太大
所以解決方法是用迭代加深搜尋,也就是IDA*
以下是我的問題:
為什麼我看網路上IDA*的程式碼時候
在儲存待展開節點可以直接用Stack存
應該說是不需要用優先佇列
另外
好像連目前這個節點是否已出現過都不用判斷
不好意思,請問這是怎麼回事
我有甚麼盲點嗎
先謝謝大家
作者: suhorng ( )   2012-02-11 20:23:00
判斷重複=>要儲存節點=>還是跟A*一樣太花空間IDA*會搜到重複的節點 但是相對於需要搜索的空間大小實在太微不足道 就不管他IDA*的確 *不* 使用優先佇列請回想優先佇列在 A* 中的用途: f(n)值小的節點會先被擴展那IDA*在跑的時候, f 的上限是 *漸次加深* 的也就是可能第一次是 1, 再來是 2, 再來是 3, ...同樣, 這可以保證若 f 較大的已經被搜索到了, 那 f 較小的也一定會被搜索過, 從而同樣保證了正確性而迭代加深的寫法, 正是可以省掉優先佇列的空間消耗
作者: s89162504 (阿本)   2012-02-11 23:29:00
原來如此,謝謝!!

Links booklink

Contact Us: admin [ a t ] ucptt.com