AO *アルゴリズムを実装する方法は?


16

検索アルゴリズムを実装するときに、異なるデータ構造が使用されることに気付きました。たとえば、キュ​​ーを使用して幅優先検索を実装し、スタックを使用して深さ優先検索を実装し、最小ヒープを使用してA *アルゴリズムを実装します。これらの場合、検索ツリーを明示的に構築する必要はありません。

しかし、AO *アルゴリズムの検索プロセスをシミュレートする単純なデータ構造を見つけることはできません。検索ツリーを明示的に構築することがAO *アルゴリズムを実装する唯一の方法であるかどうかを知りたいですか?誰でも私に効率的な実装を提供できますか?


3
ようこそ!使用する非標準の資料への参照を含めることを忘れないでください。AO *にはウィキペディアの記事がないため、リンクは確かに適切です。良いものが見つかったらいいのですが、確認してください。
ラファエル

1
それは単なるグラフではありません(「次の」ノードに移動できる機能があります)?
soandos

AO *がA *アルゴリズムとどのように異なるかを誰かがスケッチしただけで助けになります。リンクからそれを把握することはできませんでした。実装に関しては、ツリーの構造は妥当と思われます。
vzn

回答:


1

この記事に関しては、AO *アルゴリズムでノードを展開するたびに、前に戻ってその前任者の推定コストをすべて更新する必要があります。

線形データ構造を使用してノードを含める場合、データ要素を順番にトラバースする必要があり、直接取得できるデータ要素は1つだけです(スタック、キュー、優先キューなど)。

AO *では、推定コストに基づいてノードが展開のために取得されるたびに、アルゴリズムがその先行ノードであるすべてのノードを反復処理します(推定コストを更新するため)。つまり、推定コストに基づいて要素を取得する必要がある場合と、その後継に基づいて要素を取得する必要がある場合があります。一般的な場合、これらの条件の両方を満たすシーケンス順序はありません。おそらく、「ネストされた」線形データ構造を使用する方法がありますが、ツリー構造を模倣するだけで、代わりに検索ツリーを構築する方が良いでしょう。


0

私はあなたがリンクしたその説明を外しますが、BSTはどうですか?未解決のノードのバランスをとるために構築できる場合があります。これにより、ステップ2の時間を節約でき、トラバーサルの数に応じて全体の時間を短縮できます。もちろん、未解決のノードに応じてツリーのバランスをとった/並べ替えた場合、おそらく、対数時間の内外で維持する可能性のある、より単純なデータ構造よりも優れているでしょう。

http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree


2
ができますが、これを行いますか?
ラファエル

BSTには各ノードの数値インデックスがあり、それらを配置するために使用されるため、BSTの使用方法はあまり明確ではありません。使用される数値インデックスは何ですか?
vzn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.