5. DIVIDE AND CONQUER I
|
|
|
- Lucrezia Emma Federici
- 8 anni fa
- Visualizzazioni
Transcript
1 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 attribuita a Giulio Cesare suddividi il problema in sottoproblemi problemi dello stesso tipo su un istanza più piccola risolvi ogni sottoproblema ricorsivamente applicando la stessa strategia risolutiva dalle soluzioni ai sottoproblemi costruisci una soluzione al problema di partenza. Esempio tipico: algoritmo mergesort Divide un istanza di taglia n in due sottoproblemi di taglia n / 2 risolve i due problemi ricorsivamente. Combina le due soluzioni in una soluzione globale in tempo lineare. Consequence. Brute force: Θ(n 2 ). Tipicamente: miglioriamo la complessità Divide-and-conquer: Θ(n log n). di un algoritmo già polinomiale Altro esempio: maxsubarray 2 Problema dell ordinamento Mergesort Problema. Data una lista di n elementi di uno spazio totalmente ordinato, mettili in ordine crescente. Esempi: lista di numeri: 5, 4, 10, 20, 15, 12 4, 5, 10, 12, 15, 20 lettere A, C, Z, D, G, H, U A, C, D, G, H, U, Z parole casa, abaco, algortmo, telefono, musica abaco, algoritmo, casa, telefono Se la lista è un solo elemento, è ordinata Ordina ricorsivamente la prima metà dell array. Ordina ricorsivamente la seconda metà dell array. Fondi (merge) le due metà in un tutto ordinato. input O R D I Ordina ricorsivmente prima metà N A R E Ordina ricorsivmente seconda metà D I O R Merge A E N R output A D E I N O R R 3 4
2 Operazione di Fusione Mergesort Scopo. fonde due liste ordinate A e B in una lista ordinata C. Scorri A e B da sinistra a destra. Confronta a i e b j. se a i b j, aggiungi ai a C ( ogni elemento rimanente in B). se ai > bj, aggiungi bj a C (< ogni elemento rimanente in A). Se la lista è un solo elemento, è ordinata Ordina ricorsivamente la prima metà dell array. Ordina ricorsivamente la seconda metà dell array. Fondi (merge) le due metà in un tutto ordinato. input Divide lista ordinata A lista ordinata B O R D I N A R E ai bj Ordina ricorsivmente prima metà Ordina ricorsivmente seconda metà fusione per ottenere la lista ordinata C Running time: O( A + B ) D I O R Merge O(n) A E N R Impera output A D E I N O R R 5 6 Mergesort Mergesort Se la lista è un solo elemento, è ordinata Ordina ricorsivamente la prima metà dell array. Ordina ricorsivamente la seconda metà dell array. Fondi (merge) le due metà in un tutto ordinato. input Merge-sort(A[1],A[2],...,A[n]) O R D I N A R E if(n = 1) return // ritorna la lista così come è Merge-sort(A[1],...,A[n/2]) O R Merge-sort(A[n/2+1],...,A[n]) D I A N E R Merge(A[1...n/2], A[n/2+1...n]) D I O R A E N R Se la lista è un solo elemento, è ordinata Ordina ricorsivamente la prima metà dell array. Ordina ricorsivamente la seconda metà dell array. Fondi (merge) le due metà in un tutto ordinato. Come analizziamo un tale input Merge-sort(A[1],A[2],...,A[n]) O R D I N A R E if(n = 1) return // ritorna la lista così come è O R Merge-sort(A[n/2+1],...,A[n]) D I A N E R Merge-sort(A[1],...,A[n/2]) Merge(A[1...n/2], A[n/2+1...n]) D I O R A E N R??? O(n) O(1) algoritmo? output A D E I N O R R 7 output A D E I N O R R 8
3 Mergesort Se la lista è un solo elemento, è ordinata Ordina ricorsivamente la prima metà dell array. Ordina ricorsivamente la seconda metà dell array. Fondi (merge) le due metà in un tutto ordinato. Relazioni di ricorrenza Denotiamo con T(n) il massimo numero di confronti su un input di taglia n Merge-sort(A[1],A[2],...,A[n]) if(n = 1) 0 return // ritorna la lista così come è input O R D I N A R E Merge-sort(A[1],...,A[n/2]) T(n/2) Merge-sort(A[n/2+1],...,A[n]) T(n/2) Merge(A[1...n/2], A[n/2+1...n]) n O R D I A N E R D I O R A E N R 0 se n = 1 T ( n / 2 ) + T ( n / 2 ) + n output A D E I N O R R 9 10 Relazioni di ricorrenza Relazioni di ricorrenza Def. (per il nostro uso) un espressione che definisce la quantità di risorse usate da un algoritmo su un istanza di una data taglia in funzione della stessa quantità per specifiche istanze di taglia inferiore. b se n = n 0 at (f(n)) + g(n) Es. T (n) = max #confronti fatti da mergesort su una lista di taglia n. Ricorrenza di mergesort. 0 se n = 1 T (n / 2) + T (n / 2) + n Parametri della ricorrenza n 0 = taglia del caso base b tempo di esecuzione per il caso base (costante) a numero di volte che si effettua una chiamata ricorsiva f(n) taglia delle istanze risolte nelle chiamate ricorsive g(n) il tempo di calcolo non incluso nelle chiamate ricorsive Soluzione. T (n) è O(n log 2 n). Come valutiamo una ricorrenza? vediamo ora vari esempi di ricorrenze e di come risolverle 11 12
4 Relazioni di ricorrenza - Esempio 1 Relazioni di ricorrenza - Esempio 2 Pluto(n) if(n < 3) fai qualcosa in tempo costante // caso base Pluto(n/3) for i = 1 to n fai qualcosa in tempo costante Pluto(n/3) Topolino(A[1],...,A[n]) if(n < 11) fai qualcosa in tempo costante // caso base for i = 0 to 4 Topolino(A[i+1],...,A[i+n/2]) for i = 1 to n for j = 1 to n qualcosa in tempo costante b se n < 3 2T (n/3) + d n b se n < 11 5T (n/2) + d n Relazioni di ricorrenza - Esempio 3 Relazioni di ricorrenza - Esempio 4 Minnie(n) if(n = 1) print(ciao) // caso base for i = 1 to n-1 Minnie(n-i) print(basta!) Min-max(A[1],...,A[n]) if(n 2) return(min(a[1],a[n]), max(a[1],a[n]) // caso base (A,B) Min-max(A[1],...,A[n/3] (C,D) Min-max(A[n/3+1],...,A[n] m min(a,c) M max(b,d) return(m, M) b se n = 1 T (1) + T (2) T (n-1) + b n b se n 2 T (n/3) + T (2n/3) + d 15 16
5 Risoluzione di ricorrenze: Albero di ricorsione Risoluzione per sostituzione iterativa Proposizione. Se T (n) soddisfa la seguente ricorrenza, allora T (n) = n log2 n. Proposizione. Se T (n) soddisfa la seguente ricorrenza, allora T (n) = n log2 n. 0 se n = 1 2 T (n / 2) + n assumiamo n potenza di 2 0 se n = 1 2 T (n / 2) + n assumiamo n potenza di 2 Dim 1. T (n) n = n Dim 2. Sostituiamo l espressione della ricorrenza T (n / 2) T (n / 2) 2 (n/2) = n T(n) = n + 2 T(n/2) T (n / 4) T (n / 4) T (n / 4) T (n / 4) 4 (n/4) = n = n + 2(n/2 + 2T(n/4)) = n + n + 4T(n/4) log 2 n = 2n + 4(n/4 + 2T(n/8)) = 2n + n + 8T(n/8) T (n / 8) T (n / 8) T (n / 8) T (n / 8) T (n / 8) T (n / 8) T (n / 8) T (n / 8) 8 (n/8) = n n lg n 17 = 3 n + 8T(n/8) =... = i n + 2 i T(n/2 i ) =T(n/n) = T(1) = 0 =... = (log(n)) n + 2 log(n) T(n/2 log(n) ) = n log n. 18 Un criterio generale Un criterio generale - Esempio 1: ricorrenza di Pluto(n) Teorema. Per a, b, c, d, k costanti, la ricorrenza Teorema. Per a, b, c, d, k costanti, la ricorrenza b a T ( n / c ) + d n k se n n0 b a T ( n / c ) + d n k se n n0 ha soluzione ha soluzione O(n k ) se a < c k O(n k ) se a < c k O(n k log n) O(n log c a ) se a = c k se a > c k O(n k log n) O(n log c a ) se a = c k se a > c k T(n) : running time di Pluto(n) b se n < 3 2T (n/3) + d n a = 2 c k = 3 1 = 3 a = 2, c = 3, k = 1 a < c k quindi O(n k ) = O(n) 19 20
6 Un criterio generale - Esempio 2: ricorrenza di Topolino(A[1]...A[n]) Un criterio generale - Esempio 3: ricorrenza di mergesort Teorema. Per a, b, c, d, k costanti, la ricorrenza Teorema. Per a, b, c, d, k costanti, la ricorrenza b a T ( n / c ) + d n k se n n0 b a T ( n / c ) + d n k se n n0 ha soluzione ha soluzione O(n k ) se a < c k O(n k ) se a < c k O(n k log n) O(n log c a ) se a = c k se a > c k O(n k log n) O(n log c a ) se a = c k se a > c k T(n) : running time di Topolino(A[1]...A[n]) T(n) : running time di mergesort b se n < 3 5T (n/2) + d n 2 a = 5 c k = 2 2 = 4 0 se n < 2 2T (n/2) + n a = 2 c k = 2 1 = 2 a = 5, c = 2, k = 2 a > c k quindi O(n log 25 ) = O(n 2.32 ) 21 a = 2, c = 2, k = 1 a = c k quindi O(n k log n) = O(nlog(n)) 22 DIVIDE ET IMPERA Mergesort e Relazioni di ricorrenza Esempi di progettazione D&I Moltiplicazione di interi Contare inversioni NO Ricerca esaustiva. Prova tutte le caselle: Θ(n 2 ) e con Divide et Impera? 24
7 NO NO Confronto x con A[6,6]= 94 x < A[6,6] quindi NO NO Confronto x con A[6,6]= 94 x < A[6,6] quindi... Confronto x con A[6,6]= 94 x < A[6,6] quindi... Confronto x con A[3,3]= 40 x > A[3,3] quindi
8 NO NO Confronto x con A[6,6]= 94 x < A[6,6] quindi... Confronto x con A[6,6]= 94 x < A[6,6] quindi... Confronto x con A[3,3]= 40 Confronto x con A[3,3]= 40 x > A[3,3] quindi... x > A[3,3] quindi NO In generale. un confronto mi permette di dividere il problema in 4 e di eliminare una di queste 4 parti X W Y Z In generale. un confronto mi permette di dividere il problema in 4 e di eliminare una di queste 4 parti se x < allora x non può essere in Y se x > allora x non può essere in X X W Cerca(A[ri...rf; ci...cf], x) if(ri=rf e ci = cf) //la dimensione è 1x1 if(a[ri,ci] = x) return (ri,ci) Y Z qr = (ri + rf)/2; qc = (ci + cf)/2; Z A[ri...qr-1, qc+1...cf] W A[qr+1...rf, ci...qc-1] X A[ri...qr, ci...qc] Y A[qr...rf, qc...cf] se x < se x > allora x non può essere in Y allora x non può essere in X Cerca(Z, x); Cerca(W, x) if x < A[qr,qc] Cerca(X, x); 31 Cerca(Y, x); 32
9 X Z X Z In generale. un confronto mi permette di dividere il problema in 4 e di eliminare una di queste 4 parti W Y In generale. un confronto mi permette di dividere il problema in 4 e di eliminare una di queste 4 parti W Y se x < allora x non può essere in Y se x > allora x non può essere in X Cerca(A[ri...rf; ci...cf], x) if(ri=rf e ci = cf) //la dimensione è 1x1 if(a[ri,ci] = x) return (ri,ci) se x < allora x non può essere in Y se x > allora x non può essere in X Cerca(A[ri...rf; ci...cf], x) if(ri=rf e ci = cf) //la dimensione è 1x1 if(a[ri,ci] = x) return (ri,ci) qr = (ri + rf)/2; qc = (ci + cf)/2; qr = (ri + rf)/2; qc = (ci + cf)/2; Z A[ri...qr-1, qc+1...cf] Z A[ri...qr-1, qc+1...cf] T(n) 1 se n = 1 3T (n/2) + 1 W A[qr+1...rf, ci...qc-1] X A[ri...qr, ci...qc] Y A[qr...rf, qc...cf] T(n) 1 se n < 1 3T (n/2) + 1 W A[qr+1...rf, ci...qc-1] X A[ri...qr, ci...qc] Y A[qr...rf, qc...cf] Cerca(Z, x); Cerca(W, x) Cerca(Z, x); Cerca(W, x) O(n log3 ) = O(n 1.58 ) if x < A[qr,qc] Cerca(X, x); O(n log3 ) = O(n 1.58 ) if x < A[qr,qc] Cerca(X, x); possiamo far meglio? Cerca(Y, x); 33 possiamo far meglio? Cerca(Y, x); 34 In generale, un confronto mi permette di dividere il problema in 4 e di eliminare una di queste 4 parti Supponiamo di fare una serie di confronti tali che ci permettono di individuare due caselle adiacenti come nella fiugura In generale, un confronto mi permette di dividere il problema in 4 e di eliminare una di queste 4 parti Supponiamo di fare una serie di confronti tali che ci permettono di individuare due caselle adiacenti come nella fiugura se x < allora x non può essere in Y X Z se x < allora x non può essere in Y X Z se x > allora x non può essere in X W Y se x > allora x non può essere in X W Y x > allora x non può essere in X 1 se n < 1 T(n) 3T (n/2) + 1 O(n log3 ) = O(n 1.58 ) possiamo far meglio? Se scopro che < x < cosa posso concludere? 35 1 se n < 1 T(n) 3T (n/2) + 1 O(n log3 ) = O(n 1.58 ) possiamo far meglio? x < allora x non può essere in Y elimino due sottomatrici il caso peggiore è se sono al centro posso trovarli con ricerca binaria sulla diagonale : O(log n) confronti 1 se n < 1 T(n) = O(n) 2T (n/2) + log n
10 Moltiplicazione di interi DIVIDE ET IMPERA Moltiplicazione. Dati due interi ad n-cifre a e b, calcola a b. L algoritmo delle scuole elementari. Θ(n 2 ) moltiplicazioni elementari. Mergesort e Relazioni di ricorrenza Esempi di progettazione D&I Moltiplicazione di interi Contare inversioni Domanda. Possiamo usare un numero inferiore di moltiplicazioni elementari? 38 Moltiplicazione di interi (binario) Divide et Impera - dividi in sottoproblemi, risolvi, componi Moltiplicazione. Dati due interi ad n-cifre a e b, calcola a b. L algoritmo delle scuole elementari. Θ(n 2 ) moltiplicazioni elementari Primo tentativo: due interi ad n-cifre x e y: Dividi x e y in due parti: n/2 cifre più significative e n/2 cifre meno significative. Moltiplica i quattro interi a n/2-cifre, ricorsivamente. ricomponi per ottenere il risultato. x = xn xn-1...xn/2+1 xn/2... x1 y = yn yn-1...yn/2+1 yn/2... y a = xn xn-1...xn/2+1 b = xn/2... x1 c = yn yn-1...yn/2+1 d = yn/2... y1 Calcola quattro prodotti: ac ; bc; ad; bd x*y = (10 n/2 a + b) (10 n/2 c + d) = 10 n ac + 10 n/2 (bc + ad) + bd In Binario. Moltiplicazione elementare = Bit operation (AND). Domanda. Possiamo usare meno di Θ(n 2 ) bit-operations? 39 Es. x = 1246 y = 2765 a b c d x*y = (12*100+46) * (27*100+65) = (12*27*10000)+(12*65+46*27)* *65 a c a d b c b d 40
11 Divide-and-conquer multiplication Divide et Impera - dividi in sottoproblemi, risolvi, componi MULTIPLY(x = xn...x1, y = yn...y1, n) IF (n = 1) RETURN x y. ELSE m n / 2. a xn...xn/2+1; b xn/2...x1. c yn...yn/2+1; d yn/2...y1. e MULTIPLY(a, c, m). f MULTIPLY(b, d, m). g MULTIPLY(b, c, m). h MULTIPLY(a, d, m). RETURN 10 2m e + 10 m (g + h) + f. Esempio: x = 1246 y = 2765 n = 4 m = 2 a = 12 b = 46 c = 27 d = 65 x*y = 1246 * 2765 = (12* ) * (27*100+65) = 12*27* (12*65+46*27)* *65 = a*c * (a*d + b*c)* b*d ( ) 4T n /2 + Θ(n) Θ(n2 ) chiamate ricorsive add, shift scomposizione e ricomposizione Ops! Non abbiamo guadagnato nulla! x = xn xn-1...xn/2+1 xn/2... x1 y = yn yn-1...yn/2+1 yn/2... y1 a = xn xn-1...xn/2+1 b = xn/2... x1 c = yn yn-1...yn/2+1 d = yn/2... y1 Non è necessario calcolare quattro prodotti: ac ; bc; ad; bd x*y = (10 n/2 a + b) (10 n/2 c + d) = 10 n ac + 10 n/2 (bc + ad) + bd questo termine (bc + ad) = (b+a)(c+d) - ac - bd Divide et Impera - dividi in sottoproblemi, risolvi, componi Algoritmo di Karatsuba KARATSUBA-MULTIPLY(x = xn...x1, y = yn...y1, n) IF (n = 1) RETURN x y. x = xn xn-1...xn/2+1 xn/2... x1 y = yn yn-1...yn/2+1 yn/2... y1 a = xn xn-1...xn/2+1 b = xn/2... x1 c = yn yn-1...yn/2+1 d = yn/2... y1 Non è necessario calcolare quattro prodotti: ac ; bc; ad; bd x*y = (10 n/2 a + b) (10 n/2 c + d) = 10 n ac + 10 n/2 (bc + ad) + bd ELSE m n / 2. a xn...xn/2+1; b xn/2...x1. c yn...yn/2+1; d yn/2...y1. e KARATSUBA-MULTIPLY(a, c, m). f KARATSUBA-MULTIPLY(b, d, m). g KARATSUBA-MULTIPLY(a + b, c + d, m). RETURN 10 n e + 10 m (g - e f) + f questo termine (bc + ad) = (b+a)(c+d) - ac - bd Proposizione. L algoritmo di Karatsuba richiede O(n ) operazioni per moltiplicare due interi a n-cifre. Dim. Applichiamo ancora il caso 3 del criterio generale x*y = (10 n/2 a + b) (10 n/2 c + d) = 10 n ac + 10 n/2 ((b+a)(c+d) - ac - bd) + bd T(n / 2) + Θ(n) Θ(n lg 3 ) = O(n ). 44
12 Algoritmo di Karatsuba KARATSUBA-MULTIPLY(x = xn...x1, y = yn...y1, n) IF (n = 1) Esempio: x = 1246 y = 2785 n = 4 m = 2 a = 12 b = 46 c = 27 d = 65 e = a*c = 12*46 f = b*d = 27*65 g = (a+b)*(c+d) = 58*92 x*y = 1246 * 2765 = (12* ) * (27*100+85) = 12*27* (12*85+46*27)* *85 = a*c * (g - e - f)* b*d RETURN x y. ELSE m n / 2. a xn...xn/2+1; b xn/2...x1. c yn...yn/2+1; d yn/2...y1. e KARATSUBA-MULTIPLY(a, c, m). f KARATSUBA-MULTIPLY(b, d, m). g KARATSUBA-MULTIPLY(a + b, c + d, m). RETURN 10 n e + 10 m (g - e f) + f. Proposizione. L algoritmo di Karatsuba richiede O(n ) operazioni per moltiplicare due interi a n-cifre. Dim. Applichiamo ancora il caso 3 del criterio generale 3 T(n / 2) + Θ(n) Θ(n lg 3 ) = O(n ). 45
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
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
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
2. Analisi degli Algoritmi
2. Analisi degli Algoritmi Introduzione 2.1 Un modello di macchina elementare: la Macchina a Registri 2.2 Costo di esecuzione di un programma 2.3 Analisi del costo di esecuzione: il modello a costi uniformi
! 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
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
Note per la Lezione 4 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 4 Ugo Vaccaro Ripasso di nozioni su Alberi Ricordiamo che gli alberi rappresentano una generalizzazione delle liste, nel senso che
Algoritmi di ordinamento: Array e ricorsione
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Indice Algoritmi di ordinamento: Insertion
Macchina RAM. Modelli di calcolo e metodologie di analisi. Linguaggio di una macchina RAM. Algoritmi e Strutture Dati. Istruzioni.
Algoritmi e Strutture Dati Macchina RAM Nastro di ingresso Modelli di calcolo e metodologie di analisi Contatore istruzioni Programm a Accumulatore Unità centrale M[0] M[1] Nastro di uscita Basato su materiale
Note per la Lezione 6 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 6 Ugo Vaccaro Ancora sulla tecnica Programmazione Dinamica Nella lezione scorsa abbiamo appreso che la tecnica Divide-et-Impera,
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Capitolo 1 Un introduzione informale agli algoritmi Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione informale di algoritmo Insieme di istruzioni, definite
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
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
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
Algoritmi e strutture di dati 2
Paola Vocca Lezione 4: Programmazione dinamica 1 Caratteristiche Programmazione dinamica: paradigma basato sullo stesso principio utilizzato per il divide et impera o il problema viene decomposto in sotto-problemi
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
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Informazioni sul corso + Un introduzione informale agli algoritmi Domenico Fabio Savo 1 Domenico Fabio Savo Email: [email protected] Web: http://www.dis.uniroma1.it/~savo
PROVETTE D ESAME. Algoritmi e Strutture Dati
PROVETTE D ESAME Algoritmi e Strutture Dati ESERCIZIO 1 Si ottengano limiti superiori e inferiori per la seguente ricorrenza ESERCIZIO 1 ESERCIZIO 2 Dato un albero binario T, il grado di sbilanciamento
Esercizi per il corso di Algoritmi e Strutture Dati
1 Esercizi per il corso di Algoritmi e Strutture Dati 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 algoritmi
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
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
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
Tempo e spazio di calcolo
Tempo e spazio di calcolo Modelli di calcolo e metodologie di analisi F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) In quale modo stimiamo il tempo di calcolo? Possiamo considerare
Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento
Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento Alessandra Raffaetà Università Ca Foscari Venezia Corso di Laurea in Informatica Ricerca binaria Assunzione:
Esercizi su alberi binari
Esercizi su alberi binari Esercizi svolti: Determinazione nodi contenti verifica completezza verifica quasi completezza lunghezza del cammino interno determinazione ultima foglia in un quasi completo verifica
Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati.
E. Calabrese: Fondamenti di Informatica Algoritmi-1 Algoritmi di ricerca Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati. Per esempio: - cercare
In questa lezione. Heapsort. ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 114
In questa lezione Heapsort ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 11 1 Paternità L heapsort è stato pubblicato da J. W. J. Williams nel 106. Pochi mesi
Algoritmi di ordinamento
Algoritmi di ordinamento! Selection Sort! Quick Sort! Lower bound alla complessità degli algoritmi di ordinamento Ordinamento 1 Selection Sort SelectionSort(dati[]) { for (i=0; idati.length-1; i++) { min
Laboratorio di Programmazione M-Z
Diretta Laboratorio di Programmazione M-Z Docente: Dott.ssa Alessandra Lumini [email protected] Università di Bologna, Sede di Cesena Divide et impera Dividere un problema in sottoproblemi più
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
4.1 Modelli di calcolo analisi asintotica e ricorrenze
4 Esercizi Prima Parte 4.1 Modelli di calcolo analisi asintotica e ricorrenze Esercizio 4 1 Rispondere alle seguenti domande: 1. Come misuriamo l efficienza di un algoritmo?. Quali sono gli algoritmi più
Programmazione dinamica
Programmazione dinamica Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Programmazione
Esercizi Capitolo 12 - Divide-et-Impera
Esercizi Capitolo 12 - Divide-et-Impera Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare
Algoritmi e Strutture Dati
Heap Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Heap Heap binari: definizione Un heap binario è una struttura dati composta
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
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,
Algoritmi per operazioni con le matrici
Algoritmi per operazioni con le matrici 1 Sommario Definizioni Alcune operazioni principali sulle matrici Somma di due matrici Trasposta di una matrice Prodotto di matrici: algoritmo classico Prodotto
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 27 marzo 2012 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,
Esercizi per il corso di Algoritmi, anno accademico 2014/15
1 Esercizi per il corso di Algoritmi, anno accademico 2014/15 Esercizi sulle Notazioni Asintotiche 1. Esercizio: Provare le seguenti relazioni, esibendo opportune costanti c 1,c 2 ed n 0. Si assuma per
Programmazione dinamica. Progettazione di Algoritmi a.a Matricole congrue a 1 Docente: Annalisa De Bonis
Programmazione dinamica Progettazione di Algoritmi a.a. 2016-17 Matricole congrue a 1 Docente: Annalisa De Bonis 1 Paradigmi della Progettazione degli Algoritmi Greedy. Costruisci una soluzione in modo
Note per la Lezione 7 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 7 Ugo Vaccaro Sempre sulla tecnica Programmazione Dinamica Ricordiamo che lo sviluppo di algoritmi basati sulla Programmazione Dinamica
Ordinamenti per confronto: albero di decisione
Ordinamenti per confronto: albero di decisione Albero di decisione = rappresentazione grafica di tutte le possibili sequenze di confronti eseguite da un algoritmo assegnato di ordinamento per confronto
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
Proprietà delle notazioni asintotiche
Proprietà delle notazioni asintotiche Punto della situazione Cos è un algoritmo Tempo di esecuzione T(n) Analisi di algoritmi: analisi asintotica di T(n) Notazioni asintotiche Argomento di oggi Proprietà
Algoritmi di ordinamento (II parte)
Algoritmi di ordinamento (II parte) E3: sommario Studio di due implementazioni di algoritmi avanzati Algoritmo ordinamento veloce (QuickSort) Algoritmo per fusione (MergeSort) Metodi offerti in java.util
Esercizi sulla complessità di frammenti di pseudo-codice
Esercizi sulla complessità di frammenti di pseudo-codice Esercizio 1 Si determini la complessità temporale del seguente frammento di pseudo-codice in funzione di n. Il ciclo contiene solo istruzioni elementari;
Algoritmi e Strutture Dati Geometria Computazionale. Daniele Loiacono
Algoritmi e Strutture Dati Geometria Computazionale Riferimenti 2 T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Introduction to Algorithms, Second Edition Queste trasparenze sono disponibili su http://dei.polimi.it/upload/loiacono
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.
Algoritmi (9 CFU) (A.A ) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1
Algoritmi (9 CFU) (A.A. 2009-10) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1 Overview Definiamo la struttura dati heap Operazioni di costruzione e gestione di un heap Algoritmo Heapsort Code
Equazioni di primo grado
Equazioni di primo grado 15 15.1 Identità ed equazioni Analizziamo le seguenti proposizioni: a ) cinque è uguale alla differenza tra sette e due ; b ) la somma di quattro e due è uguale a otto ; c ) il
Esercitazione. Ricorsione. May 31, Esercizi presi dal libro di Rosen
Esercitazione Ricorsione May 31, 2016 Esercizi presi dal libro di Rosen Problema 2 a) sezione 5.3 Data la seguente funzione definita ricorsivamente come: f(n+1) = 2f(n) f(0) = 3 Determinare il valore di
Algoritmi di ordinamento: Array e ricorsione
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Insertion Sort Quicksort Heapsort Indice
Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ Heap e Heapsort Algoritmi di ordinamento Insertion Sort Quicksort Heapsort Insertion Sort L
Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla
Camil Demetrescu Irene Finocchi Giuseppe F. Italiano Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla Indice 1 Un introduzione informale agli algoritmi 1 2 Modelli di calcolo e metodologie di
Introduzione alla tecnica di Programmazione Dinamica
Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 1/37 Sommario della lezione Introduzione alla tecnica di Programmazione Dinamica Esempio di applicazione n. 1:
Esempio : i numeri di Fibonacci
Esempio : i numeri di Fibonacci La successione di Fibonacci F 1, F 2,... F n,... è definita come: F 1 =1 F 2 =1 F n =F n 1 F n 2,n 2 Leonardo Fibonacci (Pisa, 1170 Pisa, 1250) http://it.wikipedia.org/wiki/leonardo_fibonacci
COGNOME E NOME (IN STAMPATELLO) MATRICOLA
Politecnico di Milano Facoltà di Ingegneria dell Informazione Informatica 3 Proff. Ghezzi, Lanzi, Matera e Morzenti Seconda prova in itinere 4 Luglio 2005 COGNOME E NOME (IN STAMPATELLO) MATRICOLA Risolvere
Algoritmi (9 CFU) (A.A )
Algoritmi (9 CFU) (A.A. 2009-10) Equazioni di ricorrenza Prof. V. Cutello Algoritmi 1 Overview Definiamo cos è una ricorrenza Introduciamo 3 metodi per risolvere equazioni di ricorrenza Sostituzione e
Parte III: Algoritmo di Branch-and-Bound
Parte III: Algoritmo di Branch-and-Bound Divide et Impera Sia z * max {c T x : x S} (1) un problema di ottimizzazione combinatoria difficile da risolvere. Domanda: E possibile decomporre il problema (1)
Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente:
Pag 29 4) La ricorsione 4.1 Funzioni matematiche ricorsive Partiamo da un concetto ben noto, quello delle funzioni matematiche ricorsive. Una funzione matematica è detta ricorsiva quando la sua definizione
In molte applicazioni sorge il problema di sapere in quanti modi possibili si può presentare un certo fenomeno.
Definizione Oggetto del calcolo combinatorio è quello di determinare il numero dei modi mediante i quali possono essere associati, secondo prefissate regole, gli elementi di uno stesso insieme o di più
Programmazione dinamica
Programmazione dinamica Primi esempi 29 ottobre 2014 Punto della situazione Abbiamo visto: analisi asintotica relazioni di ricorrenza (vedremo altri esempi) prima tecnica di programmazione: divide-etimpera
Programmazione Ricorsione in coda
Programmazione Ricorsione in coda Samuel Rota Bulò DAIS Università Ca Foscari di Venezia. Outline Ricorsione in coda Ricorsione in coda La ricorsione in coda (o tail-recursion) è un caso speciale di ricorsione
Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento
Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento
