[解決済み] ヒープソートとマージソートの速度比較 [重複]について
2022-02-18 22:17:07
質問
大きな配列を繰り返し処理する場合、ヒープソートとマージソートではどちらのアルゴリズムが速いでしょうか?なぜどちらかのアルゴリズムが速いのですか?
どのように解決するのですか?
時間の複雑さは同じですが、定数係数は違います。一般に、マージソートは2つのランから順次読み込み、マージされた1つのランに順次書き込むので、4ウェイ以上のキャッシュを持つ典型的なシステムでは、マージソートは著しく速くなります。私は、Cで書かれたマージソートが、アセンブリで書かれた最適化されたヒープソートよりも高速であったことを記憶しています。
ヒープソートはデータをスワップするので、1回のスワップで2回の読み込みと書き込みが発生しますが、マージソートはデータを移動するので、1回の移動で1回の読み込みと書き込みが発生するという問題点があります。
マージソートの主な欠点は、元の配列と同じサイズ(またはオプションで元の配列の 1/2 サイズ)の 2 番目の配列(またはベクトル)がワーキングストレージとして必要になることですが、4GB 以上の RAM を搭載した PC では、通常これは問題ではありません。
私のシステムでは、Intel 3770K 3.5 ghz、Windows 7 Pro 64 bit、Visual Studio 2015で、2^24 = 16,777,216 64 bit 符号なし整数をソートするには、ヒープソートが7.98秒かかるのに対し、ボトムアップマージソートは1.59秒、トップダウンマージソートは1.65秒で完了します。
関連
-
[解決済み】スレッド「main」での例外 java.lang.StringIndexOutOfBoundsException: 文字列のインデックスが範囲外です。0 [閉店]
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] カスタムオブジェクトのArrayListをプロパティでソートする
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】Java、"変数名 "を変数に解決することができない
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】-XX:MaxPermSizeは何をするのですか?
-
[解決済み】メソッド本体がない、またはJavaで抽象的な宣言をする
-
[解決済み】Javaメソッドスタブ
-
[解決済み】javaで無効な文字定数
-
[解決済み】クイックソートとヒープソートの比較