web-dev-qa-db-ja.com

深さ優先探索の完全性

私は 人工知能:現代のアプローチ から引用します:

深さ優先探索のプロパティは、グラフ検索バージョンとツリー検索バージョンのどちらを使用するかによって大きく異なります。繰り返される状態と冗長なパスを回避するグラフ検索バージョンは、最終的にすべてのノードを拡張するため、有限状態空間で完了します。一方、ツリー検索バージョンはnotcomplete [...]です。深さ優先ツリー検索は、追加のメモリコストなしで変更できるため、ルートから現在のノードへのパス上の状態に対して新しい状態をチェックします。これにより、有限状態空間での無限ループが回避されますが、冗長パスの急増は回避されません。

グラフ検索がどのように完了し、ツリー検索が完了しないのか、ツリーが特定のグラフであるのかわかりません。

その上、「無限ループ」と「冗長パス」の違いがはっきりとわかりません...

誰かが私にこれを説明してもらえますか?

ps。この本をお持ちの方は86ページ(第3版)です。

20
Manlio

深さ優先ツリー検索は無限ループでスタックする可能性があるため、「完全」ではありません。グラフ検索は、すでに検索したノードを追跡するため、無限ループの追跡を回避できます。

「冗長パス」は、同じ開始ノードから同じ終了ノードにつながる異なるパスです。グラフ検索では、これらすべての冗長パスが引き続き探索されますが、以前にアクセスしたノードに到達すると、それ以上進むことはありませんが、バックアップして、まだ試行していないパスをさらに検索します。

これは、ノードからそれ自体に戻るパスである「無限ループ」とは異なります。

あなたのコメントに応えて、あなたがちょうど投稿した引用を見てください:

Depth-first tree search can be modified at no extra memory cost so that it checks new states against those on the path from the root to the current node.

したがって、深さ優先ツリー検索はルートから現在のノードまでのパスを追跡しますが、無限ループを回避するために、新しいノードにアクセスするたびにそのパスに対して線形検索を実行する必要があります。そのチェックを行わなかった深さ優先ツリー検索の実装を作成した場合、無限ループに陥る可能性があります。

あなたは正しいです、本が「冗長なパスの増殖」について言ったことは完全性とは関係ありません。グラフ検索とツリー検索の違いを指摘しているだけです。ツリー検索は現在のパスを追跡するだけなので、同じ検索で同じパスを複数回実行できます(前述のチェックを行った場合でも)。

ルートノードに2つのブランチがあるとします。これらの各ブランチは、同じ単一ノードにつながり、そこから長いパスがあります。ツリー検索は、その長いパスをたどりますtwice、それにつながる2つのブランチのそれぞれに対して1回。それが著者が指摘していることです。

13
Alex D