[解決済み] ヒープ構築のトップダウン・アプローチはボトムアップよりも成長度合いがO(n)よりもO(log n)低いにもかかわらず、なぜ効率が悪いのでしょうか?
2022-02-17 13:27:36
質問
O(n)オーダーのヒープ構築のボトムアップ・アプローチはどのようなものですか?Anany Levitin は彼の著書で、これは O(log n) のオーダーを持つトップダウンアプローチよりも効率的であると述べています。なぜですか?
どのように解決するのですか?
タイプミスとしか思えません。
ヒープを構築するための標準的なアルゴリズムは2つあります。1つは空のヒープから始めて、一度に1つずつ繰り返し要素を挿入していくものである。各挿入にかかる時間はO(log n)なので、この手法によるヒープ構築のコストはO(n log n)と上限を設定できる。最悪の場合、逆ソートで要素を挿入すると、実行時間はΘ(n log n)になることが判明した。
もう1つのアプローチは、ヒープ化アルゴリズムで、各要素を独自のバイナリヒープで開始し、徐々に合体させることでヒープを直接構築するものである。このアルゴリズムは入力に関係なく、時間O(n)で実行される。
最初のアルゴリズムで時間Θ(n log n)を要するのは、挿入される要素の後半を見ると、それぞれ高さがΘ(log n)のヒープに挿入されているので、バブルアップを行うたびにコストが高くなる可能性があるからです。n / 2個の要素があり、それぞれが挿入するのにΘ(log n)の時間がかかるかもしれないので、最悪の場合の実行時間はΘ(n log n)です。
一方、heapifyアルゴリズムは、その時間の大半を小さなヒープでの作業に費やします。半分の要素は高さ0のヒープに、4分の1は高さ1のヒープに、8分の1は高さ2のヒープに挿入される、などです。つまり、作業の大部分は小さなヒープに要素を挿入することに費やされ、これは著しく高速です。
関連
-
[解決済み] 定数時間や対数時間よりも、nやnlog(n)の方が良いのでしょうか?
-
[解決済み] 再帰性 T(n) = T(n^(1/2)) + 1
-
[解決済み] アルゴリズムと関数の違いは何ですか?[クローズド]
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] ヒープの構築はどうして時間計算量O(n)になるのですか?
-
[解決済み] フラットテーブルをツリーにパースする最も効率的/エレガントな方法は何ですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】整数の流れから実行中央値を求める
-
[解決済み】Javaで区切りの良い文字列を作るにはどうすればいい?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】決定木(比較ソートアルゴリズム)の葉の最短の深さ)
-
[解決済み] アルゴリズムAの実行時間は少なくともO(n²)である - なぜ無意味なのか?
-
[解決済み] クイックソートとヒープソートの比較
-
[解決済み] このHeld-Karp TSP Pseudocodeの説明をお願いします。
-
[解決済み] 2つのNFAの交点の求め方
-
[解決済み] バックトラッキングとダイナミックプログラミングの違い
-
[解決済み] グラフの隣接リスト表現の空間複雑性
-
[解決済み] k-meansの時間計算量はどの程度ですか?
-
[解決済み] あるアルゴリズムの計算量がO(log log n)になる原因は何でしょうか?
-
[解決済み] ヒープの構築はどうして時間計算量O(n)になるのですか?