La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Radix-Sort(A,d) // A[i] = c d...c 2 c 1 for j = 1 to d // A è ordinato rispetto alle cifre c j-1...c 1 usa un algoritmo stabile per ordinare A rispetto.

Presentazioni simili


Presentazione sul tema: "Radix-Sort(A,d) // A[i] = c d...c 2 c 1 for j = 1 to d // A è ordinato rispetto alle cifre c j-1...c 1 usa un algoritmo stabile per ordinare A rispetto."— Transcript della presentazione:

1 Radix-Sort(A,d) // A[i] = c d...c 2 c 1 for j = 1 to d // A è ordinato rispetto alle cifre c j-1...c 1 usa un algoritmo stabile per ordinare A rispetto alla j-esima cifra // A è ordinato rispetto alle cifre c j...c 1 // A è ordinato

2 Radix-Sort(A,d) // Complessità for j = 1 to d usa Counting-Sort per ordinare A rispetto alla j-esima cifra Complessità: dove b è la base della numerazione e d è il numero di cifre dei numeri da ordinare.

3 Dovendo ordinare n numeri di m bit ciascuno possiamo scegliere r < m e suddividere i numeri in d=m/r cifre di r bit ciascuna In questo caso la base della numerazione è b=2 r e Radix-Sort richiede tempo Quindi il valore ottimo di r dipende soltanto da n ed è approssimativamente log 2 n. La funzione ha un minimo per r tale che

4 Algoritmo Bucket-Sort Lalgoritmo Bucket-Sort assume che i valori da ordinare siano dei numeri reali in un intervallo semiaperto [a,b). Per semplicità di esposizione assumiamo che lintervallo sia [0,1).

5 1.Divide [0,1) in n parti uguali e inizializza un array B[0..n-1] di liste vuote (i bucket) 2.Mette in ciascuna lista B[k] gli elementi A[i] che cadono nella k-esima parte di [0,1) 3.Ordina ciascuna lista 4.Ricopia in A tutti gli elementi delle liste nellordine B[0],B[1],…,B[n-1] Bucket-Sort per ordinare larray A procede come segue:

6 A B 0 / 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 /.78/.17/.39/.26/.72/.94/.21/.12/.23/.68/.12/.17/.21/.23/.26/.72/.78/.39/.68/.94/ A

7 Bucket-Sort(A) n = A.length for i = 0 to n-1 crea la lista vuota B[i] for i = 1 to n metti A[i] nella lista B[ nA[i] ] // Gli elementi dellarray A sono stati tutti // inseriti nelle liste B[0],B[1],...,B[n-1] // Gli elementi di una lista B[i] sono minori degli // elementi della lista successiva B[i+1] for i = 0 to n-1 ordina la lista B[i] copia in A le liste B[0],B[1],...,B[n-1] // A è ordinato

8 Bucket-Sort(A) // Complessità n = A.length // for i = 0 to n-1 crea la lista vuota B[i] // for i = 1 to n metti A[i] nella lista B[ nA[i] ] // for i = 0 to n-1 ordina la lista B[i] con InsertSort // copia in A le liste B[0],...,B[n-1] //

9 Nel caso peggiore in cui tutti gli elementi vanno a finire in ununica lista abbiamo: Nel caso migliore in cui gli elementi si distribuiscono uno per lista abbiamo: Anche per il caso medio, se si assume che i valori in ingresso siano uniformemente distribuiti nellintervallo [0,1), si dimostra che: Per dimostrarlo ci servono alcune semplici nozioni di calcolo delle probabilità.

10 Supponiamo di estrarre casualmente un valore x da un insieme X di possibili valori. Non necessariamente tutti i valori x hanno la stessa probabilità di essere estratti. Indichiamo con p x la probabilità che venga estratto x Il valore medio che ci aspettiamo di ottenere si dice valore atteso di X ed è Naturalmente

11 Ad esempio se X è linsieme delle possibili vincite alla roulette quando puntiamo 100 su di un numero allora X contiene i due valori: con probabilità 1/37 (si vince 36 volte la posta e i numeri della roulette sono 37 contando anche lo 0 dove vince sempre il banco) e - 0 con probabilità 36/37 Il valore atteso della vincita è allora Dunque paghiamo 100 per ricevere in media soltanto 97,30 !!!!

12 Vediamo un altro esempio: X è linsieme delle possibili vincite al Lotto quando puntiamo 100 su di un terno. X contiene i due valori: con probabilità 1/11748 (la vincita è 4500 volte la posta e la probabilità che esca il terno è 1/11748). - 0 con probabilità 11747/ Il valore atteso della vincita è allora Dunque paghiamo 100 per ricevere in media soltanto 38,30. Gli altri 61,70 se li tiene lo stato come tassa sulla speranza

