La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Merge-Sort(A,p,r) if p < r q = (p+r)/2 Merge-Sort(A,p,q) Merge-Sort(A,q+1,r) Merge(A,p,q,r)

Presentazioni simili


Presentazione sul tema: "Merge-Sort(A,p,r) if p < r q = (p+r)/2 Merge-Sort(A,p,q) Merge-Sort(A,q+1,r) Merge(A,p,q,r)"— Transcript della presentazione:

1 Merge-Sort(A,p,r) if p < r q = (p+r)/2 Merge-Sort(A,p,q) Merge-Sort(A,q+1,r) Merge(A,p,q,r)

2 L 0 2 4 5 7 81 2 3 6 9 0 2 4 5 7 8 1 2 3 6 9 R A[p..q]A[q+1..r] 0 2 4 5 7 8 1 2 3 6 9 0 1 2 4 5 7 8 2 3 6 9 0 1 2 4 5 7 8 2 3 6 9 0 1 2 2 4 5 7 8 3 6 9 0 1 2 2 3 4 5 7 8 6 9 0 1 2 2 3 4 5 7 8 6 9 0 1 2 2 3 4 5 7 8 6 9 0 1 2 2 3 4 5 6 7 8 9 0 1 2 2 3 4 5 6 7 8 9 0 1 2 2 3 4 5 6 7 8 9 0 1 2 2 3 4 5 6 7 8 9 A[p..r]

3 Merge(A,p,q,r) n 1 = q – p + 1 n 2 = r – q for i = 1 to n 1 L[i] = A[p + i – 1] for j = 1 to n 2 R[j] = A[q + j] L[n 1 + 1] = R[n 2 + 1] = i = j = 1 for k = p to r if L[i] R[j] A[k] = L[i] i = i + 1 else A[k] = R[j] j = j + 1

4 Merge-Sort(A,p,r) if p < r // altrimenti A[p..r] è ordinato q = (p+r)/2 Merge-Sort(A,p,q) Merge-Sort(A,q+1,r) Merge(A,p,q,r) Analisi di Merge-Sort: correttezza non ordinati 1 p rn A ordinati 1 p rn A 1 p rn q A

5 Merge(A,p,q,r) n 1 = q – p + 1 n 2 = r – q for i = 1 to n 1 L[i] = A[p + i – 1] for j = 1 to n 2 R[j] = A[q + j] L[n 1 + 1] = R[n 2 + 1] = i = j = 1 for k = p to r if L[i] R[j] A[k] = L[i] i = i + 1 else A[k] = R[j] j = j + 1 1 p rnq A 1 p rn A L R 1n1n1 1n2n2 1 p rn A L R 1n1n1 1n2n2 k ij 1 p rn A L R 1n1n1 1n2n2 k ij

6 Merge(A,p,q,r) // complessità// n 1 = q – p + 1// n 2 = r – q// for i = 1 to n 1 // L[i] = A[p + i – 1]// for j = 1 to n 2 // R[j] = A[q + j]// L[n 1 + 1] = R[n 2 + 1] = // i = j = 1// for k = p to r // if L[i] R[j]// A[k] = L[i]// i = i + 1// else A[k] = R[j]// j = j + 1//

7 Merge-Sort(A,p,r) //complessità// if p < r // q = (p+r)/2 // Merge-Sort(A,p,q) // Merge-Sort(A,q+1,r)// Merge(A,p,q,r) //

8

9 Dunque esiste N tale che per ogni n > N. Qualunque siano i valori delle costanti a', b', c', a", b" e c" lalgoritmo Merge-Sort è superiore a Insertion-Sort per array di dimensione sufficientemente grande.

10 Possiamo dire che cresce come n 2 mentre cresce come n log 2 n. nn2n2 n log 2 n IS n 2 ns MS n log 2 n ns 1010033 0.1 s0.033 s 10010000664 10 s0.664 s 100010 6 99651ms 10 s 1000010 8 1328770.1s 133 s 10 6 10 12 2·10 7 17m20ms 10 9 10 18 3·10 10 30s10 9 10 18 3·10 10 70anni30s

11 dunque esiste N tale che per ogni n > N. Qualunque siano i valori delle costanti a', b', c', a", b" lalgoritmo Insertion-Sort è superiore a Merge-Sort per array (quasi) ordinati e sufficientemente grandi.

12 Insertion-Sort è anche superiore a Merge-Sort per array piccoli in quanto le costanti a', b', c' in sono generalmente molto maggiori delle costanti a", b" e c" in. Questo suggerisce una modifica di Merge-Sort in cui le porzioni di array di dimensione minore di una certa costante k si ordinano con Insertion-Sort invece di usare ricorsivamente Merge-Sort.

13 Soluzione3: Algoritmo Merge-Ins-Sort Merge-Ins-Sort(A,p,r) if p < r if r-p+1 < 32 InsertSort(A,p,r) else q = (p+r)/2 Merge-Ins-Sort(A,p,q) Merge-Ins-Sort(A,q+1,r) Merge(A,p,q,r)

14 Soluzione: Algoritmo Heap-Sort Un array A[1..n] può essere interpretato come un albero binario: A[1] è la radice, A[2i] e A[2i+1] sono i figli di A[i] A[ i / 2 ] è il padre di A[i]

15 a 10 a 11 a9a9 a 12 a2a2 a8a8 a4a4 a5a5 a6a6 a7a7 a3a3 a1a1 a1a1 a2a2 a3a3 a4a4 a5a5 a6a6 a7a7 a8a8 a9a9 a 10 a 11 100 2 1212 10 2 11 2 101 2 1 2 3 4 5 6 7 8 9 10 11 12 1100 2 110 2 111 2 1000 2 1001 2 1010 2 1011 2 Albero binario quasi completo

16 A[i] è maggiore o uguale di ogni suo discendente in A[1..n] Proprietà di un heap (mucchio) Diciamo che A[1..n] è un (è ordinato a) max-heap se ogni elemento A[i] soddisfa la seguente proprietà: Per brevità indicheremo questa proprietà con H(i)

17 6132 8 4 5740 7 9982757404361 4 1 23 5 1 2 3 4 5 6 7 8 9 10 11 12 12 67 891011 Un max-heap

18 7134 6 4 8927 0 5 564089274371 4 1 23 5 1 2 3 4 5 6 7 8 9 10 11 12 12 67 891011 2 2 4 2 24 2 9 92 98 89 8 0 08 7 0 07 0 6 60 9 6 69 7 6 67 6 5 56 9 5 59 8 5 58 5 5 Costruzione di un max-heap


Scaricare ppt "Merge-Sort(A,p,r) if p < r q = (p+r)/2 Merge-Sort(A,p,q) Merge-Sort(A,q+1,r) Merge(A,p,q,r)"

Presentazioni simili


Annunci Google