Beam Searchの基礎知識-広さ優先および深さ優先検索
2070 ワード
概要
深さ優先と広さ優先の探索方法を紹介した.
基本概念
Openテーブルは、未アクセスのパスcloseテーブルを保存し、アクセスしたパスを保存し、デッドサイクルに入ることを防止します.
具体的なアルゴリズム
ある開始ノードからすべての到達可能な頂点にアクセスすることは、次の図ではH点からC点までどのように遍歴したいかなど、多くのシーンで非常に役立ちます.
具体的な手順 HからHの直接後継{B,D,L}を見つけて3つの候補経路{H−>B,H−>D,H−>L}を構成し,このとき{B,D,L}はopen vertices となる. open vertices(およびそれらが属するパス)をopenテーブルに入れます. openテーブルからvertexを選択してopenテーブルを除去し、このvertexの後続を生成する 例えばLを選択し,{M,F,H}, に続く Hは既にアクセスされているので、openテーブルに入れないとデッドサイクルになるので、このときopenテーブルに{B,D,M,F}がデッドサイクルを防止するために1つのcloseテーブルがあり、すでにアクセスされたポイントが記録され、1つのポイントがcloseテーブルに入ると、2回目の にはアクセスされない
は、ターゲット頂点が見つかるか、ターゲット頂点が見つからない に戻るかを引き続き知る.
注意:広さ優先か深さ優先かはopenテーブルからのデータアクセスによって完全に決定されます*openテーブルが先進的であれば後出であれば深さ優先*openテーブルが先進的であれば後出であれば広さ優先です
サンプルおよびダミーコード
深度優先サンプル(Depth Priority Samples)
Vertex visited (and hence closed)
Open list (stack top at left)
H
B D L
B
D D L
D
G J D L
G
J J D L
J
E I M J D L
E
K I M J D L
K
I M J D L
I
F M J D L
F
A L M J D L
A
L M J D L
L
M M J D L
M
C M J D L
C
M J D L
デプス優先疑似コード
広さ優先類似
参考資料
http://jhave.org/algorithms/graphs/depthbreadth/depth-breadth.shtml
深さ優先と広さ優先の探索方法を紹介した.
基本概念
Openテーブルは、未アクセスのパスcloseテーブルを保存し、アクセスしたパスを保存し、デッドサイクルに入ることを防止します.
具体的なアルゴリズム
ある開始ノードからすべての到達可能な頂点にアクセスすることは、次の図ではH点からC点までどのように遍歴したいかなど、多くのシーンで非常に役立ちます.
具体的な手順
注意:広さ優先か深さ優先かはopenテーブルからのデータアクセスによって完全に決定されます*openテーブルが先進的であれば後出であれば深さ優先*openテーブルが先進的であれば後出であれば広さ優先です
サンプルおよびダミーコード
深度優先サンプル(Depth Priority Samples)
Vertex visited (and hence closed)
Open list (stack top at left)
H
B D L
B
D D L
D
G J D L
G
J J D L
J
E I M J D L
E
K I M J D L
K
I M J D L
I
F M J D L
F
A L M J D L
A
L M J D L
L
M M J D L
M
C M J D L
C
M J D L
デプス優先疑似コード
/* initialization */
queue openList = { startVertex }
/* loop */
while ( closedNodes != numberOfNodes && !openList.empty())
{
closingVertex = openList.dequeue();
increment number of closedNodes;
for each non-closed vertex not in the openList
and with an edge to it from closingVertex
{
openList.enqueue( vertex );
}
}
広さ優先類似
参考資料
http://jhave.org/algorithms/graphs/depthbreadth/depth-breadth.shtml