ランダム化された選択


14

ランダム化選択アルゴリズムは次のとおりです。

入力:配列の(明確、簡潔のために)数と数n個のk ∈ [ N ]Ank∈[n]

出力:の「ランク要素」(つまり、がソートされた場合は位置要素)A k AkAkA

方法:

  • に要素が1つある場合、それを返しますA
  • ランダムに一様に要素(「ピボット」)を選択しますp
  • セットおよび計算しますR = { ∈ A :> P }L={a∈A:a<p}R={a∈A:a>p}
  • 場合 、ランク要素を返します。K L|L|≥kkL
  • それ以外の場合、ランク返します 要素Rk−|L|R

私は次の質問をされました:

で、中央値を探していると仮定し、 定数とします。最初の再帰呼び出しで、中央値を含むセットのサイズが最大なる確率はどのくらいですか?α ∈ (1 / 2 、1 )α nはk=n/2α∈(1/2,1)αn

答えは、「選択されたピボットは元の配列のと倍の間になければならない」という理由で答えられました1 - α α2α−11−αα

どうして?、どのような要素は、ピボットとして選択される半分以上元の要素以外のいずれか大きいか小さいです。分割されたサブ配列の要素は常にピボットよりも小さいため、中央値は常により大きなサブ配列にあります。α∈(0.5,1)

ピボットが元の配列の前半(半分以下)にある場合、中央値は必ず2番目に大きい半分になります。中央値が見つかると、中央値が配列の中間位置にある必要があるためです。上記のように、ピボットの前のすべてが小さくなります。

ピボットが元の配列の後半(要素の半分以上)にある場合、同じ理由で、ピボットの前のすべてが小さいと見なされるため、中央値は必ず最初の大きい半分になります。

例:

3 4 5 8 7 9 2 1 6 10

中央値は5です。

選択されたピボットが2であると仮定すると、最初の反復の後、次のようになります。

1 2 ....大きな部分....

のみ1で2、最初の反復後に交換されます。番号5(中央値)は、まだ前半(ピボット2に応じて)にあります。ポイントは、中央値が常に半分以上にあるということです。どのようにして、より小さなサブアレイにとどまることができますか?


講義には参加しませんでしたので、その方法を説明してください。
— ラファエル

あなたが話している精密アルゴリズムを知らなければ、あなたの質問は読めません。複数の容量でを使用しているようです。編集しようとしましたが、意味を理解したかどうかわかりません。質問が明確になるように修正してください。それまで終了する投票。.5
— ラファエル

決定論的手法とは対照的に、ランダム化手法を使用した選択アルゴリズムです。
— アムム

要素をランダムに選択する方法は多数あります。
— ラファエル

2
@Amumu:アルゴリズムを説明するために編集しました。このようなフォーラムでは、誰もがあなたが話していることを知っているわけではありません。また、選択するための非常に異なるランダム化されたアプローチがあり、分析が容易です。
— ルイス

回答:


12

配列に要素があるとします。既に述べたように、中央値は常に最初のパーティションの後の大きな部分にあります。小さい部分のサイズが以上の場合、大きい部分のサイズは最大でです。これは、最小または最大要素のいずれでもないピボットを選択すると発生します。ので悪いピボットの1を打つ確率がちょうどあるので、あなたは、これらが互いに素な集合いることを知っている、および。α 、N (1 - α )N (1 - α )N α > 1 / 2 2 - 2 α 1 - 2 + 2 α = 2 α - 1nαn(1−α)n(1−α)nα>1/22−2α1−2+2α=2α−1


答えてくれてありがとう。まだ不明な点がいくつかあります。それで、α> 1/2はばらばらの集合と何の関係があるのでしょうか?サブアレイのサイズに関係なく、常にこのメソッドを使用して互いに素なセットがある場合、
— アムム

それはなるためので。(1 - α )N < N - (1 - α )nは1−α<1/2(1−α)n<n−(1−α)n
— ルイス

最後に、悪い/良いピボットがこれと何の関係があるのでしょうか?私の知る限りでは、良いピボットは通常25-75の範囲(元のアレイを25%-75%に分割する)であり、悪いピボットはその範囲外にあり、悪い場合は通常、元のアレイの開始または終了にありますアレイ。しかしこれは?
— アムム

2
ここで、ピボットが必要以上に大きな部分(サイズ)を作る場合、ピボットは「悪い」と言っています。badと呼ぶものは対応します。質問のポイントは、インストラクターが、予想される実行時間の順序が変更しても変わらないことを確認してほしいということだと思います。α = 3 / 4 O (⋅ )ααnα=3/4O(⋅)α
— ルイス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.