質問

私は読み続けます 反復的な深化, 、しかし、私はそれがどのように異なるか理解していません 深さfirst検索.

深さの検索がより深く続くことを理解しました。

反復的な深化では、そのレベルに解決策がない場合、その値を増やし、ゼロ(ルート)から再び開始します。

これは深さ第一検索と同じものではないでしょうか?

解決策が見つかるまで、増加と増加を続け、より深く進むことを意味します。これは同じことだと思います!私は同じブランチを下ります。なぜなら、私がゼロから再び始めたら、私は以前と同じブランチを下るからです。

役に立ちましたか?

解決

深さの最初の検索では、グラフのいくつかのノードから開始し、まだ到達していない(または解決策が見つかるまで)新しいノードを見つけることができる間、グラフのより深く深く継続的に探索します。 DFSが動きがなくなったときはいつでも、それは別の選択をすることができる最新のポイントに戻り、そこから探索します。グラフが非常に大きく、ソリューションが1つしかない場合、これは深刻な問題になる可能性があります。これは、各ノードを見た後にソリューションを見つけるためだけに、1つのDFSパスに沿ってグラフ全体を探索することになる可能性があるためです。さらに悪いことに、グラフが無限である場合(おそらくグラフはすべての数値で構成されているなど)、検索は終了しない可能性があります。さらに、探しているノードを見つけたら、最適なパスがないかもしれません(スタートノードのすぐ隣にあるにもかかわらず、ソリューションを探してグラフ全体にループできたかもしれません!)

この問題の潜在的な修正の1つは、DFSがとる1つのパスの深さを制限することです。たとえば、DFS検索を行う場合がありますが、5を超える長さのパスを取る場合は検索を停止します。無限に、または(グラフが非常に密度が高い場合を除く)グラフ全体を検索しません。ただし、これは、グラフ全体を必ずしも検討しているわけではないため、探しているノードを見つけられない可能性があることを意味します。

反復的な深化の背後にあるアイデアは、この2番目のアプローチを使用することですが、各レベルで深さを増やし続けることです。言い換えれば、長さ1のすべてのパスを使用して、次に長さ2のすべてのパス、次に長さ3などを使用して探索してみてください。問題のノードが見つかるまで。これは、各パスの長さが各ステップである程度の長さで覆われているため、無限の行き止まりのパスに沿って探索することは決してないことを意味します。また、宛先ノードへの可能な限り短いパスを見つけることを意味します。なぜなら、深さDでノードが見つからなかったが深さd + 1でそれを見つけた場合、長さdのパスはないことを意味します(または私たちはそれをとっていただろう)、そのため、長さd + 1の経路は実際に最適です。

これがDFSと異なる理由は、それが終了せずにグラフの周りに非常に長く回路のパスが必要な場合には決して存在しないからです。パスの長さは常にキャップされているため、不要な枝を探索することはありません。

これがBFSと異なる理由は、BFSでは、すべてのフリンジノードをメモリに一度に保持する必要があるためです。これはメモリo(bd)、ここで、Bは分岐係数です。これを反復的な深化からのO(d)メモリの使用法と比較します(現在のパスの各dノードの状態を保持します)。もちろん、BFSは同じパスを複数回探索することはありませんが、反復的な深化は、深さの制限を増やすため、何度もパスを探索する可能性があります。ただし、漸近的には、2つは同じランタイムを持っています。 BFSはOで終了します(bd)すべてのo(bを検討した後のステップd)距離でのノードd。反復深化はO(bd)o(bまで合計するレベルあたりの時間d)全体的ですが、より高い一定の因子があります。

要するに:

  • DFSは、最適なパスを見つけることが保証されていません。反復的な深化はです。
  • DFSは、ターゲットノードを見つける前にグラフ全体を探索する場合があります。反復的な深化は、グラフの開始ノードとエンドノードの間の距離が最大である場合にのみこれを行います。
  • BFSと反復的な深化は両方ともOで実行されます(Bd)、しかし、反復的な深化はより高い定数因子を持っています。
  • BFSはO(bd)メモリ、反復的な深化はO(d)のみを使用します。

お役に立てれば!

他のヒント

まともなページがあります ウィキペディア これについて。

あなたが見逃したと思う基本的なアイデアは、反復的な深化は主に ヒューリスティック. 。ソリューションがルートの反復的な深化の近くで見つかる可能性が高い場合、それは比較的速くなりますが、StraightFoward Depthst Searchは「間違った」決定を下し、実りのない深い枝に多くの時間を費やすことができます。

(これは、検索ツリーが無限にできる場合に特に重要です。 この場合、それらはさらに少ないです DFSは永遠に立ち往生する可能性があるため、BFSまたは反復的な深化は、いつか存在する場合は答えを確実に見つけることができます)

すでにここにあるものに追加するだけですが、ここにデンバー大学の動くAIラボの違いを示すビデオがいくつかあります。

http://movingai.com/dfid.html

その例では、ゴールが浅い場合(ソリューションの深さ3、木の深さ)、ソリューションが右側にある場合、繰り返し深刻な勝利を見ることができますが、ソリューションが最後の行にある場合は、DFSが勝ちます。

私はチェスプログラミングについてこの読書に入りました、次に私のために考えていました 静止検索 AIプログラミングの検索戦略について詳しく知りたい場合は、確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top