_IDA*
_がどのようにメモリスペースを節約するのかわかりません。私が理解していることから、_IDA*
_は_A*
_であり、反復深化があります。
_A*
_が使用するメモリの量と_IDA*
_の違いは何ですか。
_IDA*
_の最後の反復は、_A*
_とまったく同じように動作し、同じ量のメモリを使用しませんか。 _IDA*
_をトレースすると、f(n)
しきい値を下回るノードの優先度キューも記憶する必要があることがわかります。
ID-Depth First Searchは、すべてのノードを覚えておく必要がなく、検索のように幅優先を実行できるようにすることで、深さ優先検索に役立つことを理解しています。しかし、_A*
_は、途中でいくつかのサブツリーを無視するため、最初はすでに深さ優先のように動作すると思いました。反復深化により、どのようにしてメモリの使用量が減りますか?
もう1つの質問は、反復深化を伴う深さ優先探索では、幅優先のように動作させることで最短経路を見つけることができるということです。ただし、_A*
_はすでに最適な最短パスを返します(ヒューリスティックが許容される場合)。反復深化はどのように役立ちますか。 IDA *の最後の反復は_A*
_と同じだと思います。
IDA*
では、A*
とは異なり、アクセスする予定の暫定ノードのセットを保持する必要がないため、メモリ消費は再帰関数のローカル変数のみに割り当てられます。
このアルゴリズムはメモリ消費量が少ないですが、独自の欠点があります。
A *とは異なり、IDA *は動的計画法を利用しないため、同じノードを何度も探索することになります。 (IDA * In Wiki)
グラフ全体をスキャンしないようにするには、ヒューリスティック関数を指定する必要がありますが、常に必要なスキャンのメモリは、周囲のノードなしで現在スキャンしているパスのみです。
各アルゴリズムに必要なメモリのデモは次のとおりです:
A*
アルゴリズムでは、すべてのノードとその周辺のノードを「訪問する必要がある」リストに含める必要がありますが、IDA*
では、プレビューノードに到達すると次のノードを「遅延」で取得します。したがって、追加のセットに含める必要はありません。
コメントで述べたように、 IDA*
は基本的にヒューリスティックを使用したIDDFS
です :