ランダム化選択アルゴリズムは次のとおりです。
入力:配列の(明確、簡潔のために)数と数n個のk ∈ [ N ]
出力:の「ランク要素」(つまり、がソートされた場合は位置要素)A k A
方法:
- に要素が1つある場合、それを返します
- ランダムに一様に要素(「ピボット」)を選択します
- セットおよび計算しますR = { ∈ A :> P }
- 場合 、ランク要素を返します。K L
- それ以外の場合、ランク返します 要素R
私は次の質問をされました:
で、中央値を探していると仮定し、 定数とします。最初の再帰呼び出しで、中央値を含むセットのサイズが最大なる確率はどのくらいですか?α ∈ (1 / 2 、1 )α nは
答えは、「選択されたピボットは元の配列のと倍の間になければならない」という理由で答えられました1 - α α
どうして?、どのような要素は、ピボットとして選択される半分以上元の要素以外のいずれか大きいか小さいです。分割されたサブ配列の要素は常にピボットよりも小さいため、中央値は常により大きなサブ配列にあります。
ピボットが元の配列の前半(半分以下)にある場合、中央値は必ず2番目に大きい半分になります。中央値が見つかると、中央値が配列の中間位置にある必要があるためです。上記のように、ピボットの前のすべてが小さくなります。
ピボットが元の配列の後半(要素の半分以上)にある場合、同じ理由で、ピボットの前のすべてが小さいと見なされるため、中央値は必ず最初の大きい半分になります。
例:
3 4 5 8 7 9 2 1 6 10
中央値は5です。
選択されたピボットが2であると仮定すると、最初の反復の後、次のようになります。
1 2 ....大きな部分....
のみ1
で2
、最初の反復後に交換されます。番号5(中央値)は、まだ前半(ピボット2に応じて)にあります。ポイントは、中央値が常に半分以上にあるということです。どのようにして、より小さなサブアレイにとどまることができますか?