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 R A[p..q]A[q+1..r] 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 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 s0.033 s s0.664 s ms 10 s s 133 s · m20ms · s · anni30s

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 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 Un max-heap

18 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