[解決済み】広さ優先と深さ優先の比較
質問
ツリー/グラフをトラバースするとき、Breadth FirstとDepth Firstの違いは何ですか?コーディングや擬似コードの例があれば、教えてください。
どのように解決するのですか?
この2つの用語は、木の歩き方を2種類に分けて説明しています。
その違いを示すのが一番簡単だろう。木を考えてみましょう。
A
/ \
B C
/ / \
D E F
A 深さ 最初の探索では、次の順序でノードを訪問します。
A, B, D, C, E, F
わざわざ行くことに気づく 下 片足だけ
A 幅 最初の探索では、次の順序でノードを訪問します。
A, B, C, D, E, F
ここでは、すべての作業を行う 横断 の各レベルで、下に行く前に
(トラバーサルの順序に曖昧さがあることに注意し、各レベルのツリーで "read"の順序を維持するためにごまかしをしました。どちらの場合でも、私はCの前にBに到達することもできるし、同様に、Fの前にEに到達することもできます。)
どちらのトラバーサルも擬似コードで実現できます。
Store the root node in Container
While (there are nodes in Container)
N = Get the "next" node from Container
Store all the children of N in Container
Do some work on N
2つのトラバーサルの順序の違いは
Container
.
- について 深度優先 はスタックを使用します。(再帰的な実装ではコールスタックを使用します...)
- について 幅優先 はキューを使用します。
再帰的な実装は次のようになります。
ProcessNode(Node)
Work on the payload Node
Foreach child of Node
ProcessNode(child)
/* Alternate time to work on the payload Node (see below) */
再帰は、子を持たないノードに到達した時点で終了します。 有限、非循環グラフ
この時点では、まだ少しズルをしています。少し工夫をすれば ワークオン のノードをこの順番で並べます。
D, B, E, F, C, A
これは深さ優先のバリエーションで、ツリーをさかのぼるまで各ノードで作業を行わないというものです。しかし、私は 訪問 上位のノードの子ノードを見つけるために、下降していきます。
このトラバーサルは再帰的な実装ではかなり自然であり(最初の "Work" 行の代わりに上記の "Alternate time" 行を使用する)、そうではなく も 明示的なスタックを使うと大変なことになりますが、練習として残しておきます。
関連
-
[解決済み] O(log n)とは具体的にどのような意味ですか?
-
[解決済み] ゲーム「2048」の最適なアルゴリズムとは?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] テールコール最適化とは何ですか?
-
[解決済み] nからk個の要素の組み合わせをすべて返すアルゴリズム
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】インプレース基数ソート
-
[解決済み] 幅優先探索を再帰的に実行する
-
[解決済み] 円形のデータの集合の平均はどのように計算するのですか?[クローズド]
-
[解決済み] バックトラックと深さ優先探索の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 32ビット整数のセットビットの数を数えるには?
-
[解決済み] 素数かどうかを判断するのに、なぜ平方根まで確認するのか?
-
[解決済み] 深さ優先探索(DFS)と幅優先探索(BFS)の使い分けはいつが実用的か?[クローズド]
-
[解決済み] なぜクイックソートはマージソートより優れているのですか?
-
[解決済み】インプレース基数ソート
-
[解決済み】広さ優先と深さ優先の比較
-
[解決済み] 円形のデータの集合の平均はどのように計算するのですか?[クローズド]
-
[解決済み] 3つのスタックを持つ待ち行列を実装するには?
-
[解決済み] 短い文字列のための効率的な圧縮アルゴリズム[closed]。
-
[解決済み] 光の周波数をRGBに変換する?