[解決済み】3値の中央値戦略
質問内容
クイックソートでピボット値を選択する3つの戦略のうち、中央値は何ですか?
ウェブで読んでいるのですが、具体的にどのようなものか分かりませんでした。また、ランダムなクイックソートよりどのように良いのでしょうか?
どのように解決するのですか?
3つの要素の中央値とは、配列の最初、真ん中、最後の要素を見て、その3つの要素の中央値をピボットとして選択することです。
3つの中央値の効果を最大限に引き出すには、次のことも重要です。 ソート これは、現在の反復処理でピボットとして選択されるものには影響しませんが、次の再帰呼び出しでピボットとして使用されるものに影響する可能性があり、いくつかの初期順序の悪い動作を制限するのに役立ちます(多くの場合、特に悪いと判明したものは、配列のハイエンドに最小の要素がある(またはローエンドに最大の要素がある)ことを除いてソートされている配列です)。例えば
ピボットをランダムに選ぶのに比べ
- ある共通のケース(完全にソートされたデータ)が最適のままであることを保証します。
- ワーストケースを与えるように操作することがより困難である。
- PRNGは比較的低速であることが多い。
2点目は、もう少し説明が必要でしょう。もしあなたが明らかな(
rand()
乱数発生器を使えば、誰かが簡単に(多くの場合、とにかく)悪いピボットを選び続けるように要素を配置することができます。これは、潜在的な攻撃者が入力したデータをソートしているウェブサーバのようなものにとって、深刻な懸念となり得ます。このような場合、あなたは
可能性
本当にランダムな種を使うか、rand()の代わりに自作のPRNGを入れるか、あるいは3のメディアンを使うかです。
一方、十分にランダムな生成器(例えば、ハードウェア生成器やカウンターモードでの暗号化など)を使用する場合は、おそらく より 3つの選択の中央値よりも悪いケースを強要することは困難です。同時に、そのレベルのランダム性を達成することは、一般的にそれ自身のかなりのオーバーヘッドを持つので、このケースで攻撃されることを本当に期待していない限り、おそらくそれは価値がありません(もしそうなら、少なくともマージソートやヒープソートのような、O(N log N)最悪の場合を保証する代替を検討する価値があるでしょう。
関連
-
[解決済み] T = {<M> | Mはwを受け入れるときはいつでも$w^R$を受け入れるTMである}とする。Tが決定不可能であることを示せ
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] O(log n)とは具体的にどのような意味ですか?
-
[解決済み] ゲーム「2048」の最適なアルゴリズムとは?
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうど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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Quickselectの時間の複雑さを説明する
-
[解決済み】クイックソートとヒープソートの比較
-
[解決済み】whileループの時間複雑性とは?
-
[解決済み】3値の中央値戦略
-
[解決済み] どのようにすれば、ほとんどすべてのアルゴリズムを修正して、最良の場合の実行時間を持つようにできるか?
-
[解決済み] 定数時間や対数時間よりも、nやnlog(n)の方が良いのでしょうか?
-
[解決済み] Octave : ロジスティック回帰 : fmincg と fminunc の違い
-
[解決済み] アルゴリズムの教科書では、ソートされた配列について「増加」ではなく「非減少」を使っているのはなぜですか?
-
[解決済み] グラフが半連結であるか否かを判定する
-
[解決済み] 最小ボトルネックスパニングツリーと最小スパニングツリーはどう違うのですか?