Chapter Mergesort. Divide and Conquer. Divide-and-Conquer. Divide and Conquer. Divide-and-conquer. Dividere il problema in diverse parti.

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Chapter Mergesort. Divide and Conquer. Divide-and-Conquer. Divide and Conquer. Divide-and-conquer. Dividere il problema in diverse parti."

Transcript

1 Divide-and-Conquer Chapter 5 Divide and Conquer Divide-and-conquer. Dividere il problema in diverse parti. Divide et impera. Veni, vidi, vici. - Giulio Cesare Risolvere ogni parte ricorsivamente. Combinare le soluzioni dei sottoproblemi in soluzioni globali. Uso più comune. Dividere il problema di tagli n in due parti uguali di taglia n/2. Risolvere ogni parte ricorsivamente. Combinare le soluzioni dei sottoproblemi in soluzioni globali in tempo lineare. Efficienza. Algoritmo naïve: O(n 2 ). Divide-and-conquer: O(n log n). 1 2 Divide and Conquer Algoritmi che vedremo: Mergesort Quicksort Counting Inversions Closest Pair of Points Integer Multiplication Matrix Multiplication 5.1 Mergesort Esercizi: Potenze di un numero Numeri di Fibonacci Massima Sottosequenza Massimi in 2-D Defective Chessboards 3

2 Ordinamento Mergesort Ordinamento. Dati n elementi, disporli in ordine crescente. Applicazioni ovvie: List files in a directory. Organize an MP3 library. List names in a phone book. Display Google PageRank results. Problemi più semplici dopo ordinamento. Find the median. Find the closest pair. Binary search in a database. Identify statistical outliers. Find duplicates in a mailing list. Applicazioni non-ovvie: Data compression. Computer graphics. Interval scheduling. Computational biology. Minimum spanning tree. Supply chain management. Simulate a system of particles. Book recommendations on Amazon. Load balancing on a parallel computer.... Mergesort. Dividere array in due metà. Ricorsivamente ordina ogni metà. Merge due metà per ottenere tutta la sequenza ordinata. Jon von Neumann (1945) A L G O R I T H M S A L G O R I T H M S A G L O R H I M S T A G H I L M O R S T 5 6 MergeSort (esempio) - 1 MergeSort (esempio)

3 MergeSort (esempio) - 3 MergeSort (esempio) MergeSort (esempio) - 5 MergeSort (esempio)

4 MergeSort (esempio) - 7 MergeSort (esempio) MergeSort (esempio) - 9 MergeSort (esempio)

5 MergeSort (esempio) - 11 MergeSort (esempio) MergeSort (esempio) - 13 MergeSort (esempio)

6 MergeSort (esempio) - 15 MergeSort (esempio) MergeSort (esempio) - 17 MergeSort (esempio)

7 MergeSort (esempio) - 19 MergeSort (esempio) MergeSort (esempio) - 21 MergeSort (esempio)

8 Mergesort Mergesort Mergesort. Dividere array in due metà. Ricorsivamente ordina ogni metà. Merge due metà per ottenere tutta la sequenza ordinata. Mergesort. Dividere array in due metà. Ricorsivamente ordina ogni metà. Merge due metà per ottenere tutta la sequenza ordinata. Jon von Neumann (1945) Jon von Neumann (1945) Merge Merge Merging. Combina due liste ordinate in un unica lista ordinata. Come effettuare il merge efficientemente? Uso di un array temporaneo. Merge. Mantenere traccia dellelemento più piccolo in ogni metà ordinata. Inserire il più piccolo dei due elementi in un. Ripetere fino a terminare gli elementi nelle due metà. A G L O R H I M S T A G H I smallest A G L O R smallest H I M S T A 31 32

9 Merge Merge Merge. Mantenere traccia dellelemento più piccolo in ogni metà ordinata. Inserire il più piccolo dei due elementi in un. Ripetere fino a terminare gli elementi nelle due metà. Merge. Mantenere traccia dellelemento più piccolo in ogni metà ordinata. Inserire il più piccolo dei due elementi in un. Ripetere fino a terminare gli elementi nelle due metà. smallest smallest smallest smallest A G L O R H I M S T A G L O R H I M S T A G A G H Merge Merge Merge. Mantenere traccia dellelemento più piccolo in ogni metà ordinata. Inserire il più piccolo dei due elementi in un. Ripetere fino a terminare gli elementi nelle due metà. Merge. Mantenere traccia dellelemento più piccolo in ogni metà ordinata. Inserire il più piccolo dei due elementi in un. Ripetere fino a terminare gli elementi nelle due metà. smallest smallest smallest smallest A G L O R H I M S T A G L O R H I M S T A G H I A G H I L 35 36

10 Merge Merge Merge. Mantenere traccia dellelemento più piccolo in ogni metà ordinata. Inserire il più piccolo dei due elementi in un. Ripetere fino a terminare gli elementi nelle due metà. Merge. Mantenere traccia dellelemento più piccolo in ogni metà ordinata. Inserire il più piccolo dei due elementi in un. Ripetere fino a terminare gli elementi nelle due metà. smallest smallest smallest smallest A G L O R H I M S T A G L O R H I M S T A G H I L M A G H I L M O Merge Merge Merge. Mantenere traccia dellelemento più piccolo in ogni metà ordinata. Inserire il più piccolo dei due elementi in un. Ripetere fino a terminare gli elementi nelle due metà. Merge. Mantenere traccia dellelemento più piccolo in ogni metà ordinata. Inserire il più piccolo dei due elementi in un. Ripetere fino a terminare gli elementi nelle due metà. smallest smallest prima metà terminata smallest A G L O R H I M S T A G L O R H I M S T A G H I L M O R A G H I L M O R S 39 40

11 Merge Merge Merge. Mantenere traccia dellelemento più piccolo in ogni metà ordinata. Inserire il più piccolo dei due elementi in un. Ripetere fino a terminare gli elementi nelle due metà. Merge. Mantenere traccia dellelemento più piccolo in ogni metà ordinata. Inserire il più piccolo dei due elementi in un. Ripetere fino a terminare gli elementi nelle due metà. prima metà terminata smallest prima metà terminata seconda metà terminata A G L O R H I M S T A G L O R H I M S T A G H I L M O R S T A G H I L M O R S T Merge Merging. Combina due liste ordinate in un unica lista ordinata. Come effettuare il merge efficientemente? Numero lineare di confronti. Uso di un array temporaneo. A G L O R H I M S T Mergesort. Dividere array in due metà. Mergesort Ricorsivamente ordina ogni metà. Merge due metà per ottenere tutta la sequenza ordinata. Definizione. T(n) = numero di confronti mergesort per input di n elementi. A L G O R I T H M S Jon von Neumann (1945) A G H I A L G O R I T H M S dividi O(1) A G L O R H I M S T ordina 2T(n/2) A G H I L M O R S T merge O(n) 43 44

