La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

La complessità media O(n log n) di Quick-Sort vale soltanto se tutte le permutazioni dellarray in ingresso sono ugualmente probabili. In molte applicazioni.

Presentazioni simili


Presentazione sul tema: "La complessità media O(n log n) di Quick-Sort vale soltanto se tutte le permutazioni dellarray in ingresso sono ugualmente probabili. In molte applicazioni."— Transcript della presentazione:

1 La complessità media O(n log n) di Quick-Sort vale soltanto se tutte le permutazioni dellarray in ingresso sono ugualmente probabili. In molte applicazioni pratiche questo non è vero!!! Vi sono applicazioni in cui le permutazioni quasi ordinate sono molto più probabili e questo può aumentare la complessità media fino ad O(n 2 ).

2 Randomized-Partition(A,p,r) i = Random(p,r) scambia A[i] e A[r] return Partition(A,p,r) Randomized-Quicksort(A,p,r) if p < r then q = Randomized-Partition(A,p,r) Randomized-Quicksort(A,p,q-1) Randomized-Quicksort(A,q+1,r)

3 Complessità del problema Se non facciamo ipotesi sul tipo degli elementi della sequenza le uniche operazioni permesse sono confronti e assegnazioni. Problema dellordinamento Input: sequenza a 1,a 2,...,a n di elementi su cui è definito un ordine Output: a' 1,a' 2,...,a' n permutazione di a 1,a 2,...,a n tale che a' 1 a' 2... a' n

4 Siccome siamo interessati ad un limite inferiore possiamo contare solo alcune delle operazioni. Se un certo limite inferiore vale per il tempo richiesto per eseguire tali operazioni a maggior ragione varrà per il tempo calcolo totale. Noi conteremo solo i confronti e dimostreremo che nel caso pessimo il numero di confronti è Ω(n log n). Per fare questo è utile rappresentare la struttura di un algoritmo mediante un albero delle decisioni.

5 1:2 2:3 1:2 > > Esempio. Albero delle decisioni di Insertion-Sort con un array di 3 elementi. > > > Insertion-Sort(A) n = A.length for j = 2 to n i = j – 1 while i 1 and A[i]>A[i+1] scambia A[i] con A[i+1] i = i – 1

6 Per dimostrare il limite inferiore etichettiamo lalbero delle decisioni nel seguente modo: - la radice è etichettata con la sequenza in input a 1,a 2,...,a n (che per semplicità assumiamo sia una permutazione di 1,2,...,n). - le foglie sono etichettate con la sequenza risultato che deve essere una permutazione ordinata di a 1,a 2,...,a n ; nel nostro caso la sequenza 1,2,...,n.

7 Se lalgoritmo è corretto a permutazioni distinte in input devono corrispondere cammini distinti nellalbero. Perché? 1:2 a,b,c (1,2,3) a,c,b (1,2,3) c,b,a (1,2,3) > b,c,a (1,2,3) b,a,c (1,2,3) > c,a,b (1,2,3) Esempio. Albero delle decisioni di Insertion-Sort con un array di 3 elementi. 2:3 a,b,c > 2:3 b,a,c > 1:2 b,c,a > 1:2 a,c,b

8 Le permutazioni di 1,2,...,n sono n! e quindi lalbero delle decisioni deve avere almeno n! foglie. Dunque nel caso pessimo lalgoritmo deve eseguire almeno log 2 (n!) confronti. Ma un albero binario con N foglie deve avere altezza almeno pari a log 2 (N). Esercizio: Dimostrarlo per induzione su N.

9 e quindi per ogni algoritmo generale di ordinamento. Ma Possiamo concludere che Ω(n log n) è un limite inferiore per la complessità del problema dellordinamento.

10 Lalgoritmo di ordinamento Heapsort risolve il problema dellordinamento con complessità massima Dunque O(n log n) è limite superiore per la complessità del problema dellordinamento. Siccome limite superiore e inferiore coincidono (n log n) è limite stretto per il problema dellordinamento.

11 Considerazione sul limite inferiore Ω(n log n) per lordinamento ATTENZIONE: Il limite inferiore Ω(n log n) da noi dimostrato vale solo per algoritmi di ordinamento generali, ossia algoritmi che non fanno alcuna ipotesi sul tipo degli elementi da ordinare: le uniche operazioni ammesse su tali elementi sono confronti e assegnazioni.

12 Il limite inferiore Ω(n log n) vale anche per ordinare numeri reali sui quali, oltre a confronti ed assegnazioni, si possono usare anche le quattro operazioni aritmetiche. In questo caso la dimostrazione del limite inferiore è molto più difficile e si basa su alcuni risultati di geometria algebrica. La dimostrazione si può trovare nel testo di Geometria Computazionale di F. Preparata.

13 Possiamo usare il limite Ω(n log n) per lordinamento per dimostrare limiti inferiori per altri problemi. La tecnica che si usa è quella della riduzione dei problemi. Illustriamo questa tecnica con un esempio.

