[解決済み】Quickselectの時間の複雑さを説明する
質問内容
から https://en.wikipedia.org/wiki/Quickselect とあります。
しかし、quickselectでは、quicksortのように両側から再帰するのではなく、片側(探している要素がある側)からしか再帰しません。これにより、平均的な計算量は O(n log n) から O(n) に減少し、最悪の場合 O(n^2) になります。
片側だけしか見ないようにすることで、平均複雑度がO(n)に減少することが理解できないのですが?O(N/2 log N)であって、O(N log N)ではないでしょうか?また、最悪の場合、O(n^2)になるのはなぜでしょうか?
どのように解決するのですか?
n log(n)
は、アルゴリズムがすべてのN個の項目をlog(n)回見ることを意味します。しかし、Quickselectではそのようなことは起こりません。
例えば、128個のリストから上位8個を選ぶためにQuickselectを使っているとします。そして、奇跡的なランダム選択により、選んだピボットが常に中途半端な位置にあるとします。
最初の反復で、アルゴリズムは全128項目を調べ、64項目ずつの2つのグループに分割する。次の反復では、32個ずつの2つのグループに分割されます。次に16個、そして8個となる。検査されるアイテムの数は
N + N/2 + N/4 + N/8 + N/16
その系列の和が2*Nに達することはない。
最悪のケースは、パーティショニングによって常にパーティションサイズが非常に偏ってしまうことです。もし最初のパーティショニングで1つのアイテムしか削除されなかったらどうなるかを考えてみましょう。そして、2番目の分割では1つだけ、など。その結果、次のようになります。
n + (n-1) + (n-2) ...
というのは
(n^2 + n)/2)
またはO(n^2)です。
関連
-
[解決済み] ポイントルック アット ポイント
-
[解決済み] 構造的再帰と生成的再帰はどのように違うのですか?
-
[解決済み] DFS-Forest Componentとは?
-
[解決済み] 簡単:T(n)=T(n-1)+nを反復法で解く。
-
[解決済み] 決定論的クイックソートとは何ですか?
-
[解決済み] ラジアンを度数に変換する方法は?
-
[解決済み] 最小ボトルネックスパニングツリーと最小スパニングツリーはどう違うのですか?
-
[解決済み] ヒープの構築はどうして時間計算量O(n)になるのですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】アルゴリズムの時間複雑性を求めるには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】whileループの時間複雑性とは?
-
[解決済み】なぜO(n)はO( nlog(n) )よりも優れているのでしょうか?)
-
[解決済み】3値の中央値戦略
-
[解決済み] NPとco-NPの違いは何ですか?
-
[解決済み] どのようにすれば、ほとんどすべてのアルゴリズムを修正して、最良の場合の実行時間を持つようにできるか?
-
[解決済み] グラフにおいて最小容量が最大となる経路の探索
-
[解決済み] 決定論的クイックソートとは何ですか?
-
[解決済み] ビッグシータ記法の証明
-
[解決済み] Bogosort (a.k.a Monkey Sort)よりも悪いソートアルゴリズムはあるのか?[クローズド]
-
[解決済み] 解いてみてください。T(n) = T(n-1) + n [重複] とする。