Salta al contenuto
Note per Studenti Esercizio - inversioni di una permutazione casuale e confronti dell'insertion sort

Esercizio - inversioni di una permutazione casuale e confronti dell'insertion sort

Teoria: Linearità del valore atteso e variabili indicatriciLa linearità $E[X+Y]=E[X]+E[Y]$ vale sempre, anche senza indipendenza; con le variabili indicatrici ($E[I_A]=P(A)$) trasforma un conteggio in una somma di probabilità. Applicazioni: attesa del primo successo $1/p$, collezionista di figurine $nH_n$, punti fissi di una permutazione (media $1$), record (media $H_n$), inversioni ($n(n-1)/4$), attesa condizionata, identità di Wald $E[S_N]=E[N]E[X]$.Linearità del valore atteso e variabili indicatrici →; l'algoritmo è in Algoritmi di ordinamentoSelection sort e insertion sort (quadratici, con invarianti), merge sort (divide et impera, Theta(n log n)), quick sort (caso pessimo quadratico, medio n log n), heap sort (in loco, Theta(n log n)), ordinamento senza confronti per chiavi intere in un intervallo piccolo, limite inferiore Omega(n log n) per gli algoritmi basati su confronti.Algoritmi di ordinamento → (insertion sort).

Testo. Una inversione di una sequenza a0..an−1a_0..a_{n-1} di numeri distinti è una coppia i<ji<j con ai>aja_i>a_j. La sequenza è una permutazione uniforme.

  1. Calcolare il numero atteso di inversioni, per nn generico e per n=5n=5 (controllo con tutte le 120120 permutazioni).
  2. L'insertion sort fa un confronto per ogni inversione risolta, più al più un confronto "falso" per iterazione. Dimostrare che il numero atteso di confronti è n(n−1)4+(n−1)−(Hn−1)\frac{n(n-1)}4+(n-1)-(H_n-1) e calcolarlo per n=5n=5.
  3. Verificare su [5,2,9,1,6][5,2,9,1,6] (che ha 77 confronti).

Soluzione

1. Inversioni. Per ogni coppia di posizioni i<ji<j sia Iij=1I_{ij}=1 se ai>aja_i>a_j. I due valori sono distinti e l'ordine relativo è uniforme: P(Iij=1)=12P(I_{ij}=1)=\frac12. Le coppie sono (n2)\binom n2: E[#inversioni]=(n2)⋅12=n(n−1)4.E[\#\text{inversioni}]=\binom n2\cdot\frac12=\frac{n(n-1)}4. Per n=5n=5: 204=5\frac{20}4=5. Enumerando le 120120 permutazioni il totale delle inversioni è 600600, media 55 (le IijI_{ij} sono dipendenti, ma non serve).

2. Confronti dell'insertion sort. Alla iterazione ii (i=1..n−1i=1..n-1) l'elemento aia_i scorre a sinistra confrontandosi con i predecessori maggiori (ognuno è un confronto vero e una inversione risolta). Poi si ferma: o perché trova un predecessore minore (un confronto falso), o perché è arrivato in testa (nessun confronto in più). Quindi #confronti=#inversioni+#{i∈[1,n−1]:ai non eˋ un nuovo minimo del prefisso}.\#\text{confronti}=\#\text{inversioni}+\#\{i\in[1,n-1]:a_i\text{ non è un nuovo minimo del prefisso}\}. aia_i è un nuovo minimo del prefisso a0..aia_0..a_i con probabilità 1i+1\frac1{i+1} (come per i record: Linearità del valore atteso e variabili indicatriciLa linearità $E[X+Y]=E[X]+E[Y]$ vale sempre, anche senza indipendenza; con le variabili indicatrici ($E[I_A]=P(A)$) trasforma un conteggio in una somma di probabilità. Applicazioni: attesa del primo successo $1/p$, collezionista di figurine $nH_n$, punti fissi di una permutazione (media $1$), record (media $H_n$), inversioni ($n(n-1)/4$), attesa condizionata, identità di Wald $E[S_N]=E[N]E[X]$.Linearità del valore atteso e variabili indicatrici →). Gli ii tra 11 e n−1n-1 che sono nuovi minimi sono in media ∑i=1n−11i+1=Hn−1\sum_{i=1}^{n-1}\frac1{i+1}=H_n-1. I confronti falsi sono (n−1)(n-1) meno questi: E[#confronti]=n(n−1)4+(n−1)−(Hn−1).E[\#\text{confronti}]=\frac{n(n-1)}4+(n-1)-(H_n-1). Per n=5n=5: 5+4−(13760−1)=9−7760=46360≈7,7175+4-\big(\frac{137}{60}-1\big)=9-\frac{77}{60}=\frac{463}{60}\approx7{,}717. Il caso peggiore (n(n−1)/2=10n(n-1)/2=10) è lontano, il migliore (n−1=4n-1=4) pure: la media è quadratica (Θ(n2)\Theta(n^2)) ma con costante 14\frac14.

3. Controllo su [5,2,9,1,6][5,2,9,1,6]. Le inversioni sono (5,2),(5,1),(2,1),(9,1),(9,6)(5,2),(5,1),(2,1),(9,1),(9,6), cioè 55. I nuovi minimi del prefisso agli indici 1..41..4 sono 22 (indice 1) e 11 (indice 3): 22 di 44. I confronti falsi sono 4−2=24-2=2 e il totale è 5+2=75+2=7, il valore dell'esecuzione a mano (Algoritmi di ordinamentoSelection sort e insertion sort (quadratici, con invarianti), merge sort (divide et impera, Theta(n log n)), quick sort (caso pessimo quadratico, medio n log n), heap sort (in loco, Theta(n log n)), ordinamento senza confronti per chiavi intere in un intervallo piccolo, limite inferiore Omega(n log n) per gli algoritmi basati su confronti.Algoritmi di ordinamento →).

Risultato. E[#inversioni]=n(n−1)4E[\#\text{inversioni}]=\frac{n(n-1)}4 (55 per n=5n=5); E[#confronti]=n(n−1)4+n−HnE[\#\text{confronti}]=\frac{n(n-1)}4+n-H_n (46360≈7,717\frac{463}{60}\approx7{,}717 per n=5n=5).

Verifica Python: enumerazione di tutte le permutazioni con un insertion sort che conta i confronti: medie esatte 5912\frac{59}{12} (n=4n=4), 46360\frac{463}{60} (n=5n=5), 22120\frac{221}{20} (n=6n=6), uguali alla formula; per [5,2,9,1,6][5,2,9,1,6] il codice conta 77.

Versione ripasso

Teoria collegata