16

ウィキペディア(link here)以下*の複雑さにこう述べています。その時間 複雑さは、*」sのメモリ使用量よりも、A *指数関数の複雑さがなぜメモリ上にあるのですか?

より問題。 最悪のケースでは、 指数的な数のノードも覚えておく必要があります。私があるため、これが正しいか確認するために失敗

:その後、我々は、オープンノードのリストにB、C、及びDを追加

我々は後継B、C、およびDを用いて、ノードAを探索言います、各ノードはAへの参照を伴い、Aを開ノードから閉ノードに移動する。

ある時点でAを通るパスよりもBへの別のパス(Qを経由している)が見つかった場合は、Bの参照をAに変更してQを指すようにして、コスト、g(および論理的にf)。

したがって、名前、参照ノード名、およびg、h、fスコアをノードに格納すると、格納される最大ノード数はグラフ内の実際のノード数になります。それ?私は本当になぜアルゴリズムが最適(最短)パスの長さに指数関数的な量のノードをメモリに格納する必要があるのか​​理解できません。

説明できますか?私は今、あなたの答えを読んで理解し


編集、私は、問題の間違った観点から推論されました。私は、与えられたグラフを指摘したが、指数関数的複雑さは、概念的グラフであり、これは単に "分岐因子"によって定義されたのグラフを参照している。

答えて

30

*は溶液の長さに対してメモリの複雑さが指数関数的である幅優先探索、のちょうど導かバージョンでスライド。

定数ヒューリスティックを使用する場合、A *は通常の幅優先探索になります。均一なコスト検索は正確です。

最適なヒューリスティックを使用する場合、ヒューリスティックな計算そのものの複雑さを無視すると、空間と時間の両方でA *はO(n)になります。再びnは解の経路の長さです。

+0

簡潔で簡潔なので、間違いを一度に理解できました。いい答えだ。 – Paul

+1

実際、Wikipediaのテキストでは、「最悪の場合、展開されるノードの数は解の長さ(最短パス)で指数関数的」となっています。 –

+0

@ziggystar私はA *アルゴリズムで作業していますが、アルゴリズムの実行時間の複雑さを見つける方法がわかりません。私は障害物がある2Dグリッドを持っており、2点間の最短経路を探します。詳細はhttp://stackoverflow.com/questions/16141678/how-to-compute-the-running-time-of-a-star-algorithmです。どのように私はスターの実行時間を知るのですか?ありがとう。 – Kraken

7

ノードBに戻って展開すると指数関数的になりますが、ノードCに戻ってノードCに戻って展開し、ノードDに戻る必要があります。次に、すべての子ノード

バックトラックは、次のノードに移動するためのエッジのコストに基づいているため、実際の可能性はありますが、悪いケースです。

各ノードが正確に2つの子ノードを持ち、各ノードが同じコストを持つ場合、方程式は2^nであり、ここでnはこれまでの検索の深さです。

たとえば、ノード0から始まります.0には2つの子00と01があります。00には2つの子000と001があります。深さ4の悪いケースでは、2^4各ノードにある子の数と4は検索の深さです。

+0

バックトラックは、開いているノードのプールから新しいノード(つまり、fが最も小さいノード)を選択することにすぎません。あなたはこれが指数関数的なメモリ使用に結びつくことをどのように見ているのか少し詳細を教えてください。たぶんベースと何が指数であるかを教えてください。 – Paul

2

私は専門家ではないが、私はしばらくの間、Wikipediaの記事を研究し、私の説明はこの1つ(私はそれをよく理解している希望:)

と言うだろう、我々は、ノードの4×4行列を持っています。
A、B、C、Dは、特定の時間(北、南、東、西)で取ることのできる方向です。
A *アルゴリズムが検索を開始します。


キュー:B、C、D
AA
キュー:B、C、D、AB、AC、AD
AAA - >目標
キュー:B、C、D、 AB、AC、AD、AAB、AAC、AAD
目標は達成されていますが、検討すべき他の可能性がまだあります。

D
キュー:B、C、AB、AC、AD、AAB、AAC、AAD
DC
キュー:B、C、AB、AC、AD、AAB、AAC、AAD、DA、 DB、DD
DCA
キュー:B、C、AB、AC、AD、AAB、AAC、AAD、DA、DB、DD、DCB、DCC、DCD
DCAB - >目標
キュー:B、 AC、AD、AAB、AAC、AAD、DA、DB、DD、DCB、DCC、DCD、DCAA、DCAC、DCAD
その他

ご覧のとおり、取られたすべてのステップに対して、さらに3つのノードがキューに追加されます。
A *は非循環パス[1]に従うので、1ルートあたりの最大ステップ数は15です。
この場合のルートの最大数は3^15、つまりdirections^nodesです。
すべてのルートに15ステップがあるため、最悪の場合のステップは15 * 3^15です。
絶対的な最悪の場合、すべてのステップが「間違っています」。
この場合、回答を見つける前に3 * 15 * 3^15ノードが待ち行列に入っています。
メモリに保存する必要があるノードの最悪の場合の量は、使用可能なノード数の累乗で決まる定数です。換言すれば、メモリ使用量はノードの量に対して指数関数的である。

[1] http://www.autonlab.org/tutorials/astar08.pdf、15

+0

他の回答でもサポートされているので、格納されるノードの数は、グラフ内のノードの総数より大きくなる必要はありません。私はどこかでノードをエッジと混同していると思います。 – Paul

関連する問題