12 Una utile relazione di ricorrenza Prova con Albero di Ricorsione Definizione. T(n) = numero di confronti mergesort per input n elementi. Ricorrenza del Mergesort. T(n) ' 0 se n =1 ) ( T ( # n /2$ ) + T ( % n /2& ) + cn altrimenti * ) risolvi parte sinistra risolvi parte destra merge T(n) ' ) ( * ) 0 se n =1 T ( # n /2$ ) + T ( % n /2& ) + cn altrimenti risolvi parte sinistra risolvi parte destra merge T(n) cn Soluzione. T(n) = O(n log 2 n). T(n/2) T(n/2) cn Varie prove. Descriviamo vari modi per risolvere questa ricorrenza. Iniziamente assumiamo che n è una potenza di 2 e sostituiamo con =. T(n/4) c n/2 T(n/4) T(n/4) c n/2 T(n/4) Prova con Albero di Ricorsione Prova con Albero di Ricorsione T(n) ' 0 se n =1 ) ( T ( # n /2$ ) + T ( % n /2& ) + cn altrimenti * ) risolvi parte sinistra risolvi parte destra merge T(n) ' 0 se n =1 ) ( T ( # n /2$ ) + T ( % n /2& ) + cn altrimenti * ) risolvi parte sinistra risolvi parte destra merge cn cn cn cn c n/2 c n/2 2 c(n/2) c n/2 c n/2 2 c(n/2) c n/4 c n/4 c n/4 c n/4 h+1 4 c(n/4)... c n/4 c n/4 c n/4 c n/4 h+1 4 c(n/4)... c n / 2 k 2 k c(n / 2 k ) c n / 2 k 2 k c(n / 2 k ) c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2 n/2 c(2) c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2 n/2 c(2) Altezza albero h? cn (h+1) Altezza albero h? n / 2 h = 2 cioè h = log 2 n - 1 cn (h+1) 47 48

13 Prova con metodo iterativo Prova con sequenza telescopica Claim. T(n) = c n log 2 n. (assumiamo n potenza di 2) Claim. T(n) = c n log 2 n. (assumiamo n potenza di 2) T(n) ' 0 se n =1 ) ( T ( # n /2$ ) + T ( % n /2& ) + cn altrimenti * ) risolvi parte sinistra risolvi parte destra merge T(n) ' 0 se n =1 ) ( T ( # n /2$ ) + T ( % n /2& ) + cn altrimenti * ) risolvi parte sinistra risolvi parte destra merge T(n) = cn + 2T(n/2) = cn + 2(cn/2 + 2T(n/4)) = cn + cn + 4T(n/4) = cn + cn + 4(n/4 + 2T(n/8)) = cn + cn + cn + 8T(n/8) = = icn + 2 i T(n/2 i ) = kcn + 2 k T(1) = c n lg n + n T(1) = c n log 2 n n = 2 k lg n = lg (2 k ) lg n = k lg 2 lg n = k Prova. Per n > 1: T (n) n = = = = 2T (n /2) n T (n /2) n /2 T (n / 4) n / 4 T (n /n) n /n = clog 2 n + c + c + c + c + c ++ c log 2 n T (n /2) n /2 = T (n / 4) n / 4 + c Prova per induzione Analisi della ricorrenza del Mergesort Claim. T(n) = n log 2 n. (assumiamo n potenza di 2) Claim. T(n) c n "log n#. (logaritmo in base 2, cioè log = log 2 ) T(n) ' 0 se n =1 ) ( T ( # n /2$ ) + T ( % n /2& ) + cn altrimenti * ) risolvi parte sinistra risolvi parte destra merge T(n) ' 0 se n =1 ) ( T ( # n /2$ ) + T ( % n /2& ) + cn altrimenti * ) risolvi parte sinistra risolvi parte destra merge Prova. (per induzione su n) Caso base: n = 1. Ipotesi induttiva: T(n) = c n log 2 n. Obiettivo: mostrare che T(2n) = c 2n log 2 (2n). T (2n) = 2T (n) + c2n = c2n log 2 n + c2n ( ) + c2n = c2n log 2 (2n) 1 = c2n log 2 (2n) Prova. (per induzione su n) Caso base: n = 1. Definiamo n 1 = $n / 2%, n 2 = "n / 2#. Passo induzione: assumiamo che sia vero per 1, 2,..., n 1. T (n) T (n 1 ) + T (n 2 ) + cn cn 1 # logn 1 $ + cn 2 # log n 2 $ + cn cn 1 # logn 2 $ + cn 2 # log n 2 $ + cn = cn # log n 2 $ + cn cn( # logn$ 1 ) + cn = cn# log n$ n 2 =!" n / 2#$! " 2!" logn #$ / 2 # $ = 2 logn!" #$ / 2 logn 2!" logn#$

14 Risoluzione ricorrenze della forma dove a 1, b > 1, f(n) > 0 Master s method! T(n) = at n $ # & + f(n) " b% Risoluzione ricorrenze della forma dove a 1, b > 1, f(n) > 0 Master s method! T(n) = at n $ # & + f(n) " b% Caso 1: se f(n) = O(n log b a -ε ) per qualche ε > 0, allora T(n) = Θ(n log b a ) Caso 2: se f(n) = Θ(n log b a ), allora T(n) = Θ(n log b a lg n) Caso 3: se f(n) = Ω(n log b a +ε ) per qualche ε > 0, e se af(n/b) cf(n) per qualche c < 1 e tutti gli n sufficientemente grandi, allora T(n) = Θ(f(n)) Master s method Risoluzione ricorrenze della forma dove a 1, b > 1, f(n) > 0! T(n) = at n $ # & + f(n) " b% 5.3 Counting Inversions Caso 1: se f(n) = O(n log b a -ε ) per qualche ε > 0, allora T(n) = Θ(n log b a ) Caso 2: se f(n) = Θ(n log b a ), allora T(n) = Θ(n log b a lg n) Caso 3: se f(n) = Ω(n log b a +ε ) per qualche ε > 0, e se af(n/b) cf(n) per qualche c < 1 e tutti gli n sufficientemente grandi, allora T(n) = Θ(f(n)) Esempio: T(n) = 2T(n/2) + n a = 2, b = 2 Confrontiamo n log 2 2 con f(n) = n Abbiamo f(n) = Θ(n), quindi Caso 2 T(n) = Θ(n lg n) 55

15 Conteggio Inversioni Applicazioni Sito musica cerca di fare un match delle preferenze musicali di utenti. Ognuno classifica n brani. Sito musica consulta il data base per cercare liste di preferenze simili di utenti. Metrica di similarità: numero di inversioni tra due liste di preferenza. Primo rank: 1, 2,, n. Secondo rank: a 1, a 2,, a n. Brano i and j invertiti se i < j, ma a i > a j. Brani io tu A B C D E Inversioni 3-2, 4-2 Applicazioni. Voting theory. Collaborative filtering. Measuring the "sortedness" of an array. Sensitivity analysis of Google's ranking function. Rank aggregation for meta-searching on the Web. Nonparametric statistics (e.g., Kendall's Tau distance). Algoritmo Brute force : controlla tutte le Θ(n 2 ) coppie i e j Conteggio Inversioni Conteggio Inversioni: Divide-and-Conquer Divide-and-conquer

16 Conteggio Inversioni: Divide-and-Conquer Conteggio Inversioni: Divide-and-Conquer Divide-and-conquer. Divide: dividi lista in due parti. Divide-and-conquer. Divide: dividi lista in due parti. Conquer: conta ricorsivamente le inversioni in ogni parte Divide: O(1) Divide: O(1) Conquer: 2 T(n / 2) 5 inversioni blu-blu 8 inversioni verde-verde 5-4, 5-2, 4-2, 8-2, , 9-3, 9-7, 12-3, 12-7, 12-11, 11-3, Conteggio Inversioni: Divide-and-Conquer Conteggio Inversioni: Combine Divide-and-conquer. Divide: dividi lista in due parti. Conquer: conta ricorsivamente le inversioni in ogni parte. Combine: conta le inversioni dove a i e a j sono in parti diverse, e restituisci la somma dele tre quantità. Combine: conteggio inversioni blu-verde Assumiamo che ogni metà è ordinata. Contiamo le inversioni dove a i e a j sono in Merge due parti ordinate in una sola sequenza ordinata. per mantenere linvariante dell ordinamento Divide: O(1) inversioni blu-blu 8 inversioni verde-verde Conquer: 2 T(n / 2) 9 inversioni blu-verde 5-3, 4-3, 8-6, 8-3, 8-7, 10-6, 10-9, 10-3, 10-7 Combine:??? Total = =

17 Merge and Count Merge and Count Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. i = 6 i = Totale: Totale: Merge and Count Merge and Count Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. i = 6 i = Totale: 6 Totale:

18 Merge and Count Merge and Count Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. i = 5 i = Totale: 6 Totale: Merge and Count Merge and Count Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. i = 4 i = Totale: 6 Totale:

19 Merge and Count Merge and Count Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. i = 3 i = Totale: 6 Totale: Merge and Count Merge and Count Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. i = 3 i = Totale: Totale:

20 Merge and Count Merge and Count Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. i = 2 i = Totale: Totale: Merge and Count Merge and Count Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. i = 2 i = Totale: Totale:

21 Merge and Count Merge and Count Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. i = 2 i = Totale: Totale: Merge and Count Merge and Count Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. i = 1 i = Totale: Totale:

22 Merge and Count Merge and Count Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. prima metà terminata i = 0 i = Totale: Totale: Merge and Count Merge and Count Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. i = 0 i = Totale: Totale:

23 Merge and Count Conteggio Inversioni: Combine Passo di merge and count. Date due parti ordinate, contiamo le inversioni dove a i e a j sono in Combiniamo due parti ordinate in una sola sequenza ordinata. Combine: conteggio inversioni blu-verde Assumiamo che ogni metà è ordinata. Contiamo le inversioni dove a i e a j sono in Merge due parti ordinate in una sola sequenza ordinata. per mantenere l invariante dellordinamento i = inversioni blu-verde: Totale: = Conteggio Inversioni: Combine Conteggio Inversioni Combine: conteggio inversioni blu-verde Assumiamo che ogni metà è ordinata. Contiamo le inversioni dove a i e a j sono in Merge due parti ordinate in una sola sequenza ordinata. Algorithm 5.1, page 224 per mantenere linvariante dellordinamento inversioni blu-verde: Conteggio: O(n) Merge: O(n) T(n) T( # n/2$ ) + T( % n/2& ) + O(n) T(n) = O(nlog n) 91 92

24 Conteggio Inversioni: Implementation Pre-condizione. [Merge-and-Count] A e B sono ordinati. Post-condizione. [Sort-and-Count] L è ordinato. 5.4 Closest Pair of Points Sort-and-Count(L) { if lista L ha un solo elemento return 0 e la lista L Divide la lista in due metà A e B (r A, A) Sort-and-Count(A) (r B, B) Sort-and-Count(B) (r B, L) Merge-and-Count(A, B) } return r = r A + r B + r e la lista ordinata L 93 Coppia di punti più vicini Coppia di punti più vicini Coppia più vicina. Dati n punti nel piano, trovare una coppia con la più piccola distanza euclidea tra loro. Primitiva geometrica fondamentale. Grafica, computer vision, sistemi informativi geografici, modellazione molecolare, controllo traffico aereo. Brute force. Controllare tutte le coppie di punti p e q. Complessità Θ(n 2 ). Coppia più vicina. Dati n punti nel piano, trovare una coppia con la più piccola distanza euclidea tra loro. Primitiva geometrica fondamentale. Grafica, computer vision, sistemi informativi geografici, modellazione molecolare, controllo traffico aereo. Brute force. Controllare tutte le coppie di punti p e q. Complessità Θ(n 2 ). Versione 1-D. Facile se i punti sono su una linea, O(n log n). Come? 95 96

25 Coppia di punti più vicini Coppia di punti più vicini Coppia più vicina. Dati n punti nel piano, trovare una coppia con la più piccola distanza euclidea tra loro. Coppia più vicina. Dati n punti nel piano, trovare una coppia con la più piccola distanza euclidea tra loro. Primitiva geometrica fondamentale. Grafica, computer vision, sistemi informativi geografici, modellazione molecolare, controllo traffico aereo. Primitiva geometrica fondamentale. Grafica, computer vision, sistemi informativi geografici, modellazione molecolare, controllo traffico aereo. Brute force. Controllare tutte le coppie di punti p e q. Complessità Θ(n 2 ). Brute force. Controllare tutte le coppie di punti p e q. Complessità Θ(n 2 ). Versione 1-D. Facile se i punti sono su una linea, O(n log n). Come? 1. Ordinamento 2. Minimo tra tutte le distanze tra punti successivi Esempio Input: 5, 20, 10, 7, 2, 13 Ordinamento: 2, 5, 7, 10, 13, 20 Minimo tra tutte le distanze tra ogni punto ed il successivo: min {3, 2, 3, 3, 7} = 2 Versione 1-D. Facile se i punti sono su una linea, O(n log n). Assunzione. Punti con diverse coordinate x. per semplificare la presentazione. Altrimenti rotazione oppure estendere algoritmo Problema considerato da M. I. Shamos e D. Hoey, inizio anni 70. Lalgoritmo O(n log n) che vedremo è essenzialmente la loro soluzione Coppia di punti più vicini: Primo tentativo Coppia di punti più vicini: Primo tentativo Divide. Dividiamo la regione in 4 quadranti. Divide. Dividiamo la regione in 4 quadranti Ostacolo. Impossibile assicurare n/4 punti in ogni parte. L L

26 Coppia di punti più vicini Coppia di punti più vicini Algoritmo. Divide: disegnare linea verticale L cosi che ci sono circa n/2 punti in ogni parte. Algoritmo. Divide: disegnare linea verticale L cosi che ci sono circa n/2 punti in ogni parte. Conquer: trovare ricorsivamente la coppia più vicina in ogni parte. L L Coppia di punti più vicini Coppia di punti più vicini Algoritmo. Divide: disegnare linea verticale L cosi che ci sono circa n/2 punti in ogni parte. Conquer: trovare ricorsivamente la coppia più vicina in ogni parte. Combine: trovare la coppia più vicina con un punto in ogni parte. Restituisci la migliore delle 3 soluzioni. L Algoritmo. Divide: disegnare linea verticale L cosi che ci sono circa n/2 punti in ogni parte. Conquer: trovare ricorsivamente la coppia più vicina in ogni parte. Combine: trovare la coppia più vicina con un punto in ogni parte. Restituisci la migliore delle 3 soluzioni. L sembra Θ(n 2 )

27 Coppia di punti più vicini Coppia di punti più vicini Trovare la coppia più vicina con un punto in ogni parte, assumendo che la distanza sia < δ. Trovare la coppia più vicina con un punto in ogni parte, assumendo che la distanza sia < δ. Observazione: è inutile considerare punti oltre distanza δ da L. L L δ = min(12, 21) 12 δ = min(12, 21) 105 δ 106 Coppia di punti più vicini Coppia di punti più vicini Trovare la coppia più vicina con un punto in ogni parte, assumendo che la distanza sia < δ. Observazione: è inutile considerare punti oltre distanza δ da L. Ordinare punti nella striscia 2δ per coordinata y. Trovare la coppia più vicina con un punto in ogni parte, assumendo che la distanza sia < δ. Observazione: è inutile considerare punti oltre distanza δ da L. Ordinare punti nella striscia 2δ per coordinata y. Considerare solo i punti entro 11 posizioni nella lista ordinata! L L δ = min(12, 21) 12 3 δ = min(12, 21) δ 107 δ 108

28 Coppia di punti più vicini Coppia di punti più vicini Definizione. Sia s i il punto nella striscia 2δ, con la i-esima più piccola coordinata y. Definizione. Sia s i il punto nella striscia 2δ, con la i-esima più piccola coordinata y. Claim. Se i j 12, allora la distanza tra s i ed s j è almeno δ. 2 righe j ½δ ½δ Claim. Se i j 12, allora la distanza tra s i ed s j è almeno δ. Prova. Non ci sono due punti nello stesso quadrato 1 ½δ-per-½δ (distanza max ). 2 δ 2 < δ i ½δ δ δ Coppia di punti più vicini Coppia di punti più vicini Definizione. Sia s i il punto nella striscia 2δ, con la i-esima più piccola coordinata y. Definizione. Sia s i il punto nella striscia 2δ, con la i-esima più piccola coordinata y. Claim. Se i j 12, allora la distanza tra s i ed s j è almeno δ. Prova. Non ci sono due punti nello stesso quadrato 1 ½δ-per-½δ (distanza max ). 2 δ 2 < δ Due punti con almeno due righe tra loro 2 righe hanno distanza 2(½δ). Se vi è al massimo una riga tra loro, i allora i j j ½δ ½δ ½δ Claim. Se i j 12, allora la distanza tra s i ed s j è almeno δ. Prova. Non ci sono due punti nello stesso quadrato 1 ½δ-per-½δ (distanza max ). 2 δ 2 < δ Due punti con almeno due righe tra loro 2 righe hanno distanza 2(½δ). Se vi è al massimo una riga tra loro, i allora i j j ½δ ½δ ½δ 26 δ 25 δ 111 Nota. Il valore della costante non è molto importante. Claim ancora vero se sostituiamo 11 con 6. L esempio della figura non può accadere Sul testo troviamo 15 al posto di δ 25 δ 112

29 Coppia di punti più vicini: algoritmo Coppia di punti più vicini: complessità algoritmo Indichiamo con T(n) la complessità dellalgoritmo per n punti Closest-Pair(p 1,, p n ) { Calcolare linea di separazione L tale che divide i punti in due parti uguali. δ 1 = Closest-Pair(metà sinistra) δ 2 = Closest-Pair(metà destra) δ = min(δ 1, δ 2 ) Cancellare tutti punti con distanza >δ da L Ordinare i punti rimanenti per coordinata y. Scansione punti ordinati rispetto ad y e confrontare distanza tra ogni punto ed i successivi 11 punti. Se una distanza è <δ, aggiornare δ. Closest-Pair(p 1,, p n ) { Calcolare linea di separazione L tale che divide i punti in due parti uguali. δ 1 = Closest-Pair(metà sinistra) δ 2 = Closest-Pair(metà destra) δ = min(δ 1, δ 2 ) Cancellare tutti punti con distanza >δ da L Ordinare i punti rimanenti per coordinata y. Scansione punti ordinati rispetto ad y e confrontare distanza tra ogni punto ed i successivi 11 punti. Se una distanza è <δ, aggiornare δ. O(n log n) 2T(n / 2) O(n) O(n log n) O(n) } return δ. } return δ Coppia di punti più vicini: complessità algoritmo Prova con Albero di Ricorsione Complessità algoritmo. T(n) = 2T ( n /2) + O(n log n) T(n) = O(n log 2 n) T(n) 2T( n/2) + O(n log n) T(n) = O(n log 2 n) T(n) c n log n T(n/2) T(n/2) c n log n c (n/2) log (n/2) c (n/2) log (n/2) T(n/4) T(n/4) T(n/4) T(n/4)

30 Prova con Albero di Ricorsione Prova con Albero di Ricorsione T(n) 2T( n/2) + O(n log n) T(n) = O(n log 2 n) T(n) 2T( n/2) + O(n log n) T(n) = O(n log 2 n) c n log n c n log n c n log n c n log n c (n/2) log (n/2) c (n/2) log (n/2) 2 c (n/2) log (n/2) c (n/2) log (n/2) c (n/2) log (n/2) 2 c (n/2) log (n/2) c (n/4) log (n/4) c (n/4) log (n/4) c (n/4) log (n/4) c (n/4) log (n/4) h+1 4 c (n/4) log (n/4) c (n/4) log (n/4) c (n/4) log (n/4) c (n/4) log (n/4) c (n/4) log (n/4) h+1 4 c (n/4) log (n/4) c (n / 2 k ) log (n / 2 k ) 2 k c (n/2 k ) log (n/2 k ) c (n / 2 k ) log (n / 2 k ) 2 k c (n/2 k ) log (n/2 k ) c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2 n/2 c (2) log (2) c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2 n/2 c (2) log (2) Altezza albero h? c h i=1 n log n h cnlogn 2 i 2 i Altezza albero h? n / 2 h = 2 cioè h = log 2 n - 1 c h i=1 n log n hcnlogn 2 i 2 i Coppia di punti più vicini: complessità algoritmo Complessità algoritmo. T(n) 2T( n/2) + O(n log n) T(n) = O(n log 2 n) Domanda. Possiamo ottenere O(n log n)? Coppia di punti più vicini: complessità algoritmo Closest-Pair(p 1,, p n ) { Indichiamo con T(n) la complessità dell algoritmo per n punti Calcolare linea di separazione L tale che divide i punti in due parti uguali. δ 1 = Closest-Pair(metà sinistra) δ 2 = Closest-Pair(metà destra) δ = min(δ 1, δ 2 ) Cancellare tutti punti con distanza >δ da L Ordinare i punti rimanenti per coordinata y. Scansione punti ordinati rispetto ad y e confrontare distanza tra ogni punto ed i successivi 11 punti. Se una distanza è <δ, aggiornare δ. O(n log n) 2T(n / 2) O(n) O(n log n) O(n) } return δ

31 Coppia di punti più vicini: complessità algoritmo Coppia di punti più vicini: algoritmo O(n log n) Complessità algoritmo. P x = lista P ordinata rispetto a coordinata x P y = lista P ordinata rispetto a coordinata y T(n) 2T( n/2) + O(n log n) T(n) = O(n log 2 n) Domanda. Possiamo ottenere O(n log n)? Risposta. Si! Non ordinare punti ogni volta. Due liste ordinate all inizio: rispetto ad x e rispetto ad y Ogni chiamata ricorsiva ritorna due liste: tutti i punti ordinati per coordinata y e tutti i punti ordinati per coordinata x. Estrazione delle due liste ordinate dalla singola lista già ordinata. Q = punti nelle prime " n /2# posizioni in P x R = punti nelle ultime " n /2# posizioni in P x Q x = punti in Q ordinati rispetto ad x Q y = punti in Q ordinati rispetto ad y R x = punti in R ordinati rispetto ad x R y = punti in R ordinati rispetto ad y T(n) 2T( n/2) + O(n) T(n) = O(n log n) Aritmetica su interi: addizione 5.5 Integer Multiplication Addizione. Dati due interi di n-digit a e b, computare a + b. O(n) operazioni su bit Addizione 124

32 Aritmetica su interi: moltiplicazione Moltiplicazione Divide-and-Conquer: Warmup Multiplicazione. Dati due interi di n-digit a e b, computare a b. Soluzione naïve: Θ(n 2 ) operazioni su bit. Per moltiplicare due interi di n-digit: Multiplicare quattro interi di ½n cifre. Addizionare due interi di ½n cifre, e poi shift per ottenere risultato * Multiplicazione x = 2 n /2 x 1 + x 0 y = 2 n /2 y 1 + y 0 ( ) ( 2 n /2 y 1 + y 0 ) = 2 n x 1 y n /2 x 1 y 0 + x 0 y 1 xy = 2 n /2 x 1 + x 0 ( ) T(n) = 4T n /2 + Θ(n) chiamate ricorsive assumiamo n potenza di 2 addizioni, shift T(n) = Θ(n 2 ) ( ) + x 0 y Prova con Albero di Ricorsione Prova con Albero di Ricorsione ( ) T(n) = 4T n /2 + Θ(n) chiamate ricorsive addizioni, shift T(n) = Θ(n 2 ) ( ) T(n) = 4T n /2 + Θ(n) chiamate ricorsive addizioni, shift T(n) = Θ(n 2 ) c n c n T(n) c(n/2) c(n/2) c(n/2) c(n/2) 4 c (n/2) c n T(n/2) T(n/2) T(n/2) T(n/2) c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 c n / 2 k h+1 16 c (n/4) 4 k c (n/2 k ) c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2 4 h c (2) Altezza albero h? c 4 n h 1 i cn 2 i =cn(2 h 1) da ϑ i 2 i i=0 i=0 i=0 = ϑ h 1 ϑ 1 h 1 h

33 Prova con Albero di Ricorsione Moltiplicazione: Algoritmo di Karatsuba ( ) T(n) = 4T n /2 + Θ(n) chiamate ricorsive c n addizioni, shift T(n) = Θ(n 2 ) c n Moltiplicazione di due interi con n cifre: Addizionare due interi con ½n cifre. Multiplicare tre interi con ½n cifre. Addizione, sottrazione, e shift di interi con ½n cifre per ottenere risultato. c(n/2) c(n/2) c(n/2) c(n/2) 4 c (n/2) x = 2 n /2 x 1 + x 0 y = 2 n /2 y 1 + y 0 ( ) + x 0 y 0 xy = 2 n x 1 y n /2 x 1 y 0 + x 0 y 1 c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 h+1 16 c (n/4) ( ) + x 0 y 0 = 2 n x 1 y n /2 (x 1 + x 0 )(y 1 + y 0 ) x 1 y 1 x 0 y 0 A B A C C c n / 2 k 4 k c (n/2 k ) c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2 4 h c (2) h 1 h 1 Altezza albero h? n / 2 h = 2 cioè h = log 2 n - 1 c 4 n i cn 2 i =cn(2 h 1) 2 i i=0 i= Moltiplicazione: Algoritmo di Karatsuba Moltiplicazione: Algoritmo di Karatsuba Moltiplicazione di due interi con n cifre: Addizionare due interi con ½n cifre. Multiplicare tre interi con ½n cifre. Addizione, sottrazione, e shift di interi con ½n cifre per ottenere risultato. Moltiplicazione di due interi con n cifre: Addizionare due interi con ½n cifre. Multiplicare tre interi con ½n cifre. Addizione, sottrazione, e shift di interi con ½n cifre per ottenere risultato. x = 2 n /2 x 1 + x 0 y = 2 n /2 y 1 + y 0 xy = 2 n x 1 y n /2 x 1 y 0 + x 0 y 1 ( ) + x 0 y 0 ( ) + x 0 y 0 = 2 n x 1 y n /2 (x 1 + x 0 )(y 1 + y 0 ) x 1 y 1 x 0 y 0 A B A C C x = 2 n /2 x 1 + x 0 y = 2 n /2 y 1 + y 0 xy = 2 n x 1 y n /2 x 1 y 0 + x 0 y 1 ( ) + x 0 y 0 ( ) + x 0 y 0 = 2 n x 1 y n /2 (x 1 + x 0 )(y 1 + y 0 ) x 1 y 1 x 0 y 0 A B A C C Teorema. [Karatsuba-Ofman, 1962] La complessità dellalgoritmo di moltiplicazione di due interi con n cifre richiede O(n ) operazioni sui bit. Prova. ( ) + T ( n /2 ) + T ( 1+ n /2 ) T(n) T # n /2$ % & % & chiamate ricorsive T(n) = O(n log 2 3 ) = O(n ) + Θ(n) addizioni, suttrazioni, shift

34 Prova con Albero di Ricorsione Prova con Albero di Ricorsione ( ) + T ( n /2 ) + T ( 1+ n /2 ) T(n) T # n /2$ % & % & chiamate ricorsive + Θ(n) addizioni, suttrazioni, shift T(n) T ( # n /2$ ) + T ( % n /2& ) + T ( 1+ % n /2& ) + Θ(n) T(n) = O(n log 2 3 ) = O(n ) chiamate ricorsive addizioni, suttrazioni, shift T(n) = O(n log 2 3 ) = O(n ) c n c n T(n) c(n/2) c(n/2) c(n/2) 3 c (n/2) c n T(n/2) T(n/2) T(n/2) c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 c n / 2 k h+1 9 c (n/4) 3 k c (n/2 k ) c 2 c 2 c 2 c 2 c 2 c 2 3 h c (2) da h 1 ϑ i = ϑ h 1 i=0 ϑ Altezza albero h? n / 2 h h 1 = 2 cioè h = log 2 n - 1 c 3 n i cn h 1 % 3 ' ( i % * 2 i & 2) =O n % ' 3( h ( ' & 2 * * ) log i=0 i=0 & ) " 3% 2 n n $ ' = n 3log 2 n # 2 & 2 = log 2 n 3log n 2 = n log Relazione ricorrenza: caso generale con q>2 T(n) qt ( n /2 ) + cn T(n) = O(n log 2 q ) Matrix Multiplication c n c n c(n/2) c(n/2) c(n/2) q c (n/2) c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 c n/4 h+1 q 2 c (n/4) c n / 2 k q k c (n/2 k ) c 2 c 2 c 2 c 2 c 2 c 2 q h c (2) Altezza albero h? n / 2 h h 1 = 2 cioè h = log 2 n - 1 c q n i cn h 1 % q ' ( i % * i=0 2 i & 2) =O n % ' q( h ( ' & 2 * * ) i=0 & ) # q n % & log 2 n ( = n qlog 2 n $ 2' 2 = log2 n qlog 2 n 135

35 Moltiplicazione di matrici Moltiplicazione di matrici: prima idea Moltiplicazione di matrici. Date due matrici n-per-n A e B, computa C = AB. n c ij = a ik b kj k=1 " c 11 c 12 c 1n % $ ' $ c 21 c 22 c 2n ' = $ ' $ ' # c n1 c n2 c nn & Algoritmo naïve. Θ(n 3 ) operazioni aritmetiche. for i 1 to n for j 1 to n c ij 0 for k 1 to n c ij c ij + a ik b kj " a 11 a 12 a 1n % $ ' $ a 21 a 22 a 2n ' $ ' $ ' # a n1 a n2 a nn & " b b b % n $ ' $ b 21 b 22 b 2n ' $ ' $ # b n1 b n2 ' b nn & Divide-and-conquer. Divide: partizionare A e B in blocchi ½n-per-½n. Conquer: moltiplicare 8 blocchi ½n-by-½n ricorsivamente. Combine: addizionare prodotti usando 4 addizioni tra matrici. " C 11 C 12 % " $ ' = A 11 A 12 % " $ ' B 11 B 12 % $ ' # C 21 C 22 & # A 21 A 22 & # B 21 B 22 & Complessità? ( ) + ( A 12 B 21 ) ( ) + ( A 12 B 22 ) ( ) + ( A 22 B 21 ) ( ) + ( A 22 B 22 ) C 11 = A 11 B 11 C 12 = A 11 B 12 C 21 = A 21 B 11 C 22 = A 21 B 12 Domanda. E possibile fare meglio dell algoritmo naïve? Moltiplicazione di matrici: prima idea Moltiplicazione di matrici: algoritmo efficiente, idea di base Divide-and-conquer. Divide: partizionare A e B in blocchi ½n-per-½n. Conquer: moltiplicare 8 blocchi ½n-by-½n ricorsivamente. Combine: addizionare prodotti usando 4 addizioni tra matrici. Idea di base. Moltiplicare blocchi 2-per-2 di matrici con 7 moltiplicazioni. " C 11 C 12 % " A $ ' = 11 A 12 % " $ ' B 11 B 12 % $ ' P 1 = A 11 (B 12 B 22 ) # C 21 C 22 & # A 21 A 22 & # B 21 B 22 & P 2 = ( A 11 + A 12 ) B 22 " C 11 C 12 % " $ ' = A 11 A 12 % " $ ' B 11 B 12 % $ ' # C 21 C 22 & # A 21 A 22 & # B 21 B 22 & ( ) + ( A 12 B 21 ) ( ) + ( A 12 B 22 ) ( ) + ( A 22 B 21 ) ( ) + ( A 22 B 22 ) C 11 = A 11 B 11 C 12 = A 11 B 12 C 21 = A 21 B 11 C 22 = A 21 B 12 C 11 = P 5 + P 4 P 2 + P 6 C 12 = P 1 + P 2 C 21 = P 3 + P 4 C 22 = P 5 + P 1 P 3 P 7 P 3 = ( A 21 + A 22 ) B 11 P 4 = A 22 (B 21 B 11 ) P 5 = ( A 11 + A 22 ) (B 11 + B 22 ) P 6 = ( A 12 A 22 ) (B 21 + B 22 ) P 7 = ( A 11 A 21 ) (B 11 + B 12 ) Complessità? ( ) T(n) = 8T n /2 chiamate ricorsive + Θ(n 2 ) addizioni, costruzione sottomatrici T(n) = Θ(n 3 ) 7 moltiplicazioni. 18 = addizioni (o sottrazioni)

36 The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the Moltiplicazione di matrici: algoritmo efficiente Moltiplicazione di matrici: algoritmi efficienti in teoria Moltiplicazione efficiente di matrici. (Strassen, 1969) Divide: partizionare A e B in blocchi ½n-per-½n. Compute: 14 matrici ½n-per-½n mediante 10 addizioni di matrici. Conquer: moltiplicare 7 matrici ½n-per-½n ricorsivamente. Combine: 7 prodotti in 4 termini usando 8 addizioni di matrici. Analisi. Assumiamo n potenza di 2. Sia T(n) il numero di operazioni aritmetiche. D. Moltiplicazione due matrici 2-per-2 con solo 7 moltiplicazioni scalari? R. Si! [Strassen, 1969] D. Moltiplicazione due matrici 2-per-2 con solo 6 moltiplicazioni scalari? R. Impossibile. [Hopcroft and Kerr, 1971] Θ(n log 2 6 ) = O(n 2.59 ) D. Due matrici 3-per-3 con solo 21 moltiplicazioni scalari? R. Impossibile. Θ(n log 3 21 ) = O(n 2.77 ) D. Due matrici 70-by-70 con solo moltiplicazioni scalari? R. Si! [Pan, 1980] Θ(n log ) = O(n 2.80 ) ( ) T(n) = 7T n /2 chiamate ricorsive + Θ(n 2 ) addizioni, sottrazioni T(n) = Θ(n log 2 7 ) = O(n 2.81 ) Miglior risultato finora. O(n ) [Coppersmith-Winograd, 1987.] Congettura. O(n 2+ε ) per ogni ε > 0. I miglioramenti teorici a Strassen sono sempre meno pratici Divide-and-Conquer Quicksort Divide-and-conquer. Dividere il problema in diverse parti. Risolvere ogni parte ricorsivamente. Combinare le soluzioni dei sottoproblemi in soluzioni globali. Uso più comune. Dividere il problema di taglia n in due parti. Risolvere ogni parte ricorsivamente. Combinare le soluzioni dei sottoproblemi in soluzioni globali in tempo lineare. 144

37 Ordinamento Quicksort Ordinamento. Dati n elementi, disporli in ordine crescente. Applicazioni ovvie: List files in a directory. Organize an MP3 library. List names in a phone book. Display Google PageRank results. Problemi più semplici dopo ordinamento. Find the median. Find the closest pair. Binary search in a database. Identify statistical outliers. Find duplicates in a mailing list. Applicazioni non-ovvie: Data compression. Computer graphics. Interval scheduling. Computational biology. Minimum spanning tree. Supply chain management. Simulate a system of particles. Book recommendations on Amazon. Load balancing on a parallel computer.... Divide-and-conquer. Divide: dividi lista in due parti, in modo che ogni elemento della prima parte sia di ogni elemento della seconda parte. Conquer: ordina ricorsivamente ognuna delle due parti. Combine: sono già ordinati. Abbiamo già visto il Mergesort come algoritmo di ordinamento (complessità O(n log n) ) Quicksort Quicksort: algoritmo Divide-and-conquer. Divide: partiziona A[p r] in due parti A[p q-1] e A[q+1 r] in modo che ogni elemento di A[p q-1] sia A[q] ed ogni elemento di A[q+1 r] sia >A[q]. (Il valore q è scelto dalla procedura di partizione.) p q-1 q q+1 r Quicksort (A, p, r) if p < r then q Partiziona (A, p, r) Quicksort (A, p, q - 1) Quicksort (A, q + 1, r) A[q] >A[q] Conquer: ordina ricorsivamente ognuna delle due parti. Combine: sono già ordinati. Per ordinare l array A, chiamata iniziale Quicksort (A, 1, length[a])

38 Partiziona: idea Partiziona: idea Partiziona: algoritmo Partiziona: esempio Esempio. Partiziona (A, p, r) x A[r] i p 1 for j p to r 1 do if A[j] x then i i + 1 scambia A[i] A[j] scambia A[i + 1] A[r] return i + 1 Partiziona (A, p, r) x A[r] i p 1 for j p to r 1 do if A[j] x then i i + 1 scambia A[i] A[j] scambia A[i + 1] A[r] return i

39 Partiziona: complessità Partizionamento Partiziona (A, p, r) x A[r] i p 1 for j p to r 1 do if A[j] x then i i + 1 scambia A[i] A[j] scambia A[i + 1] A[r] return i + 1 Partizionamento: Analizziamo tre casi Caso peggiore Caso migliore Caso medio Complessità: Θ(n), dove n = r - p Partizionamento: caso peggiore Partizionamento: caso migliore Caso peggiore. Partizione sbilanciata con sottoproblemi di n-1 e 0 elementi T(n) = T(n - 1) + T(0) + Θ(n) = T(n - 1) + Θ(n). Soluzione T(n) = Θ(n 2 ) Caso migliore. Partizione bilanciata con sottoproblemi di " n /2# e " n /2# 1 T(n) = 2 T(n/2) + Θ(n) Soluzione T(n) = Θ(n log n) (è la stessa relazione del Mergesort)

40 Partizione bilanciata Prova con Albero di Ricorsione Partizione bilanciata con sottoproblemi di 9n/10 e n/10 elementi Risoluzione T(n) = T (9n/10) + T (n/10) + cn T(n) T (9n/10) + T (n/10) + cn T(n) cn cn cn T(n/10) T(9n/10) c n/10 c 9n/10 cn cn/10 cn c9n/10 c c n/100 c 9n/100 c 9n/100 c 81n/100 h+1 cn... cn T(n/100) T(9n/100) T(9n/100) T(81n/100) c... cn Altezza albero h? cn (h+1) Prova con Albero di Ricorsione Partizione bilanciata Risoluzione T(n) = T (9n/10) + T (n/10) + cn cn cn c n/10 c 9n/10 cn c c n/100 c 9n/100 c 9n/100 c 81n/100 h+1 cn... cn... c cn Altezza albero h? (9/10) h n = 1 cioè h = log 10/9 n cn (h+1)

41 Partizioni Quicksort: analisi caso peggiore Partizione sbilanciata seguita da partizione bilanciata T(n) = max 0 q n-1 (T(q) + T(n- q-1)) + Θ(n) Proviamo per induzione che T (n) cn 2 per qualche costante c. n costo 2 partizioni Θ(n) n costo partizione Θ(n) Sostituendo: T(n) max 0 q n-1 (cq 2 + c(n- q-1) 2 ) + Θ(n) c max 0 q n-1 (q 2 + (n- q-1) 2 ) + Θ(n) 0 (n-1)/2-1 n-1 (n-1)/2 (n-1)/2 Caso medio: Intuitivamente è più vicino al caso migliore che al caso peggiore. Complessità O(n log n) (n-1)/2 La funzione f(q) = q 2 +(n-q-1) 2 ha un massimo nell intervallo 0 q n - 1 in un punto estremo, dato che la derivata seconda f (q) > 0 max 0 q n-1 (q 2 + (n- q-1) 2 ) (n-1) 2 = n 2-2n +1 Quindi, T(n) cn 2 - c(2n - 1) + Θ(n) cn 2 Dato che si può scegliere la costante c grande abbastanza affinchè il termine c(2n - 1) domina il termine Θ(n). Quindi, T(n) = O(n 2 ) Esercizio Esercizio Se gli elementi sono distinti e sono già ordinati in senso decrescente, la complessità del Quicksort è Θ(n 2 ). Supponiamo che la partizione ad ogni livello è proporziale ad 1-a ed a, dove 0 < α 1/2 è una costante. Mostrare che la profondità minima di una foglia nell albero della ricorsione è approssimativamente - lg n/ lg α e la massima profondità è approssimativamente - lg n/ lg (1-α). (Trascurare l arrotondamento agli interi.)

42 Quicksort: versione randomizzata Quicksort: Cenno storico Partiziona_random (A, p, r) i random(p,r) scambia A[i] A[r] return Partiziona(A, p, r) La procedura del quicksort è dovuta ad Hoare: C. R. Hoare. Quicksort. Computer Journal, 5(1): 10 15, La versione di Hoare appare nel Problema 7-1. La procedura Partizione che abbiamo visto è dovuta a N. Lomuto. Quicksort_random (A, p, r) if p < r then q Partiziona_random (A, p, r) Quicksort_random (A, p, q - 1) Quicksort_random (A, q + 1, r) Esercizi Esercizio: Potenze di un numero Potenze di un numero Numeri di Fibonacci Massima Sottosequenza Massimi in 2-D Defective Chessboards Input: a, n N Calcolare: a n Algoritmo naïve: Θ(n) Algoritmo Divide and Conquer Θ(log n) Esercizi da risolvere in forma completa a casa

43 Esercizio: Potenze di un numero Esercizio: Potenze di un numero Input: a, n N Calcolare: a n Algoritmo naïve: Θ(n) Algoritmo Divide and Conquer Θ(log n)! # a n = " $# Complessità algoritmo Divide and Conquer: Relazione ricorrenza running time T(n) = T(n/2) + Θ(1) Soluzione T(n) = Θ(log n) (a n/2 ) 2 se n pari (a (n-1)/2 ) 2 a se n dispari Soluzione relazione ricorrenza con metodo di sostituzione T(n) = T(n/2) + c = T(n/4) + c + c = T(n/4) + 2c = T(n/8) + c + 2c = T(n/8) + 3c = T(n/16) + c + 3c = T(n/16) + 4c = = T(n/2 k ) + kc = Θ(k) = Θ(log n) con n = 2 k da n 2 k =1 segue che k = log n Esercizio: Numeri di Fibonacci Esercizio: Numeri di Fibonacci Input: n N + Calcolare: F n! # F n = " # $ se n = 0 1 se n =1 F n-1 +F n-2 se n 2 Algoritmo naïve: Θ(n) Algoritmo Divide and Conquer Θ(log n) Input: n N Calcolare: F n! # F n = " # $ 0 se n = 0 1 se n =1 F n-1 +F n-2 se n 2 Suggerimento per algoritmo Divide and Conquer Θ(log n)! # " # F n+1 F n F n F n-1 $ & % & =! 1 1 $ # & " 1 0 % n Provare la relazione (per induzione su n) Mostrare come realizzare un algoritmo Divide and Conquer Θ(log n)

44 Esercizio: Massima Sottosequenza Esercizio: Massima Sottosequenza Input: sequenza A[1], A[2],, A[n] Calcolare: sottosequenza con somma massima elementi consecutivi = 43 Algoritmo naïve: Θ(n 2 ) Algoritmo Divide and Conquer Θ(n log n) = 18 Input: sequenza A[1], A[2],, A[n] Calcolare: sottosequenza con somma massima Divide-and-conquer. Divide: dividere sequenza in due parti della stessa grandezza. Conquer: risolvere ricorsivamente il problema in ogni parte. Combine: calcolare la sottosequenza con somma massima che contiene il punto di mezzo (cioè con inizio e fine in parti diverse), e restituire il massimo delle 3 somme. low mid mid+1 high Esercizio: Massima Sottosequenza Esercizio: Massimi in 2-D Combine: calcolare la sottosequenza con somma massima che contiene il punto di mezzo (cioè con inizio e fine in parti diverse), e restituire il massimo delle 3 somme. Input: insieme di punti in un piano Calcolare: punti di massimo low mid mid+1 high Un punto (x 1,y 1 ) domina (x 2,y 2 ) se x 1 > x 2 e y 1 > y 2. Un punto è un massimo se non è dominato da altri punti. leftsum A[mid] sum A[mid] maxleft mid for i = mid-1 downto low sum sum + A[i] ; if sum > leftsum leftsum sum maxleft i rightsum A[mid+1] sum A[mid+1] maxright mid+1 for j = mid+1 to high sum sum + A[j] if sum > rightsum rightsum sum maxright j Massima somma per sottosequenza che contiene A[mid] e A[mid+1] : leftsum + rightsum Algoritmo naïve: Θ(n 2 ) Algoritmo Divide and Conquer Θ(n log n)

45 Esercizio: Massimi in 2-D Esercizio: Massimi in 2-D Input: insieme di punti in un piano Calcolare: punti di massimo Input: insieme di punti in un piano Calcolare: punti di massimo Divide-and-conquer. Divide: dividere punti in due parti della stessa grandezza mediante una linea verticale. Conquer: risolvere ricorsivamente il problema in ognuna delle 2 parti. Combine: Divide-and-conquer. Divide: dividere punti in due parti della stessa grandezza mediante una linea verticale. Conquer: risolvere ricorsivamente il problema in ognuna delle 2 parti. Combine: eliminare i punti di massimo della parte sinistra la cui ordinata è minore della massima ordinata di un punto di massimo nella parte destra. Restituire i punti di massimo delle due parti. eliminare P 3 perchè dominato da P Esercizio: Massimi in 2-D Esercizio: Defective Chessboards Input: insieme di punti in un piano Calcolare: punti di massimo Divide-and-conquer. Divide: dividere punti in due parti della stessa grandezza mediante una linea verticale. Conquer: risolvere ricorsivamente il problema in ogni parte. Combine: eliminare i punti di massimo della parte sinistra la cui ordinata è minore della massima ordinata di un punto di massimo nella parte destra. Restituire i punti di massimo delle due parti. Input: scacchiera n n e casella non disponibile (assumere n potenza di 2) Calcolare: ricoprimento con triomini Una Defective Chessboard è una scacchiera con una casella non disponibile È quella del punto di massimo con minore ascissa. Perchè? 1x1 2x2 4x4 8x8 eliminare P 3 perchè dominato da P

46 Esercizio: Defective Chessboards Esercizio: Defective Chessboards Input: scacchiera n n e casella non disponibile Calcolare: ricoprimento con triomini Input: scacchiera n n e casella non disponibile Calcolare: ricoprimento con triomini, cioè posizionamento di (n 2-1)/3 triomini sulla scacchiera in modo da ricoprire tutte le caselle disponibili. Un triomino è un oggetto a forma di L che copre 3 caselle di una scacchiera. Ha 4 orientazioni: 1x1 2x2 4x4 8x Esercizio: Defective Chessboards Esercizio: Defective Chessboards Input: scacchiera n n e casella non disponibile Calcolare: ricoprimento con triomini, cioè posizionamento di (n 2-1)/3 triomini sulla scacchiera in modo da ricoprire tutte le caselle disponibili. Input: scacchiera n n e casella non disponibile Calcolare: ricoprimento con triomini, cioè posizionamento di (n 2-1)/3 triomini sulla scacchiera in modo da ricoprire tutte le caselle disponibili. 1x1 2x2 4x4 8x8 1x1 2x2 4x4 8x

47 Esercizio: Defective Chessboards Esercizio: Defective Chessboards Input: scacchiera n n e casella non disponibile Calcolare: ricoprimento con triomini, cioè posizionamento di (n 2-1)/3 triomini sulla scacchiera in modo da ricoprire tutte le caselle disponibili. Input: scacchiera n n e casella non disponibile Calcolare: ricoprimento con triomini, cioè posizionamento di (n 2-1)/3 triomini sulla scacchiera in modo da ricoprire tutte le caselle disponibili. 1x1 2x2 4x4 8x8 1x1 2x2 4x4 8x Esercizio: Defective Chessboards Esercizio: Defective Chessboards Input: scacchiera n n e casella non disponibile Calcolare: ricoprimento con triomini, cioè posizionamento di (n 2-1)/3 triomini sulla scacchiera in modo da ricoprire tutte le caselle disponibili. Input: scacchiera n n e casella non disponibile Calcolare: ricoprimento con triomini, cioè posizionamento di (n 2-1)/3 triomini sulla scacchiera in modo da ricoprire tutte le caselle disponibili. 1x1 2x2 4x4 8x8 1x1 2x2 4x4 8x

48 Esercizio: Defective Chessboards Esercizio: Defective Chessboards Input: scacchiera n n e casella non disponibile Calcolare: ricoprimento con triomini, cioè posizionamento di (n 2-1)/3 triomini sulla scacchiera in modo da ricoprire tutte le caselle disponibili. Input: scacchiera n n e casella non disponibile Calcolare: ricoprimento con triomini, cioè posizionamento di (n 2-1)/3 triomini sulla scacchiera in modo da ricoprire tutte le caselle disponibili. Divide-and-conquer Divide: dividere scacchiera in quattro scacchiere. 1x1 2x2 4x4 4x4 4x4 8x Esercizio: Defective Chessboards Esercizio: Defective Chessboards Input: scacchiera n n e casella non disponibile Calcolare: ricoprimento con triomini, cioè posizionamento di (n 2-1)/3 triomini sulla scacchiera in modo da ricoprire tutte le caselle disponibili. 8x8 Divide-and-conquer Divide: dividere scacchiera in quattro scacchiere. Conquer: rendere defective le altre tre scacchiere e risolvere ricorsivamente il problema per ogni scacchiera. Combine: Restituire i ricoprimenti delle quattro parti con in aggiunta il triomino centrale. Relazione ricorrenza running time T(n) = 4 T(n/2) + Θ(1) Soluzione T(n) = Θ(n 2 ) Soluzione relazione ricorrenza con metodo di sostituzione T(n) = 4 T(n/2) + c con n=2 k = 4 (4 T(n/4) + c) + c = 4 2 T(n/4) + 4c + c = 4 2 (4 T(n/8) + c) + 4c + c = 4 3 T(n/8) c + 4c + c = 4 3 (4 T(n/16) + c) c + 4c + c = 4 4 T(n/16) c c + 4c + c = = 4 k T(n/2 k ) + 4 k-1 c + 4 k-2 c c c + 4c + c = Θ(4 k ) = Θ(n 2 ) da k 1 ϑ i i=0 k 1 segue che 4 i = 4k 1 3 i=0 = ϑ k 1 ϑ

49 Riepilogo Capitolo 5, Divide and Conquer 5.1 Mergesort 5.2 Recurrence Relations 5.3 Counting Inversions 5.4 Closest Pair of Points 5.5 Integer Multiplication 5.6 Fast Fourier Transform (no) Matrix Multiplication Esercizi Potenze di un numero Numeri di Fibonacci Massima Sottosequenza Massimi in 2-D Defective Chessboards Quicksort Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein Introduction to Algorithms, Second Edition The MIT Press 2001 (Cap. 7 Quicksort) In italiano: Introduzione agli algoritmi e strutture dati 2/ed McGraw-Hill, Maggio

15/11/11. Chapter Mergesort. Divide and Conquer. Divide-and-Conquer. Divide and Conquer

15/11/11. Chapter Mergesort. Divide and Conquer. Divide-and-Conquer. Divide and Conquer Divide-and-Conquer Chapter 5 Divide and Conquer Divide-and-conquer. Dividere il problema in diverse parti. Risolvere ogni parte ricorsivamente. Combinare le soluzioni dei sottoproblemi in soluzioni globali.

Dettagli

! Dividere il problema in diverse parti. ! Risolvere ogni parte ricorsivamente. ! Combinare le soluzioni dei sottoproblemi in soluzioni globali.

! Dividere il problema in diverse parti. ! Risolvere ogni parte ricorsivamente. ! Combinare le soluzioni dei sottoproblemi in soluzioni globali. Divide-and-Conquer Chapter 5 Divide and Conquer Divide-and-conquer.! Dividere il problema in diverse parti.! Risolvere ogni parte ricorsivamente.! Combinare le soluzioni dei sottoproblemi in soluzioni

Dettagli

5. DIVIDE AND CONQUER I

5. DIVIDE AND CONQUER I Divide-et-Impera (Divide and conquer) 5. DIVIDE AND CONQUER I Mergesort e Relazioni di ricorrenza Esempi di progettazione D&I Moltiplicazione di interi Contare inversioni Divide-et-Impera. Definizione

Dettagli

Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente

Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente Divide et impera - Schema generale Divide-et-impera (P, n) if n k then risolvi direttamente

Dettagli

Quicksort Moltiplicazione di interi Master Theorem Valutazione del tempo di esecuzione di algoritmi iterativi e ricorsivi

Quicksort Moltiplicazione di interi Master Theorem Valutazione del tempo di esecuzione di algoritmi iterativi e ricorsivi Quicksort Moltiplicazione di interi Master Theorem Valutazione del tempo di esecuzione di algoritmi iterativi e ricorsivi Algoritmi basati sulla tecnica Divide et Impera In questo corso: Ricerca binaria

Dettagli

CAPITOLO 2. Divide et Impera

CAPITOLO 2. Divide et Impera CAPITOLO 2 Divide et Impera In questo capitolo discuteremo alcuni algoritmi progettati mediante la tecnica di progettazione del Divide et Impera. Algoritmi progettati usando questa tecnica consistono di

Dettagli

Tecniche Algoritmiche: divide et impera

Tecniche Algoritmiche: divide et impera Tecniche Algoritmiche: divide et impera Una breve presentazione F. Damiani - Alg. & Lab. 04/05 Divide et impera (o Divide and conquer) Per regnare occorre tenere divisi i nemici e trarne vantaggio F. Damiani

Dettagli

Albero di Riscorsione

Albero di Riscorsione Albero di Riscorsione Albero di ricorsione Un albero di ricorsione è un modo di visualizzare cosa accade in un algoritmo divide et impera L etichetta della radice rappresenta il costo non ricorsivo della

Dettagli

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmo di ordinamento sul posto che ha tempo di esecuzione : QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : - O(n 2 ) nel caso peggiore - O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior

Dettagli

Gli algoritmi ricorsivi di ordinamento. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Gli algoritmi ricorsivi di ordinamento. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino ordinamento Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Merge Sort Ricorsivo, divide et impera Stabile Divisione: due sottovettori SX e DX rispetto al centro del vettore. p r A.A.

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi di Ordinamento Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Il problema dell ordinamento Il problema dell ordinamento di un insieme

Dettagli

Analisi algoritmi ricorsivi e relazioni di ricorrenza

Analisi algoritmi ricorsivi e relazioni di ricorrenza Analisi algoritmi ricorsivi e relazioni di ricorrenza Punto della situazione Finora abbiamo affrontato: il tempo di esecuzione di un algoritmo, l analisi asintotica con le notazioni asintotiche e la tecnica

Dettagli

In questa lezione. Il Mergesort: primo esempio di applicazione della tecnica divide et impera analisi tempo di esecuzione del Mergesort

In questa lezione. Il Mergesort: primo esempio di applicazione della tecnica divide et impera analisi tempo di esecuzione del Mergesort In questa lezione Il Mergesort: primo esempio di applicazione della tecnica divide et impera analisi tempo di esecuzione del Mergesort [CLRS] par. 2.3. Prof. E. Fachini - Intr. Alg.!1 Progettazione di

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi di Ordinamento Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 13 novembre 2008 Il problema dell ordinamento Il problema dell ordinamento

Dettagli

Per regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente

Per regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente Progetto di algoritmi sequenziali (un solo esecutore ) Divide et Impera Per regnare occorre tenere divisi i nemici e trarne vantaggio Greedy fai ad ogni passo la scelta più conveniente Buoni risultati

Dettagli

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano. Usa la tecnica del divide et impera:

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano. Usa la tecnica del divide et impera: MergeSort Usa la tecnica del divide et impera: 1 Divide: dividi l array a metà 2 Risolvi i due sottoproblemi ricorsivamente 3 Impera: fondi le due sottosequenze ordinate 1 Esempio di esecuzione 7 2 4 5

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Modelli di calcolo e metodologie di analisi Domenico Fabio Savo 1 Notazione asintotica f(n) = tempo di esecuzione / occupazione di memoria di un algoritmo su input di dimensione

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Quicksort (*) e metodi di ordinamento lineari Punto della situazione Problema dell ordinamento: Lower bound (n log n) Upper bound O(n log n) Algoritmi

Dettagli

Sommario della lezione:

Sommario della lezione: Sommario della lezione: Metodologie per il progetto di algoritmi: La Tecnica Divide et Impera Esempi di applicazione a: Ricerca del massimo e minimo di una sequenza di numeri Calcolo di potenze di numeri

Dettagli

Quick Sort. PARTITION(A,p,r) risistema il sottoarray A[p...r] e riporta l indice q:

Quick Sort. PARTITION(A,p,r) risistema il sottoarray A[p...r] e riporta l indice q: Quick Sort - Ordinamento in loco - Tempo di esecuzione nel caso peggiore: Θ(n 2 ) - Tempo di esecuzione nel caso medio: Θ(n lg n) - I fattori costanti nascosti nella notazione Θ sono abbastanza piccoli

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 4 Ordinamento Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Esempi: ordinare una lista di nomi alfabeticamente, o un

Dettagli

Divide-and-Conquer. Divide et impera Giulio Cesare

Divide-and-Conquer. Divide et impera Giulio Cesare Divide-et-Impera Divide-and-Conquer Divide et impera Giulio Cesare Divide-and-conquer. Break up problem into several parts. Solve each part recursively. Combine solutions to sub-problems into overall solution.

Dettagli

Esercizi per il corso di Algoritmi, anno accademico 2011/12

Esercizi per il corso di Algoritmi, anno accademico 2011/12 Esercizi per il corso di Algoritmi, anno accademico 2011/12 Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, nè in C++, etc. ). Di tutti gli

Dettagli

Università degli Studi di Camerino Laurea in Informatica Prima Prova Parziale del corso di Algoritmi e Strutture Dati

Università degli Studi di Camerino Laurea in Informatica Prima Prova Parziale del corso di Algoritmi e Strutture Dati Università degli Studi di Camerino Laurea in Informatica Prima Prova Parziale del corso di Algoritmi e Strutture Dati Docente: Maria Rita Di Berardini 19 dicembre 2007 Nome: Cognome: N.Matricola: Note:

Dettagli

In questa lezione: correttezza del mergesort Analisi del mergesort: relazioni di ricorrenza e alberi della ricorsione

In questa lezione: correttezza del mergesort Analisi del mergesort: relazioni di ricorrenza e alberi della ricorsione In questa lezione: correttezza del mergesort Analisi del mergesort: relazioni di ricorrenza e alberi della ricorsione Prof E Fachini - Intr Alg 1 MergeSort: correttezza MergeSort (A,p,r) if p < r then

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Capitolo 7 Algoritmi di ordinamento 7.1 Selection sort L algoritmo di ordinamento per selezione opera nel modo seguente: supponiamo che i primi k elementi siano ordinati; l algoritmo sceglie il minimo

Dettagli

Mergesort. Mergesort. Mergesort. Mergesort. L idea è la seguente: (par. 13.4) dividere l insieme in due parti uguali di n/2 componenti

Mergesort. Mergesort. Mergesort. Mergesort. L idea è la seguente: (par. 13.4) dividere l insieme in due parti uguali di n/2 componenti L idea è la seguente: (par. 13.4) dividere l insieme in due parti uguali di n/2 componenti n/2 n/2 se fossero già ordinate le potremmo riunire con un algoritmo di fusione (merge) Esempio. Consideriamo

Dettagli

Divide et Impera MergeSort. Mercoledì 8 ottobre 2014

Divide et Impera MergeSort. Mercoledì 8 ottobre 2014 Divide et Impera MergeSort Mercoledì 8 ottobre 2014 Punto della situazione Corso di Algoritmi: Analisi e progettazione di algoritmi Abbiamo acquisito alcuni strumenti per effettuare l analisi asintotica

Dettagli

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09) ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09) DISPENSA N. 4 1. Ricerca Binaria Ricorsiva L algoritmo Ricerca Binaria risolve il problema della ricerca di una chiave in un vettore. È un esempio

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi Ricorsivi e Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino I conigli di Fibonacci Ricerca Binaria L isola dei conigli Leonardo da

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi e Strutture Dati Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Algoritmi di ordinamento Esempi: ordinare una lista di nomi alfabeticamente, o

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Quicksort (*) e metodi di ordinamento lineari Punto della situazione Problema dell ordinamento: Lower bound (n log n) Upper bound O(n log n) Algoritmi

