21/10/2013 Algoritmi e strutture di dati 2 Paola Vocca Lezione 1: Divide et Impera Lezione1- Divide et impera 1 Paradigma del divide et impera Strutturato in tre fasi. Sia Π( )istanza di dimensione di un problema computazionale Π(dove è immediato il caso base) • decomposizione: identifica un numero di sottoproblemi Π( ), Π( ), … , Π( ),dove < • ricorsione: per = , , … , ,ottieni ricorsivamente la soluzione per ciascun Π( )sino ad ottenere problemi di dimensioni tali da poter essere risolti direttamente ( < , con costante) • ricombinazione: ricava la soluzione per Π( )da quelle ottenute per Π ,Π ,…,Π . Lezione1- Divide et impera 2 1 21/10/2013 Paradigma del divide et impera: Complessità • Sia ( )il costo di dividere il problema Πnei sottoproblemi Π( ), Π( ), … , Π( ). • Sia ( ) il costo il costo di combinare i risultati dei sottoproblemi per ottenere il risultato del problema Π. • Siano ( )i costi delle soluzioni dei sottoproblemi. • Sia il costo del problema base • Il costo ( )del problema Πè dato da: ≤ = + + ( ) > Risolvere un’equazione di ricorrenza Lezione1- Divide et impera 3 Equazioni di ricorrenza • • • Una ricorrenza è un’equazione o una diseguaglianza che descrive una funzione in termini del suo valore su valori inferiori. E’ relativamente semplice esprimere la complessità con una relazione di ricorrenza. Può essere però piuttosto complicato risolvere la relazione di ricorrenza. Esistono diversi metodi per la risoluzione di equazioni di ricorrenza o Metodo Iterativo: • Si itera la regola induttiva di ( )in termini di e del caso base. • Richiede manipolazione delle somme o Metodo di Sostituzione • Si ipotizza una possibile soluzione • Si sostituisce l’ipotetica soluzione nei casi base e induttivo • Si dimostra la correttezza della ipotesi tramite induzione matematica o Metodo Principale (Master Theorem) • Fornisce limiti sulle ricorrenze della forma ( )= ( /!) + "(# ) Lezione1- Divide et impera 4 2 21/10/2013 Equazioni di ricorrenza negli algoritmi ricorsivi • Una naturale applicazione delle equazioni di ricorrenza è data dalle funzioni ricorsive fact(int n){ if n <= 1 then return 1 /* Caso Base else return n*fact(n-1) /* Passo Induttivo Lezione1- Divide et impera 5 Assunzioni Θ(1) n =1 T ( n) = 2T (n / 2) + Θ( n) n > 1 • Funzioni con argomenti interi Θ (1) T (n) = T ( n / 2 ) + T ( n / 2 ) + Θ ( n ) n =1 n >1 • Condizioni al contorno: o trascurate in quanto per sufficientemente piccolo il tempo di esecuzione è costante o Al variare delle condizioni al contorno cambia la soluzione generalmente di un fattore costante T ( n ) = 2T ( n / 2 ) + Θ ( n ) Lezione1- Divide et impera 6 3 21/10/2013 Il metodo iterativo (1) Base: ( ) = Induzione: ($) = ! + ($ − ) Sostituire ad $i valori , ottiene il caso base I. 1. 2. 3. − , − … finché si ( ) = ! + ( − )sostituire $ con ( − ) = ! + ( − )sostituire $ con ( − ) = ! + ( − ))sostituire $ con n-1. ( ) = ! + ( ) sostituire $ con − − noto Lezione1- Divide et impera 7 Il metodo iterativo (2) Sostituire ( − ), ( − ) …fino al caso base e sostituirlo. II. ( ) = ! + ( − ) = ! + ! + ( − ) = ∗ ! + ( − ) = ! + ! + ! + ( − )) = ) ∗ ! + ( − )) = ! + ! + ! + ! + − + = + ∗ ! + − + = …… … … • • III. = , !+ = Inserire il caso base -( ) = ( − 1). + / − ∗ ! + ( ) Valutare l’espressione O-grande associata • -( ) = . ∗ − . + / = 0( ) Lezione1- Divide et impera 8 4 21/10/2013 Il metodo iterativo: Fattoriale fact(int n){ if n <= 1 then return 1 /* Caso Base else return n*fact(n-1) /* Passo Induttivo Equazione di ricorrenza Lezione1- Divide et impera 9 Il metodo iterativo: Fattoriale • Complessità di fact o Caso Base: -(0) = 0(1) -(1) = 0(1) o Caso Induttivo: 0 1 + max 0 1 + -( − 1) 0 1 + - − 1 567 > 1 o Per il fattoriale, l’analisi risulta: = 0( ) Lezione1- Divide et impera 10 5 21/10/2013 Il metodo iterativo: Esempio -( ) = 3- 3 39- 27- 8 9 8 :; + 8 = +9 + = 8 + 9 :; 8 ? + :; ;9 …….. + + = 9 = = + Quando ci si ferma? Lezione1- Divide et impera 11 Il metodo iterativo: Esempio • Ci si ferma quando + = ⇒ > log + < + ) + + D E + F E+ + ⋯ + ) log + H( ) Contiene una serie geometrica, che è del tipo Lezione1- Divide et impera 12 6 21/10/2013 Il metodo iterativo: Esempio • La serie geometrica converge, quando |x|<1, a Lezione1- Divide et impera 13 Metodo iterativo: Alberi di ricorrenza • • Gli alberi di ricorrenza rappresentano un modo conveniente per visualizzare i passi di sostituzione necessari per risolvere una ricorrenza col Metodo Iterativo. Utili per semplificare i calcoli ed evidenziare le condizioni limite della ricorrenza Lezione1- Divide et impera 14 7 21/10/2013 Metodo iterativo: Alberi di ricorrenza • Esempio: T(n) = 2T(n/2) + n2 Lezione1- Divide et impera 15 Metodo iterativo: Alberi di ricorrenza • Esempio: ( ) = ( / )+ Lezione1- Divide et impera 16 8 21/10/2013 Metodo iterativo: Alberi di ricorrenza • Esempio: T(n) = 2T(n/2) + n2 Lezione1- Divide et impera 17 Metodo iterativo: Alberi di ricorrenza Lezione1- Divide et impera 18 9 21/10/2013 Metodo iterativo: Alberi di ricorrenza • Importante focalizzarsi su due parametri o il numero di volte in cui la ricorrenza deve essere iterata prima di giungere alla condizione limite (o base) o la somma dei termini che compaiono ad ogni livello della iterazione. Lezione1- Divide et impera 19 Metodo di sostituzione • • • • Tentare uno schema di soluzione Usare l’induzione matematica per trovare le costanti e mostrane la correttezza Utilizzato per i limiti superiore o inferiore Esempio: T (n) = 2T ( n / 2 ) + n Provare la soluzione T ( n ) = O ( n log n ) Il metodo consiste nel provare che T ( n ) ≤ cn log n dove / è una costante positiva T (n) ≤ 2(c n / 2 log( n / 2 )) + n ≤ cn log n / 2 + n = cn log n − cn log 2 + n = cn log n − cn + n ≤ cn log n perc ≥ 1 Verificare che la soluzione vale per le condizioni al contorno T(1)=1 Purtroppo non si può scegliere c sufficientemente grande perchè T (1 ) ≤ c log 1 = 0 Poichè la notazione asintotica prevede T ( n ) ≤ cn log n per n ≥ n 0 per n 0 cost. Considerare n=2 e n=3 c>=2 Lezione1- Divide et impera 20 10 21/10/2013 Metodo di sostituzione: Considerazioni • • Non vi sono regole specifiche per individuare la soluzione candidata Tentare soluzioni simili per ricorrenze simili (in genere cambiano le costanti). T(n) = 2T(n / 2 +17) + n c>=35 • Provare con funzioni che limitino superiormente ed inferiormente la funzione ricorsiva fino ad arrivare alla soluzione corretta • Talvolta per dimostrare matematicamente la correttezza di una soluzione è conveniente sottrarre dei termini di ordine inferiore T ( n) = T ( n / 2 ) + T ( n / 2 ) + 1 Provare la soluzione T ( n ) = O ( n ) T ( n ) ≤ cn T ( n ) ≤ cn − b T ( n) ≤ c n / 2 + c n / 2 + 1 T ( n ) ≤ (c n / 2 − b ) + (c n / 2 − b ) + 1 = cn + 1 Sbagliato!! = cn − 2b + 1 ≤ cn − b Lezione1- Divide et impera 21 Metodo di sostituzione: sostituzione di variabili • E’ possibile semplificare alcune ricorrenze effettuando una sostituzione delle variabili T (2 m ) = 2T (2m / 2 ) + m Sostituendo I = log T ( n) = 2T ( n ) + log n Sostituendo S ( m ) = T ( 2 m ) S ( m) = 2 S ( m ) + m S ( m) = O( m log m) T (n) = O (log n log log n) Lezione1- Divide et impera 22 11 21/10/2013 Teorema principale Sia #( )una funzione crescente definita sugli interi Siano α ≥ 1, β > 1, n0 ≥0 costanti per ≤ 0(1) -( ) ≤ 0 < α-( /.) + K( ) altrimenti 1. 2. 3. Se esiste una costante γ > 0 e ′M > 0t.c. αK per ≥ ′M , allora -( ) = "(#( ))se γ < 1 -( ) = "(#( )logβ )se γ = 1 -( ) = "( PQRβ α)se γ > 1 8 N = OK Lezione1- Divide et impera , 23 Abbozzo di dimostrazione Per semplicità, usiamo #( )al posto di "(#( )). ∗≤ ∗ Sia S∗ il min intero t.c. /!S T, ossia S = PQRβ + " ≤# + # ! + ⋯+ S∗ #( /!S ) = ∗ α #( /! ) {T, ,..,S∗ } Per induzione: α #( /! ) = γ #( )poiché α#( /!) = W#( )per hp. 1. 2. 3. -( ) ≤ ∑ γ < ⇒ ∑ γ = ⇒∑ γ > ⇒∑ = "( S∗ T, ,..,S∗ W # {T, ,..,S∗ } W {T, ,..,S∗ } W {T, ,..,S∗ } W {T, ,..,S∗ } W = "( ) ⇒ ( ) = "(#( )) = S∗ + ⇒ ( ) = "(#( )PQRβ ) = "(WS ) ⇒ ( ) = "(WS #( )) induzione #( /!S )) = "( ∗ ∑ =# ∗ S∗ #( T)) = Lezione1- Divide et impera "( ∗ S ∗) = "( PQRβ ) = "( PQRβα) 24 12 21/10/2013 Esempi • Ricerca binaria: T(n) = T(n/2) + O(1) α=1, β=2, f(n)=1 ⇒ caso γ =1 e T(n) = O(log n) • Massimo in un array: T(n) = 2 T(n/2) + O(1) α=2, β=2, f(n)=1 ⇒ caso γ >1 e T(n) = O(nlog2 2) = O(n) • Somma ricorsiva a due a due: T(n) = 2T(n/2) + O(n) α=1, β=2, f(n)=n ⇒ caso γ <1 e T(n) = O(n) • Insertion sort ricorsivo: T(n) = T(n-1) + O(n) Generazione di sequenze binarie: T(n) = 2 T(n-1) + O(1) Generazione delle permutazioni: T(n) = n T(n-1) + O(n) ⇒ usare l’espansione invece del teorema fondamentale Lezione1- Divide et impera • α = 1, β = 2, f(n) = n • • α f(n/β) = 1 x n/2 = n/2 γ f(n) = γ x n ) γ = 1/2 Lezione1- Divide et impera 25 26 13 21/10/2013 Moltiplicazione veloce di interi • • • • • Interi rappresentati come array di cifre Per la somma, l'algoritmo che consiste nell'addizionare le singole cifre propagando l'eventuale riporto, richiede 0( )passi ed è quindi ottimo Per il prodotto, l'algoritmo elementare richiede tempo 0( 2) 3587 x 2831 = ------3587 10761 28696 7174 -------10154797 Tempo di esecuzione della moltiplicazione riducibile mediante applicazione del divide et impera Miglioramento significativo per numeri a precisione arbitraria Lezione1- Divide et impera 27 Moltiplicazione veloce di interi Ogni numero intero Ydi cifre può essere scritto come T / × Y[ + Y\ 8 o Y[ indica il numero formato dalle cifre più significative di Y ] • o Y\ denota il numero formato dalle 8 ] cifre meno significative. Per moltiplicare due numeri ^e _, vale l'uguaglianza 8 ^_ = 10 ] ^` +^a 8 8 10 ] _` +_a = 108 ^` _` + 10 ] ^` _a + ^a _` + ^a _a Decomposizione: se be channo almeno due cifre, dividili come numeri b[ , b\ , c[ ec\ aventi ciascuno la metà delle cifre Ricorsione: calcola ricorsivamente le moltiplicazioni b[ c[ ,b[ c\ ,b\ c[ eb\ c\ . Ricombinazione: combina i numeri risultanti usando l'uguaglianza suddetta. Lezione1- Divide et impera 28 14 21/10/2013 Divide et impera: moltiplicazione 1 3587 x 2831 = (102 x 35 + 87) x (102 x 28 + 31) = 104 x (35 x 28)+ 102 x (35 x 31 + 87 x 28 ) + 87 x 31 = 104 x 980 + 102 x 3521 + 2697 = 10154797 • l'algoritmo esegue quattro moltiplicazioni di due numeri di / cifre (a un costo ( / ),e tre somme di due numeri di cifre (a un costo "( )) o la moltiplicazione per il valore T può essere realizzata spostando le cifre di posizioni verso sinistra e riempiendo di 0 la parte destra o il costo della decomposizione e della ricombinazione è • Vale la relazione di ricorrenza /M per ≤ 1 -( ) ≤ 4- 8 ] altrimenti +/ Lezione1- Divide et impera 29 Divide et impera: moltiplicazione 1 per ≤ 1 /M -( ) ≤ 4- 8 ] +/ altrimenti • Applicazione del teorema fondamentale delle ricorrenze o ∝= +, ! = f#( ) = o #( /!) = +( / ) = = # del teorema con W = o ne deriva "( ghi + ) = "( ), quindi si applica il terzo caso non migliorando quindi le prestazioni Lezione1- Divide et impera 30 15 21/10/2013 Divide et impera: moltiplicazione 2 • Osservazione nella formula precedente • Il secondo termine può essere calcolato facendo uso degli altri due valori ^` _` e ^a _a nel modo seguente: b[ c\ + b\ c[ = b[ c[ + +b\ c\ % b[ % b\ Z c[ % c\ • Osservazione: a – b = a + (-b) (basta cambiare b[0]) • Quindi sono necessarie tre moltiplicazioni e non quattro Lezione1- Divide et impera 31 Moltiplicazione veloce di interi Lezione1- Divide et impera 32 16 21/10/2013 Moltiplicazione veloce 2 [alvie] Lezione1- Divide et impera 33 Opus libri: grafica e moltiplicazione di matrici Lezione1- Divide et impera 34 17 21/10/2013 Operazioni su matrici e grafica Lezione1- Divide et impera 35 Operazioni su matrici e grafica: scalare (dimensione 2) Lezione1- Divide et impera 36 18 21/10/2013 Operazioni su matrici e grafica: ruotare (dimensione 2) Lezione1- Divide et impera 37 Operazioni su matrici e grafica: traslare (dimensione 2) Lezione1- Divide et impera 38 19 21/10/2013 Sequenza di trasformazioni in una scena Lezione1- Divide et impera 39 Moltiplicazione veloce tra matrici Lezione1- Divide et impera 40 20 21/10/2013 Moltiplicazione veloce tra matrici Lezione1- Divide et impera 41 Analisi della moltiplicazione Lezione1- Divide et impera 42 21 21/10/2013 Opus libri: il problema della coppia più vicina • Problema: trovare la coppia di punti più vicina tra un insieme di punti del piano. • Il problema può essere risolto in tempo0( le distanze tra tutti i punti. ] ) calcolando • Utilizzando la tecnica del divide et impera, il problema può essere risolto in tempo 0 log Lezione1- Divide et impera 43 Il problema della coppia più vicina • • • • L'insieme ha cardinalità costante: usiamo la ricerca esaustiva. altrimenti: lo dividiamo in due parti uguali je k, per esempio quelli a sinistra e quelli a destra di una fissata linea verticale o troviamo ricorsivamente le soluzioni per l'istanza per je quella per kindividuando due coppie di punti a distanza minima, lm e ln soluzione finale: o o una delle due coppie già individuate o oppure può essere formata da un punto in je uno in k se lmn è la minima distanza tra punti aventi estremi in je k, la soluzione finale è data dalla coppia di punti a distanza min{lmn , lm , ln }. Lezione1- Divide et impera 44 22 21/10/2013 Il problema della coppia più vicina • 1° Passo base: Se l’istanza è sufficientemente piccola risolvi tramite una ricerca esaustiva • 2° Passo: Individuare la linea verticale: o Ordiniamo i punti di P per ascissa non decrescente o b punto in posizione centrale dell’ordinamento o r = {s ∈ u: s. b ≤ b} e = {s ∈ u: s. b > b} • 3° Passo: Risolvi ricorsivamente in S e D o Siano lm e ln le soluzioni riportate. • 4° Passo: Ricombina: determinare lmn o Sia d = min{lm , ln }. o Consideriamo la striscia r′ = {s ∈ u: b − \ ≤ s. b ≤ b} e ′ = {s ∈ u: b ≤ s. b ≤ b + \} Lezione1- Divide et impera 45 Il problema della coppia più vicina Lemma: o Sia u\ la lista dei punti in rx ∪ x ordinati per ordinata non decrescente. o s, z ∈ rx ∪ x sono a distanza minore di dallora sono memorizzati in due posizioni che distano al più 10in u\ Per trovare lmn è sufficiente scorrere i punti nel vettore e, per ognuno di questi, calcolarne la distanza dai 10 punti che lo seguono nell’ordinamento. • Lezione1- Divide et impera 46 23 21/10/2013 Il problema della coppia più vicina: tempo • • • • Caso base: ≤ 2tempo costante/M Decomposizione: Se i punti sono ordinati per ascisse ed ordinate non decrescenti, la decomposizione costa "( ). o NB: L’ordinamento dei punti viene fatto preliminarmente (prima della ricorsione) costo "( ghi ) Ricombinazione: In base la lemma precedente è "( ). Se i punti sono ordinati per ascisse ed ordinate non decrescenti, la decomposizione costa "( ). o NB: L’ordinamento dei punti viene fatto preliminarmente (prima della ricorsione) costo "( ghi ) ={ T Dove /M e/ sono costanti. Per il teorema fondamentale + [f ≤ |P}~ $f } = "( ghi ) Lezione1- Divide et impera 47 Esercizi • • Dato un vettore ordinato contenente n interi, progettare un algoritmo che data una chiave restituisca il numero di occorrenze di nel vettore. L’algoritmo deve avere complessità 0(log ). Scrivere un algoritmo Foo(n) la cui complessità in tempo al caso pessimo sia modellata dalla seguente relazione di ricorrenza: O(1) n < 10 T ( n) = 2 3T (n / 2) + Θ( n ) n ≥ 10 • Infine, si risolva anche la suddetta relazione. Es 3.10 del libro Crescenzi et al. Lezione1- Divide et impera 48 24