[解決済み] 幅優先探索を再帰的に実行する
質問
例えば、2分木の幅優先探索を実装したいとします。 再帰的に . あなたならどうする?
補助ストレージとしてコールスタックのみを使用することは可能でしょうか?
解決方法は?
(これは単なる思考訓練、あるいはトリック的な宿題や面接の質問だと思いますが、何らかの理由でヒープ領域が許されない[本当に悪いカスタムメモリマネージャ?奇妙なランタイム/OS問題?]、一方でスタックへのアクセスはまだある...という奇妙なシナリオが想像できます)。
パンゲアトランバーサルは伝統的にスタックではなくキューを使用します。 キューとスタックの性質はかなり正反対なので、コールスタック(これはスタックであり、それゆえにこの名前がある)を補助記憶装置(キュー)として使おうとすると、コールスタックで何か馬鹿馬鹿しいことをしていない限り、かなり失敗する運命にあるのです。
同じ意味で、非尾部再帰を実装しようとすると、本質的にアルゴリズムにスタックを追加することになるのです。 これはもはや二分木上の幅優先探索ではなく、従って従来のBFSの実行時間やその他は完全に適用されない。 もちろん、任意のループを再帰呼び出しにすることは可能だが、それは意味のある再帰とは言えない。
しかし、他の人が示したように、ある程度のコストをかけてBFSのセマンティクスに従ったものを実装する方法もあるのです。 比較のコストは高いが、ノードの探索は安い場合、次のようになる。 サイモン・ブーチャン を使えば、単純に深さ優先の反復探索を行い、葉だけを処理すればよいのです。 これは、ヒープに格納される成長するキューがなく、単にローカルな深さ変数があり、木が何度も走査されるにつれてスタックが呼び出しスタック上に何度も構築されることを意味します。 そして パトリック 配列にバックされた二分木は、通常、幅優先の探索順序で格納されます。したがって、これに対する幅優先探索は、補助的な待ち行列を必要とせず、些細なことでしょう。
関連
-
[解決済み] Breadth-First SearchはShortest Pathを探すときにどのように機能しますか?
-
[解決済み] O(log n)とは具体的にどのような意味ですか?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] 円周率の計算が正確かどうかを判断するにはどうしたらよいですか?
-
[解決済み] Googleの "Did you mean? "はどうなっているのか?アルゴリズムの仕組みとは?[クローズド]
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】スキップリストとバイナリサーチツリーの比較
-
[解決済み] 3つ以上の数値の最小公倍数
-
[解決済み] 並列ソートアルゴリズムの中で、最も平均的な場合分け性能を持つのはどれか?
-
[解決済み] Breadth-First Searchでパスをたどるには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 円周率の計算が正確かどうかを判断するにはどうしたらよいですか?
-
[解決済み] 短縮URLの作成方法を教えてください。[クローズド]
-
[解決済み] クレジットカードの番号からカードの種類を判別する方法は?
-
[解決済み] Big-O表記とLittle-O表記の違いについて
-
[解決済み] 非回帰的深さ優先探索アルゴリズム【非公開
-
[解決済み] 時計回りに並べると?
-
[解決済み] Googleの面接でのトリッキーな質問
-
[解決済み] 円形のデータの集合の平均はどのように計算するのですか?[クローズド]
-
[解決済み] 2つのキューを使用したスタックの実装
-
[解決済み] 短い文字列のための効率的な圧縮アルゴリズム[closed]。