Dettagli

Si può fare di meglio?

Si può fare di meglio? Si può fare di meglio? Gli algoritmi visti fino ad ora hanno costo O(n 2 ) È possibile fare di meglio? Quanto meglio? Algoritmi e Strutture Dati 1 Algoritmi divide et impera Idea generale Divide: Scomporre

Dettagli

Algoritmi e strutture di dati 2

Algoritmi e strutture di dati 2 Algoritmi e strutture di dati 2 Paola Vocca Lezione 1: Divide et Impera 1 Paradigma del divide et impera Strutturato in tre fasi. Sia Π() istanza di dimensione di un problema computazionale Π (dove è immediato

Dettagli

Esercitazione 2. Quicksort

Esercitazione 2. Quicksort Esercitazione 2 Quicksort Caratteristiche Algoritmo di ordinamento mediamente molto efficiente Vantaggio: ordinamento sul posto Basato sul paradigma divide et impera (come merge sort) Elemento chiave:

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi Ricorsivi e Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 I conigli di Fibonacci Ricerca Binaria L isola dei conigli

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi Ricorsivi e Ricorrenze Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno

Dettagli

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet   francesc Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc m.franceschet@unich.it Algoritmi e Strutture di Dati I 2 Problema dell ordinamento

Dettagli

Moltiplicazione veloce di interi

Moltiplicazione veloce di interi Moltiplicazione veloce di interi Ogni numero intero w di n cifre può essere scritto come 10 n/2 w s + w d w s indica il numero formato dalle n/2 cifre più significative di w w d denota il numero formato

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi di Ordinamento Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Il problema dell ordinamento Il problema dell ordinamento di un insieme

Dettagli

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT)

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT) QUICKSORT Basato sul paradigma divide-et-impera (come MERGE-SORT) Divide: stabilisce un valore di q tale da dividere l array A[p.. r] in due sottoarray non vuoti A[p.. q] e A[q+1.. r], dove ogni elemento

