Selezione casuale


14

L'algoritmo di selezione randomizzato è il seguente:

Input: un array di n (distinti, per semplicità) numeri e un numero k [ n ]Ank[n]

Output: l '" elemento rank " di A (cioè quello in posizione k se A fosse ordinato)kAkA

Metodo:

  • Se c'è un elemento in , restituisciloA
  • Seleziona un elemento (il "perno") in modo uniforme a casop
  • Calcola i set e R = { a A : a > p }L={aA:a<p}R={aA:a>p}
  • Se , restituire il rango k elemento di L .|L|kkL
  • Altrimenti, restituisce il grado elemento di Rk|L|R

Mi è stata posta la seguente domanda:

Supponiamo che , quindi si sta cercando per la mediana, e lasciare alfa ( 1 / 2 , 1 ) essere una costante. Qual è la probabilità che, alla prima chiamata ricorsiva, l'insieme contenente la mediana abbia dimensione al massimo α n ?k=n/2α(1/2,1)αn

Mi è stato detto che la risposta è , con la giustificazione "Il perno selezionato dovrebbe trovarsi tra 1 - α e α volte l'array originale"2α11αα

Perché? Come , qualunque elemento sia scelto come perno è più grande o più piccolo di più della metà degli elementi originali. La mediana si trova sempre nel sottoarray più grande, perché gli elementi nel sottoarray partizionato sono sempre inferiori al perno.α(0.5,1)

Se il perno si trova nella prima metà dell'array originale (meno della metà di essi), la mediana sarà sicuramente nella seconda metà più grande, perché una volta trovata la mediana, deve essere nella posizione centrale dell'array e tutto ciò che precede il perno è più piccolo come indicato sopra.

Se il perno si trova nella seconda metà dell'array originale (più della metà degli elementi), la mediana sarà sicuramente la prima metà più grande, per lo stesso motivo, tutto ciò che precede il perno è considerato più piccolo.

Esempio:

3 4 5 8 7 9 2 1 6 10

La mediana è 5.

Supponiamo che il perno scelto sia 2. Quindi, dopo la prima iterazione, diventa:

1 2 .... parte più grande ....

Solo 1e 2vengono scambiati dopo la prima iterazione. Il numero 5 (la mediana) è ancora nella prima metà maggiore (accodando al perno 2). Il punto è che la mediana si trova sempre sulla metà maggiore, come può avere la possibilità di rimanere in un sottoarray più piccolo?


Non ci siamo seduti nella tua lezione, quindi per favore spiega il metodo.
Raffaello

Senza sapere di quali precisi algoritmo stai parlando, la tua domanda non è leggibile. Sembra che tu usi in più capacità; Ho provato a modificare ma non sono sicuro di aver capito il significato. Si prega di rivedere in modo che la domanda sia chiara. Votando per chiudere fino ad allora. .5
Raffaello

È l'algoritmo di selezione che utilizza il metodo randomizzato, al contrario del metodo deterministico.
Amumu,

Esistono molti modi per selezionare un elemento in modo casuale.
Raffaello

2
@Amumu: l'ho modificato per descrivere l'algoritmo. In un forum come questo, non tutti sapranno di cosa stai parlando, e c'è un approccio randomizzato molto diverso alla selezione che è più facile da analizzare.
Louis,

Risposte:


12

Supponiamo che l'array abbia elementi. Come hai notato, la mediana è sempre nella parte più grande dopo la prima partizione. La parte più grande ha dimensione al massimo α n se la parte più piccola ha dimensione almeno ( 1 - α ) n . Questo accade quando si sceglie un perno che non è uno degli elementi n più piccoli o più grandi ( 1 - α ) . Perché α > 1 / 2 , si sa queste sono insiemi disgiunti, quindi la probabilità di colpire uno dei cattivi perni è solo 2 - 2 α , e 1 -nαn(1α)n(1α)nα>1/222α .12+2α=2α1


Grazie per la risposta. Ho ancora alcune cose poco chiare. Quindi, cosa c'entra α> 1/2 con insiemi disgiunti? Ho pensato che quando abbiamo sempre insiemi disgiunti con questo metodo indipendentemente dalle dimensioni del subarray.
Amumu,

Perché rende , in modo da ( 1 - α ) n < n - ( 1 - α ) n . 1α<1/2(1α)n<n(1α)n
Louis,

Un'ultima cosa: cosa c'entra il perno cattivo / buono con questo? Per quanto ne so, un buon perno è generalmente compreso nell'intervallo 25-75 (che divide le matrici originali dal 25% -75%), e quello cattivo è al di fuori di tale intervallo, e il peggio di solito è all'inizio o alla fine dell'originale Vettore. Ma questo?
Amumu,

2
αnα=3/4O()α
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.