Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Algoritmi come soluzioni di problemi computazionali. INTRODUZIONE Esempio1: problema dellordinamento. Input: a 1,a 2,...,a n Output: a' 1,a' 2,...,a' n permutazione (riarrangiamento) di a 1,a 2,...,a n tale che a' 1 a' 2... a' n.
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Soluzione1: Algoritmo InsertionSort. InsertionSort (A) n lunghezza[A] for j 2 to n do inserisce A[j] nella sequenza ordinata A[1..j-1] x A[j] i j - 1 while i 1 and x < A[i] do A[i+1] A[i] i i – 1 A[i+1] x
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl InsertionSort (A) n lunghezza[A] for j 2 to n do inserisce A[j] nella sequenza ordinata A[1..j-1] x A[j] i j – 1 while i 1 and x < A[i] do A[i+1] A[i] i i – 1 A[i+1] x void InsertionSort (vector A) { int i,j,n = A.size(); tipo x; for (j = 1; j < n; j++) { // inserisce A[j] nella sequenza // ordinata A[0..j-1] x = A[j]; i = j – 1; while (i >= 0 && x < A[i]) { A[i+1] = A[i]; i--; } A[i+1] = x; }
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl x x x x x x x x InsertionSort (A) n lunghezza (A) for j 2 to n do inserisce A[j] nella sequenza ordinata A[1..j-1] x A[j] i j – 1 while i 1 and x < A[i] do A[i+1] A[i] i i – 1 A[i+1] x
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl x 3 61 x x x x x InsertionSort (A) n lunghezza (A) for j 2 to n do inserisce A[j] nella sequenza ordinata A[1..j-1] x A[j] i j – 1 while i 1 and x < A[i] do A[i+1] A[i] i i – 1 A[i+1] x x
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Analisi di InsertionSort: correttezza InsertionSort (A) n lunghezza [A] A contiene a 1,a 2,..., a n for j 2 to n do A[1..j-1] è un permutazione ordinata di a 1,..., a j-1 x A[j] i j - 1 A[1..i] è un permutazione ordinata di a 1,..., a j-1 x = a j e i = j-1 Correttezza InsertionSort
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl A[1..i] è un permutazione ordinata di a 1,..., a j-1 x = a j e i = j-1 while i 1 and x < A[i] do A[1..i]A[i+2..j] è permutazione ordinata di a 1,..., a j-1, x = a j, 1 i < j e x < A[i] A[i+1] A[i] A[1..i-1]A[i+1..j] è permutazione ordinata di a 1,..., a j-1, x = a j, 1 i < j e x < A[i+1] i i – 1 A[1..i]A[i+2..j] è permutazione ordinata di a 1,..., a j-1, x = a j, 0 i < j e x < A[i+2] A[1..i]A[i+2..j] è permutazione ordinata di a 1,..., a j-1, x = a j, i < j e o i = 0 oppure A[i] x
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl A[1..i]A[i+2..j] è permutazione ordinata di a 1,..., a j-1, x = a j, i < j e o i = 0 oppure A[i] x A[1..i]·x·A[i+2..j] è permutazione ordinata di a 1,..., a j A[i+1] x A[1..j] è permutazione ordinata di a 1,..., a j A[1..j] è permutazione ordinata di a 1,..., a j e j = n A[1..n] è permutazione ordinata di a 1,..., a n
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Analisi di InsertionSort: complessità InsertionSort (A) n lunghezza(A) for j 2 to n do x A[j] i j - 1 while i 1 and x < A[i] do A[i+1] A[i] i i – 1 A[i+1] x
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Analisi di InsertionSort: complessità InsertionSort (A) n lunghezza(A) for j 2 to n do x A[j] i j - 1 while i 1 and x < A[i] do A[i+1] A[i] i i – 1 A[i+1] x
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl caso migliore:
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl caso peggiore:
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl caso medio:
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Soluzione2: Algoritmo MergeSort. MergeSort (A,p,r) if p < r then q (p+r)/2 MergeSort (A,p,q) MergeSort (A,q+1,r) Merge(A,p,q,r)
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Merge (A,p,q,r) n 1 q – p + 1 n 2 r – q for i 1 to n 1 do L[i] A[p + i – 1] for j 1 to n 2 do R[j] A[q + j] L[n 1 + 1] R[n 2 + 1]
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl i j 1 for k p to r do if L[i] R[j] then A[k] L[i] i i + 1 else A[k] R[j] j j + 1
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl MergeSort (A,p,r) Analisi: correttezza A[p..r] contiene una sequenza a p,...,a r di n = r – p + 1 elementi if p < r then altrimenti n 1 e a p,...,a r è già ordinata q (p+r)/2 n 1 = q – p + 1 < n ed n 2 = r – q < n MergeSort (A,p,q) MergeSort (A,q+1,r) A[p..q] è una permutazione ordinata di a p,...,a q A[q+1..r] è una permutazione ordinata di a q+1,...,a r Merge(A,p,q,r) A[p..r] è una permutazione ordinata di a p,...,a r
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Merge (A,p,q,r) Analisi: correttezza A[p..q] contiene a p,...,a q ordinata A[q+1..r] contiene a q+1,...,a r ordinata n 1 q – p + 1 n 2 r – q for i 1 to n 1 do L[i] A[p + i – 1] for j 1 to n 2 do R[j] A[q + j] L[1..n 1 ] contiene a p,...,a q R[1.. n 2 ] contiene a q+1,...,a r L[n 1 +1] R[n 2 +1] L[1..n 1 +1] contiene a p,...,a q, ed R[1.. n 2 +1] contiene a q+1,...,a r,
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl i j 1 for k p to r do i n 1 +1, j n 2 +1, k = p+i+j-2 A[p..k-1] è permutazione ordinata di L[1..i-1] R[1..j-1] ed A[p..k-1] min(L[i],R[j]) if L[i] R[j] then i n 1 A[k] L[i] i i + 1 else j n 2 A[k] R[j] j j + 1 i = n 1 +1, j = n 2 +1, k = r+1 A[p..r] è una permutazione ordinata di L[1..n 1 ] R[1.. n 2 ] A[p..r] è una permutazione ordinata di a p,...,a r
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Analisi: complessità Merge (A,p,q,r) n 1 q – p + 1 n 2 r – q for i 1 to n 1 do L[i] A[p + i – 1] for j 1 to n 2 do R[j] A[q + j] L[n 1 +1] R[n 2 +1]
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl i j 1 for k p to r do if L[i] R[j] then A[k] L[i] i i + 1 else A[k] R[j] j j + 1
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Analisi: complessità MergeSort (A,p,r) if p < r then q (p+r)/2 MergeSort (A,p,q) MergeSort (A,q+1,r) Merge(A,p,q,r)
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Analisi: complessità MergeSort (A,p,r) if p < r then q (p+r)/2 MergeSort (A,p,q) MergeSort (A,q+1,r) Merge(A,p,q,r)
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl dunque esiste N tale che per ogni n > N. Quindi, qualunque siano i valori delle costanti a, b, c, a', b' e c' lalgoritmo MergeSort è superiore a InsertSort per array di dimensione sufficientemente grande.
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl 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 · anni30s
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl dunque esiste N tale che per ogni n > N. Quindi, qualunque siano i valori delle costanti a, b, c, a', b' e c' lalgoritmo InsertSort è superiore a MergeSort per array (quasi) ordinati e sufficientemente grandi.
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl InsertSort è pure superiore a MergeSort per array di piccola dimensione in quanto le costanti a, b, c in sono generalmente molto maggiori delle costanti a', b' e c' in Questo suggerisce una modifica di MergeSort in cui per ordinare porzioni di array di dimensione minore di una certa costante k si usa InsertSort invece di usare ricorsivamente MergeSort.
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Soluzione3: Algoritmo MergeInsSort. MergeInsSort MergeInsSort (A,p,r) if p < r then if r-p+1 < 32 then InsertSort(A,p,r) else q (p+r)/2 MergeInsSort (A,p,q) MergeInsSort (A,q+1,r) Merge(A,p,q,r)
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl E possibile ridurre le costanti di MergeSort utilizzando una versione bottom-up iterativa invece della versione top-down ricorsiva. La versione bottom-up iterativa è la seguente: Allinizio larray è suddiviso in n segmenti di 2 0 = 1 elementi che sono ovviamente ordinati. Ripete quindi la seguente operazione: se larray è suddiviso in segmenti ordinati di 2 k elementi ciascuno usa Merge per riunire a due a due tali segmenti ottenendo un array suddiviso in segmenti ordinati di 2 k+1 elementi ciascuno. Quando 2 k n larray è ordinato.
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Soluzione4: Algoritmo MergeSortBin. MergeSortBin (A) n length(A), b 1 while b < n do A è ordinato a blocchi lunghi b MergeBin(A,B,b) b 2·b B è ordinato a blocchi lunghi b MergeBin(B,A,b) b 2·b A è ordinato
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl MergeBin (A,B,b) n length(A), k 0 while k < n do A[k+1..n] è ordinato a blocchi lunghi b B[1..k] è ordinato a blocchi lunghi 2·b i k p min(i+b,n) j p q min(j+b,n) while i+1 p and j+1 q do k k + 1 if A[i+1] A[j+1] then i i + 1 B[k] A[i] else j j + 1 B[k] A[j] while i+1 p do k k + 1 i i + 1 B[k] A[i] while j+1 q do k k + 1 j j + 1 B[k] A[j]
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl b = b = b = b = b = b = b = 4
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Algoritmo MergeSortBin su file MergeSortBinFile (A) A file b 1 do A è ordinato a blocchi lunghi b Distribuisci(A, B, C, b) nb Riunisci(B, C, A, b) A è ordinato a blocchi lunghi 2·b b 2·b A è ordinato a blocchi lunghi b e contiene nb blocchi while nb > 1 MergeSort binario
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Distribuisci (A, B, C, b) rewind(A) while not eof(A) do i 1 while i b and not eof(A) do read(A, x), write(B, x) i i +1 i 1 while i b and not eof(A) do read(A, y), write(C, y) i i +1
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl Riunisci (B,C,A,b) rewind(B), fB eof(B), if not fB then read(B, x) rewind(C), fC eof(C), if not fC then read(C, y) nb 0 while not fC do i 1, j 1, nb nb+1 while i b and not fB and j b and not fC do if x y then write(A, x), fB eof(B), if not fB then read(B, x) else write(A, y), fC eof(C), if not fC then read(C, y)
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl while i b and not fB do write(A, x), fB eof(B), if not fB then read(B, x) while j b and not fC do write(A, y), fC eof(C), if not fC then read(C, y) if not fB then nb nb +1 while not fB do write(A, x), fB eof(B), if not fB then read(B, x) return nb