13 Il valore atteso gode delle seguenti proprietà: qualunque siano le due variabili casuali X ed Y (anche se non sono tra loro indipendenti) Inoltre se le due variabili X ed Y sono indipendenti: Se c è una costante:

14 Per ragioni di simmetria il valore atteso è lo stesso per tutte le liste. Ci possiamo quindi limitare a calcolare il valore atteso relativo alla prima lista: Tornando alla complessità media di Bucket-Sort e usando le proprietà del valore atteso:

15 Per calcolare definiamo le variabili casuali indicatrici per cui Se A[i] è scelto casualmente, la variabile X i ha valore 1 con probabilità 1/n e 0 con probabilità (n-1)/n. Il valore atteso è

16 Usando le variabili casuali indicatrici X i possiamo calcolare:

17 Quindi, assumendo che i valori siano dei reali uniformemente distribuiti in [0,1):

18 Algoritmi per statistiche dordine Problema della statistica dordine Input: Un insieme A di n numeri ed un intero k compreso tra 1 ed n Output: x A, k-esimo in ordine di grandezza x A è il k-esimo in ordine di grandezza se gli altri n-1 elementi si possono ripartire in due gruppi: un gruppo di k-1 elementi tutti minori o uguali di x ed un gruppo di n-k elementi tutti maggiori o uguali di x.

19 Casi particolari: k = 1 (minimo) k = n (massimo) k = (n+1)/2 (mediana inferiore o mediana) k = (n+1)/2 (mediana superiore)

20 Minimo o massimo Quanti confronti servono per trovare il minimo (o il massimo)? Minimo(A) // Massimo(A) è analogo min = A[1] for i = 2 to A.length if min > A[i] min = A[i] return min n-1 confronti come limite superiore

21 Ma anche n-1 confronti come limite inferiore! Possiamo escludere che un elemento sia il minimo soltanto dopo aver verificato che esso è maggiore di un altro!! Dunque n-1 confronti è un limite stretto per calcolare il minimo e tale limite vale anche per il massimo. Per escludere n-1 elementi servono quindi almeno n-1 confronti.

22 Min-Max(A) if A.length dispari max = min = A[1], i = 2 else if A[1] < A[2] min = A[1], max = A[2], i = 3 else min = A[2], max = A[1], i = 3 Minimo e massimo Quanti confronti servono per trovare assieme il minimo e il massimo?

23 while i A.length if A[i] < A[i+1] if min > A[i] min = A[i] if max < A[i+1] max = A[i+1] else if min > A[i+1] min = A[i+1] if max < A[i] max = A[i] i i+2 return min,max

24 se n dispari i confronti sono: meno di 3 confronti ogni 2 elementi se n pari i confronti sono:

25 Statistica dordine in tempo medio lineare Il problema della statistica dordine: Input: Un insieme A di n valori ed un intero k compreso tra 1 ed n Output: x A, k-esimo in ordine di grandezza Per semplicità supponiamo valori distinti Si può risolvere in tempo medio lineare con un algoritmo Select ottenuto modificando Randomized-Quicksort

26 Complessità: minima O(n), massima O(n 2 ) Randomized-Select(A,p,r,k) // 1 k n if p == r return A[p] q = Randomized-Partition(A,p,r) // A[p..q-1] < A[q] < A[q+1..r] i = q - p+1 if k == i return A[q] elseif k < i return Randomized-Select(A,p,q-1,k) else return Randomized-Select(A,q+1,r,k-i)

27 Limite superiore per la complessità media

28 spezzando la sommatoria in corrispondenza dellelemento medio si ottiene dove il è dovuto al fatto che quando n è dispari il termine mediano viene sommato due volte.

29 Con la sostituzione j = n - i - 1 nella prima sommatoria si ottiene Le due sommatorie sono uguali e quindi

30 Usiamo il metodo di sostituzione assumendo che la soluzione sia del tipo Se esistono due costanti k 1 e k 2 che soddisfano per ogni n>1 abbiamo trovato la soluzione.

31 Per n = 1 otteniamo k 1 + k 2 = c Per n > 1 dobbiamo dimostrare che Ossia sostituendo k 1 n + k 2 da entrambe le parti

32

33 è vera per ogni n se e La disequazione k 1 + k 2 = c per il caso base fornisce infine k 2 = c - k 1 ossia quando k 1 2b e k 1 2a Dunque con k 1 = min(2b,2a) e k 2 = c - k 1 è una soluzione e quindi


Scaricare ppt "Radix-Sort(A,d) // A[i] = c d...c 2 c 1 for j = 1 to d // A è ordinato rispetto alle cifre c j-1...c 1 usa un algoritmo stabile per ordinare A rispetto."

Presentazioni simili


Annunci Google