14 Il problema dellinvolucro convesso: Dati n punti del piano trovare il più piccolo poligono convesso che li contiene tutti pipi q4q4 q2q2 q1q1 q7q7 q5q5 q8q8 q6q6 q9q9 q3q3 Input: p 1,…,p n in ordine qualsiasi Output: q 1,…,q m in ordine antiorario

15 Sia Alg un algoritmo qualsiasi che risolve il problema dellinvolucro convesso. Lo possiamo utilizzare per ordinare una sequenza a 1,a 2,...,a n di numeri reali nel modo seguente :

16 A = (a 1, a 2, a 3, a 4, a 5, a 6, a 7, a 8, a 9, a 10 ) Q = (q 1, q 2, q 3, q 4, q 5, q 6, q 7, q 8, q 9, q 10 ) A = (x 8, x 9, x 10, x 1, x 2, x 3, x 4, x 5, x 6, x 7 ) p1p1 a1a1 a12a12 P = (p 1, p 2, p 3, p 4, p 5, p 6, p 7, p 8, p 9, p 10 ) q7q7 q8q8 q5q5 q4q4 q3q3 q2q2 q1q1 q 10 q9q9 q6q6 x8x8

17 a.Costruiamo i punti p 1,p 2,...,p n di coordinate p i (a i, a i 2 ) Tempo Θ(n). b.Usiamo Alg per trovare linvolucro convesso q 1,q 2,...,q n Tempo T Alg (n). c.Cerchiamo q k con coordinata x minima Tempo Θ(n). d.Prendiamo le coordinate x dei punti q 1,q 2,...,q n nellordine x k,...,x n,x 1,...,x k-1 Tempo Θ(n).

18 Abbiamo un algoritmo di ordinamento di complessità Se Alg avesse complessità massima inferiore a (n log n) potremmo ordinare un array di reali in tempo inferiore a (n log n). Questo è impossibile a causa del limite inferiore Ω(n log n) per il problema dellordinamento. Quindi Ω(n log n) è limite inferiore anche per il problema dellinvolucro convesso.

19 Ordinamento in tempo lineare Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, ossia per algoritmi che non fanno alcuna ipotesi sul tipo degli elementi della sequenza da ordinare. Se facciamo opportune ipotesi restrittive sul tipo degli elementi possiamo trovare algoritmi più efficienti. Naturalmente il limite inferiore banale Ω(n) vale comunque per tutti gli algoritmi di ordinamento.

20 Algoritmo Counting-Sort Per ordinare un array A Counting-Sort richiede un secondo array B in cui mette la sequenza ordinata e un array ausiliario C[0..k]. Assume che gli elementi dellarray siano interi compresi tra 0 e k con k costante.

21 C B A C

22 Counting-Sort(A,B,k) // A contiene a 1,...,a n for i = 0 to k C[i] = 0 for j = 1 to A.length x = A[j], C[x] = C[x] + 1 // C[x] è il numero di elementi a j = x for i = 1 to k C[i] = C[i] + C[i-1] // C[x] è il numero di elementi a j x for j = A.length downto 1 // i = C[x] è la posizione in B dove // mettere il prossimo a j = x x = A[j], i = C[x], B[i] = x C[x] = C[x] - 1

23 Counting-Sort(A,B,k) // Complessità for i = 0 to k // C[i] = 0 // for j = 1 to A.length // x = A[j], C[x] = C[x] + 1 // for i = 1 to k // C[i] = C[i] + C[i-1] // for j = A.length downto 1 // x = A[j], i = C[x], B[i] = A[j] // C[x] = C[x] - 1 // Complessità: T CS (n,k) = (n+k) Se k = O(n) allora T CS (n,k) = (n)

24 Osservazione: Nellultimo ciclo for dellalgoritmo gli elementi dellarray A vengono copiati nellarray B partendo dallultimo Cosa succede se partiamo dal primo?

25 B A14201'2'0'2" C '

26 Succede che lalgoritmo è ancora corretto ma gli elementi uguali vengono ricopiati in ordine inverso. Quando un algoritmo di ordinamento mantiene lordine iniziale tra due elementi uguali si dice che esso è stabile. Lalgoritmo Counting-Sort (con lultimo ciclo for decrescente) è stabile.

27 Algoritmo Radix-Sort Assume che i valori degli elementi dellarray siano interi rappresentabili con al più d cifre in una certa base b. Per ordinare larray si usa d volte un algoritmo di ordinamento stabile (ad esempio Counting-Sort) per ordinare larray rispetto a ciascuna delle d cifre partendo dalla meno significativa. Ad esempio interi di d = 5 cifre decimali (b = 10), interi di d = 4 byte (cifre in base b = 256) o stringhe di d caratteri (b = 256).

28 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]


Scaricare ppt "La complessità media O(n log n) di Quick-Sort vale soltanto se tutte le permutazioni dellarray in ingresso sono ugualmente probabili. In molte applicazioni."

Presentazioni simili


Annunci Google