Dettagli

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmo di ordinamento sul posto che ha tempo di esecuzione : QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : O(n2 ) nel caso peggiore O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior algoritmo

Dettagli

Ricerca. Per ricerca si intende il procedimento di localizzazione di una particolare informazione in un elenco di dati.

Ricerca. Per ricerca si intende il procedimento di localizzazione di una particolare informazione in un elenco di dati. Ricerca Per ricerca si intende il procedimento di localizzazione di una particolare informazione in un elenco di dati. Il problema della ricerca in termini generali : dato un insieme D = {a 1,a 2,...,a

Dettagli

Divide et impera. Divide et impera. Divide et impera. Divide et impera

Divide et impera. Divide et impera. Divide et impera. Divide et impera Divide et impera Divide et impera La tecnica detta divide et impera è una strategia generale per impostare algoritmi (par. 9.4). Consideriamo un problema P e sia n la dimensione dei dati, la strategia

Dettagli

ALGORITMI Docente: Prof. Domenico Cantone

ALGORITMI Docente: Prof. Domenico Cantone CORSO SPECILE DI DURT NNULE PER IL CONSEGUIMENTO DELL BILITZIONE LL INSEGNMENTO NELL SCUOL SECONDRI DI I e II GRDO Indirizzo Fisico - Informatico - Matematico a.a. 00/07 - Classe - Informatica LGORITMI

Dettagli

Selezione per distribuzione

Selezione per distribuzione Selezione per distribuzione Problema: selezione dell elemento con rango r in un array a di n elementi distinti. Si vuole evitare di ordinare a NB: Il problema diventa quello di trovare il minimo quando

Dettagli

Analisi asintotica. Astrazione: come il tempo di esecuzione cresce in funzione della taglia dell input asintoticamente.

Analisi asintotica. Astrazione: come il tempo di esecuzione cresce in funzione della taglia dell input asintoticamente. Analisi asintotica Vittorio Maniezzo University of Bologna Analisi asintotica Obiettivo: semplificare l analisi del consumo di risorse di un algoritmo prescindendo dai dettagli implementativi o di altro

Dettagli

Esercitazione 7 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

Esercitazione 7 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016 Esercitazione 7 Algorithmi e Strutture Dati (Informatica) A.A 015/016 Tong Liu April 1, 016 Elementi fondamentali Notazioni Asintotiche Definition 1.1. (Notazione O) Sia g (n) una funzione di costo; indichiamo

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 4 Ordinamento Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Esempi: ordinare alfabeticamente lista di nomi, o insieme

Dettagli

Esercizi vari. Alberto Montresor. 19 Agosto, 2014

Esercizi vari. Alberto Montresor. 19 Agosto, 2014 Esercizi vari Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle rispettive soluzioni

Dettagli

Notazione asintotica. notazione Ω. notazione O. notazione o notazione ω. Marina Zanella Algoritmi e strutture dati Richiami matematici 1

Notazione asintotica. notazione Ω. notazione O. notazione o notazione ω. Marina Zanella Algoritmi e strutture dati Richiami matematici 1 Notazione asintotica Sebbene si possa talvolta determinare il tempo esatto di esecuzione di un algoritmo, l estrema precisione non giustifica lo sforzo del calcolo; infatti, per input sufficientemente

Dettagli

Algoritmi e Strutture Dati. Divide-et-impera

Algoritmi e Strutture Dati. Divide-et-impera Algoritmi e Strutture Dati Divide-et-impera Alberto Montresor Università di Trento 2018/12/05 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Sommario 1

Dettagli

Mergesort (cont.) 2018/ Lezione 16. Venerdì, 16 Novembre 2018

Mergesort (cont.) 2018/ Lezione 16. Venerdì, 16 Novembre 2018 Mergesort (cont.) Informatica@SEFA 08/09 - Lezione 6 Massimo Lauria Venerdì, 6 Novembre 08 Mergesort La comprensione della struttura dati pila ci permette di capire più agevolmente

Dettagli

Ricerca di Massimo e Minimo di un Array

Ricerca di Massimo e Minimo di un Array Universitá degli Studi di Salerno Corso di Introduzione agli Algoritmi e Strutture Dati Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 1/18 Ricerca di Massimo e Minimo di un Array Problema. Trova l elemento di

Dettagli

Sostituire cf(n) a ciascun termine O(f(n)), dove c è una costante reale simbolica specifica per quel termine

Sostituire cf(n) a ciascun termine O(f(n)), dove c è una costante reale simbolica specifica per quel termine Esempio 1 Ricorrenza da risolvere BASE T(1) = O(1) INDUZIONE T(n) = O(1) + T(n 1) per n > 1 Procedimento Sostituire cf(n) a ciascun termine O(f(n)), dove c è una costante reale simbolica specifica per

Dettagli

Algoritmi e strutture dati. Analisi di algoritmi Funzioni di costo, notazione asintotica

Algoritmi e strutture dati. Analisi di algoritmi Funzioni di costo, notazione asintotica Algoritmi e strutture dati Analisi di algoritmi Funzioni di costo, notazione asintotica Alberto Montresor Università di Trento 2016/09/11 This work is licensed under a Creative Commons Attribution-ShareAlike

Dettagli

Pensiero Algoritmico. Lezione 3 23 Novembre Ripasso. Anatomia di un programma. Anatomia di un programma. Ozalp Babaoglu Università di Bologna

Pensiero Algoritmico. Lezione 3 23 Novembre Ripasso. Anatomia di un programma. Anatomia di un programma. Ozalp Babaoglu Università di Bologna Pensiero Algoritmico Lezione 3 23 Novembre 2016 Ozalp Babaoglu Università di Bologna Ripasso Definizione del problema Astrarre i dettagli, costruire un modello Costruire l algoritmo che risolve il problema

Dettagli

ALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi

ALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

Nozioni di base (II Parte)

Nozioni di base (II Parte) Nozioni di base (II Parte) 1 Ricorsione [GTG14, Par. 5.1-5.4 and 13.1] Algoritmo Ricorsivo: algoritmo che invoca se stesso (su istanze sempre più piccole) sfruttando la nozione di induzione. La soluzione

Dettagli

Algoritmi e Strutture Dati. Luciano Gualà

Algoritmi e Strutture Dati. Luciano Gualà Algoritmi e Strutture Dati Luciano Gualà guala@mat.uniroma2.it www.mat.uniroma2.it/~guala Esercizio Analizzare la complessità nel caso medio del primo algoritmo di pesatura (Alg1) presentato nella prima

Dettagli

Ordinamento per inserzione e per fusione

Ordinamento per inserzione e per fusione Ordinamento per inserzione e per fusione Alessio Orlandi 15 marzo 2010 Fusione: problema Problema Siano A e B due array di n A e n B interi rispettivamente. Si supponga che A e B siano ordinati in modo

Dettagli

Schema generale di un algoritmo divide-et-impera. Algoritmi e Laboratorio a.a Lezioni. Esempio: mergesort su array. Esempio: quicksort

Schema generale di un algoritmo divide-et-impera. Algoritmi e Laboratorio a.a Lezioni. Esempio: mergesort su array. Esempio: quicksort Schema generale di un algoritmo divide-et-impera Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2006-07 Lezioni prof.

Dettagli

Algoritmi e Strutture Dati Esercizi Svolti. Giuseppe Persiano Dipartimento di Informatica ed Appl. Renato M. Capocelli Università di Salerno

Algoritmi e Strutture Dati Esercizi Svolti. Giuseppe Persiano Dipartimento di Informatica ed Appl. Renato M. Capocelli Università di Salerno Algoritmi e Strutture Dati Esercizi Svolti Giuseppe Persiano Dipartimento di Informatica ed Appl Renato M Capocelli Università di Salerno Indice Esercizio 12-3 5 Esercizio 23-4 6 Esercizio 63-3 7 Esercizio

Dettagli

Sommario. Algoritmi di ordinamento lineari: CountingSort. BucketSort. RadixSort

Sommario. Algoritmi di ordinamento lineari: CountingSort. BucketSort. RadixSort Sommario Algoritmi di ordinamento lineari:! CountingSort! BucketSort! RadixSort 1 Ordinamento in tempo lineare. Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, nel

Dettagli

QuickSort (1962, The Computer Journal)

QuickSort (1962, The Computer Journal) QuickSort (1962, The Computer Journal) Charles Antony Richard Hoare (1934 -) Attualmente senior researcher al Microsoft Research Center di Cambridge Hoare ha vinto nel 1980 il Turing Award, il premio più

Dettagli

Algoritmi di Ordinamento

Algoritmi di Ordinamento Algoritmi di Ordinamento 1 Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento Statistiche di ordine 2 Selection Sort SelectionSort(dati[]) {

Dettagli

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione Algoritmi greedy Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione Gli algoritmi greedy sono algoritmi basati sull idea

Dettagli

Algoritmi e Strutture Dati. Analisi di algoritmi Funzioni di costo, notazione asintotica

Algoritmi e Strutture Dati. Analisi di algoritmi Funzioni di costo, notazione asintotica Algoritmi e Strutture Dati Analisi di algoritmi Funzioni di costo, notazione asintotica Alberto Montresor Università di Trento 2018/12/27 This work is licensed under a Creative Commons Attribution-ShareAlike

Dettagli

Tempo e spazio di calcolo (continua)

Tempo e spazio di calcolo (continua) Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza

Dettagli

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output F = { (s, s ) } per ogni s esiste una e una sola coppia (s, s ). Esempio: un algoritmo che calcola il quadrato di

Dettagli

Algoritmi e Strutture Dati. Luciano Gualà

Algoritmi e Strutture Dati. Luciano Gualà Algoritmi e Strutture Dati Luciano Gualà guala@mat.uniroma2.it www.mat.uniroma2.it/~guala Esercizio Analizzare la complessità nel caso medio del primo algoritmo di pesatura (Alg1) presentato nella prima

Dettagli

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet Algoritmi e Strutture di Dati I 2 Problemi Un problema specifica in termini generali una relazione che intercorrere

Dettagli

Number Theory. Teoria dei numeri. Teorema della divisione. Corso di Sicurezza su reti Concetti preliminari per RSA

Number Theory. Teoria dei numeri. Teorema della divisione. Corso di Sicurezza su reti Concetti preliminari per RSA Number Theory Barbara Masucci Dipartimento di Informatica ed Applicazioni Università di Salerno masucci@dia.unisa.it http://www.dia.unisa.it/professori/masucci Teoria dei numeri Concetti preliminari per

Dettagli

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort Due algoritmi di ordinamento basati sulla tecnica Divide et Impera: Mergesort e Quicksort (13 ottobre 2009, 2 novembre 2010) Ordinamento INPUT: un insieme di n oggetti a 1, a 2,, a n presi da un dominio

Dettagli

Algoritmi e Strutture Dati. Capitolo 1 Un introduzione informale agli algoritmi

Algoritmi e Strutture Dati. Capitolo 1 Un introduzione informale agli algoritmi Algoritmi e Strutture Dati Capitolo Un introduzione informale agli algoritmi Ancora un esempio di problema e soluzioni algoritmiche: i numeri di Fibonacci verso un modello di calcolo più simile a un computer

Dettagli

INFORMATICA GENERALE

INFORMATICA GENERALE CAROSELLI STEFANO INFORMATICA GENERALE TESINA «LA TECNICA DEL DIVIDE-ET-IMPERA E DUE SUE IMPORTANTI APPLICAZIONI: IL QUICK SORT E IL MERGE SORT» La tecnica del DIVIDE-ET-IMPERA è un metodo di risoluzione

Dettagli

Problemi di ordinamento

Problemi di ordinamento Problemi di ordinamento Input: una sequenza di n numeri a 1, a 2,..., a n ; Output: una permutazione a 1, a 2,..., a n di a 1, a 2,..., a n tale che a 1 a 2... a n. Generalmente, la sequenza è rappresentata

Dettagli

Tempo e spazio di calcolo (continua)

Tempo e spazio di calcolo (continua) Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza

Dettagli

Divide et impera. Vittorio Maniezzo Università di Bologna

Divide et impera. Vittorio Maniezzo Università di Bologna Divide et impera 1 Vittorio Maniezzo Università di Bologna Divide et Impera Divide et impera: Dividi: se l istanza del problema da risolvere è troppo complicata per essere risolta direttamente, dividila

Dettagli

QuickSort (1962, The Computer Journal)

QuickSort (1962, The Computer Journal) QuickSort (1962, The Computer Journal) Charles Antony Richard Hoare (1934 -) Attualmente senior researcher al Microsoft Research Center di Cambridge Hoare ha vinto nel 1980 il Turing Award, il premio più

Dettagli

Sommario della Lezione

Sommario della Lezione Sommario della Lezione Analisi di Algoritmi Ricorsivi: Come esprimere la complessitá di algoritmi ricorsivi mediante relazioni di ricorrenza Come derivare le relazioni di ricorrenza Come risolvere le relazioni

Dettagli

Introduzione al Corso di Algoritmi

Introduzione al Corso di Algoritmi Introduzione al Corso di Algoritmi Di cosa parliamo oggi: Una discussione generale su cosa studieremo, perchè lo studeriemo, come lo studieremo,... Un esempio illustrativo di cosa studeriemo Informazione

Dettagli

Tecniche di analisi degli algoritmi

Tecniche di analisi degli algoritmi Tecniche di analisi degli algoritmi Damiano Macedonio mace@unive.it Algoritmi e Strutture Dati, A.A. 2012/13 27 ottobre 2012 Original work Copyright c 2009 Moreno Marzolla, Università di Bologna Modifications

Dettagli

QuickSort Università degli Studi di Milano

QuickSort Università degli Studi di Milano QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : - O(n 2 ) nel caso peggiore - O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior

Dettagli

Divide et impera. Divide et Impera

Divide et impera. Divide et Impera Divide et impera 1 Vittorio Maniezzo Università di Bologna Divide et Impera Divide et impera: Dividi: se l istanza del problema da risolvere è troppo complicata per essere risolta direttamente, dividila

Dettagli

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino La ricorsione Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario! Definizione di ricorsione e strategie divide et impera! Semplici algoritmi ricorsivi! Merge

Dettagli

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi Informatica Generale Andrea Corradini 13 - Gli algoritmi e la risoluzione di problemi Sommario Passi per la risoluzione di problemi Problemi di ricerca e ordinamento Algoritmi iterativi: la ricerca lineare

Dettagli

Teoria dei numeri. Number Theory. Congruenze mod n. Teorema della divisione. Concetti preliminari per RSA

Teoria dei numeri. Number Theory. Congruenze mod n. Teorema della divisione. Concetti preliminari per RSA Number Theory Teoria dei numeri Concetti preliminari per RSA Barbara Masucci Dipartimento di Informatica ed Applicazioni Università di Salerno masucci@dia.unisa.it http://www.dia.unisa.it/professori/masucci

Dettagli

Programmazione Dinamica (PD)

Programmazione Dinamica (PD) Programmazione Dinamica (PD) Altra tecnica per risolvere problemi di ottimizzazione, piu generale degli algoritmi greedy La programmazione dinamica risolve un problema di ottimizzazione componendo le soluzioni

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 10 novembre 2010 1 La bandiera nazionale (problema 4.7 del libro di testo). Il problema della bandiera

Dettagli

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Selection e Insertion Sort Ordinamento Dato un insieme S di n elementi presi da un dominio totalmente ordinato, ordinare S in ordine non crescente o non

Dettagli

Tecniche di analisi degli algoritmi

Tecniche di analisi degli algoritmi Tecniche di analisi degli algoritmi Moreno Marzolla, Lorenzo Donatiello Dipartimento di Infromatica, Università di Bologna 11 novembre 2014 Copyright c 2009, 2010 Moreno Marzolla, Università di Bologna

Dettagli

Tipici tempi di esecuzione. Martedì 7 ottobre 2014

Tipici tempi di esecuzione. Martedì 7 ottobre 2014 Tipici tempi di esecuzione Martedì 7 ottobre 2014 Punto della situazione Abbiamo definito il tempo di esecuzione di un algoritmo Scelto l analisi asintotica Abbiamo definito le notazioni asintotiche che

Dettagli

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1. Sia T una stringa arbitraria di lunghezza n 1 su un alfabeto Σ. È sempre possibile

Dettagli

Tecniche Algoritmiche/1 Divide et Impera

Tecniche Algoritmiche/1 Divide et Impera Tecniche Algoritmiche/1 Divide et Impera Ivan Lanese Dipartimento di Informatica Scienza e Ingegneria Università di Bologna Ivan.lanese@gmail.com http://www.cs.unibo.it/~lanese/ Divide-et-impera 2 Tecniche

Dettagli

2.1 Computational Tractability. Chapter 2. Basics of Algorithm Analysis. Efficienza degli algoritmi. Efficienza degli algoritmi

2.1 Computational Tractability. Chapter 2. Basics of Algorithm Analysis. Efficienza degli algoritmi. Efficienza degli algoritmi Chapter 2 2.1 Computational Tractability Basics of Algorithm Analysis 1 Efficienza degli algoritmi Efficienza degli algoritmi Siamo interessati soprattutto running time ma anche spazio, ovvero memoria

Dettagli

Programmazione Concorrente, Parallela e su Cloud

Programmazione Concorrente, Parallela e su Cloud 2019 Programmazione Concorrente, Parallela e su Cloud Algoritmi per memoria condivisa Carmine Spagnuolo, Ph.D. Finding the Minimum in O(logn) Time Algoritmo sequenziale, T (n) = n 1 = O(n): 1: m := a[1];

Dettagli

Casi di prova. Il problema dell ordinamento. Casi di prova. Casi di prova. Casi di prova

Casi di prova. Il problema dell ordinamento. Casi di prova. Casi di prova. Casi di prova Casi di prova Casi di prova Quando si vuole testare un algoritmo si devono costruire vari casi di prova. Invece di eseguire il programma più volte si può costruire un file di dati contenente tutti i casi

Dettagli

Divide et impera. Divide et impera. Tecniche Algoritmiche. Algoritmi e Strutture Dati. at(n/b) + f(n) se n>1 1 se n=1. T(n) = ha soluzione:

Divide et impera. Divide et impera. Tecniche Algoritmiche. Algoritmi e Strutture Dati. at(n/b) + f(n) se n>1 1 se n=1. T(n) = ha soluzione: Algoritmi e Strutture Dati Tecniche Algoritmiche Divide et impera Basato su materiale di C. Demetrescu, I. Finocchi, G.F. Italiano 2 Divide et impera Teorema Master: un strumento generale per risolvere

Dettagli