Appunti di Algoritmi e Strutture Dati. Alberto Carraro
|
|
- Gastone Donati
- 8 anni fa
- Visualizzazioni
Transcript
1 Appunti di Algoritmi e Strutture Dati Alberto Carraro
2 2
3 Contents 1 Introduzione informale agli algoritmi I numeri di Fibonacci Algoritmo numerico Algoritmo ricorsivo Algoritmo iterativo Algoritmo basato su potenze ricorsive Modelli di calcolo e metodologie di analisi Criteri di costo La notazione asintotica Delimitazioni inferiori e superiori Metodi di analisi Analisi di algoritmi ricorsivi Metodo di iterazione Metodo di sostituzione Il teorema fondamentale delle ricorrenze Analisi dell albero della ricorsione Cambiamenti di variabile Analisi ammortizzata Metodo dell aggregazione Metodo degli accantonamenti Metodo del potenziale Esercizi Correttezza degli algoritmi Algoritmi iterativi Algoritmi ricorsivi Pile e code Pile Code Esercizi Liste Esercizi Alberi Introduzione Rappresentazioni Rappresentazioni indicizzate Rappresentazioni collegate Visite Visita in profondità Visita in ampiezza Alberi binari di ricerca Esercizi
4 6.6 Alberi AVL Ribilanciamento tramite rotazioni Alberi di Fibonacci Heap e code di priorità Heap Costruzione Realizzazione Code di priorità Algoritmi di ordinamento Selection sort Insertion sort Bubble sort Heap sort Merge sort Quicksort Counting sort Radix sort Limitazione inferiore per algoritmi basati sul confronto Tabelle hash Definizione di funzioni hash Risoluzione delle collisioni Liste di collisione Indirizzamento aperto Tecniche algoritmiche Divide et impera Programmazione dinamica Paradigma greedy Grafi Definizioni preliminari Rappresentazione di grafi Lista di archi Liste di adiacenza Matrice di adiacenza Confronto tra le rappresentazioni Visite di grafi Minimo albero ricoprente Teorema fondamentale Algoritmo di Kruskal Algoritmo di Prim Cammini minimi con sorgente singola Cammini minimi e rilassamento Algoritmo di Dijkstra Algoritmo di Bellman-Ford Cammini minimi fra tutte le coppie Cammini minimi e moltiplicazione di matrici Algoritmo di Floyd-Warshall
5 15 Reti di flusso Introduzione Problema del flusso massimo Flusso massimo - taglio minimo Algoritmo di Ford-Fulkerson Ottimizzazione di Edmond-Karp Abbinamento massimo nei grafi bipartiti Caso di studio: segmentazione di immagini String matching Introduzione Algoritmo ingenuo String matching con automa a stati finiti Automi a stati finiti L algoritmo Costruzione dell automa Algoritmo di Knuth - Morris - Pratt Geometria computazionale Intersezione tra segmenti Ricerca di un intersezione tra diversi segmenti Inviluppo convesso Algoritmo brute force Algoritmo di Jarvis Algoritmo di Graham Algoritmo Quick Hull Teoria della NP-completezza Complessità di problemi decisionali Classi di complessità La classe NP Non determinismo La gerarchia Riducibilità polinomiale Problemi NP-completi La classe conp e la relazione tra P e NP Appendice Serie aritmetica Serie geometrica Calcolo di somme per integrazione Goniometria e trigonometria
6 6
7 Chapter 1 Introduzione informale agli algoritmi Definizione 1.1. Un algoritmo è un insieme di istruzioni, definite passo per passo, in modo tale da poter essere eseguite meccanicamente, e tali da produrre un determinato risultato. 1.1 I numeri di Fibonacci Si vuole scrivere un algoritmo per il calcolo dell n-esimo numero di Fibonacci, che può essere calcolato utilizzando la seguente formula: { 1 se n = 1, 2 F n = (1.1) F n 1 + F n 2 se n 3 Saranno presentati diversi algoritmi, evidenziandone pregi e difetti Algoritmo numerico Un primo algoritmo si basa sull utilizzo di una funzione matematica che calcoli direttamente i numeri di Fibonacci; proviamo a vedere se è possibile individuarne una esponenziale della forma a n con a 0 che soddisfi la relazione di ricorrenza 1.1: a n = a n 1 + a n 2 a n 2 (a 2 a 1) = 0 Poiché, per ipotesi, a 0, cerchiamo i valori di a che soddisfano l equazione: L equazione 1.2 ammette due radici reali: a 2 a 1 = 0 (1.2) φ = ˆφ = Le funzioni φ n e ˆ φ n soddisfano entrambe la relazione (1.1), ma nessuna di esse calcola correttamente i numeri di Fibonacci come vorremmo: ad esempio, φ 2 F 2 ; questo perché non sono stati considerati i passi base della definizione ricorsiva. Per risolvere il problema, è sufficiente osservare che una qualunque combinazione lineare di funzioni che soddisfano la relazione di Fibonacci soddisfa anch essa tale relazione; cerchiamo opportune costanti c 1 e c 2 che diano la funzione cercata: { c 1 φ + c 2 ˆφ = 1 c 1 φ 2 + c 2 ˆφ 2 = 1 Risolvendo il sistema si ottiene: 7
8 c 1 = c 2 = 1 5 Segue che il primo algoritmo per il calcolo dei numeri di Fibonacci è il seguente: 1 int fibonaccinumerico ( int n){ 1 2 return 5 (φ n φ ˆn ); 3 } Algoritmo Fibonacci numerico Il limite di tale algoritmo è dato dal fatto che si è costretti ad operare con numeri reali, rappresentati nei calcolatori con precisione limitata, e quindi si possono fornire risposte errate dovute ad errori di arrotondamento Algoritmo ricorsivo Data la natura ricorsiva della relazione di Fibonacci, si può pensare di realizzare un algoritmo ricorsivo, come il seguente: 1 int fibonacciricorsivo ( int n){ 2 if (n <= 2) 3 return 1; 4 else Algoritmo Fibonacci ricorsivo 5 return fibonacciricorsivo (n -1) + fibonacciricorsivo (n -2) ; 6 } Per analizzare le prestazioni di un algoritmo, si possono considerare il numero di linee di codice eseguite (complessità temporale) e la quantità di memoria occupata (complessità spaziale): consideriamo la prima. In generale, ogni algoritmo ricorsivo può essere analizzato mediante una relazione di ricorrenza: il tempo speso da una routine è pari al tempo speso all interno della routine più quello speso dalle chiamate ricorsive; ad esempio, la relazione per l algoritmo sopra descritto, per n > 2, è la seguente: T (n) = 2 + T (n 1) + T (n 2) Possiamo rappresentare le chiamate ricorsive con una struttura ad albero, detta albero di ricorsione: si usa un nodo, la radice dell albero, per la prima chiamata e generiamo un figlio per ogni chiamata ricorsiva. F 5 = 5 F4 = 3 F3 = 2 F3 = 2 F2 = 1 F2 = 1 F 1 = 1 F2 = 1 F 1 = 1 Figure 1.1: Albero di ricorsione di fibonacciricorsivo per il calcolo di F 5 Per calcolare il numero di linee di codice eseguite da una generica chiamata fibonacciricorsivo(n) usiamo i seguenti lemmi. Lemma 1.1. Sia T n l albero delle chiamate ricorsive della funzione fibonacciricorsivo(n): il numero di foglie in T n è pari al numero di Fibonacci F n. Proof. Procediamo per induzione su n. 8
9 Caso base: è banalmente verificato; per n = 1, T 1 contiene un solo nodo, e dunque una sola foglia (F 1 = 1) e, per n = 2, T 2 contiene anch esso un solo nodo, e quindi una sola foglia (F 2 = 1). Ipotesi induttiva: sia n > 2 e supponiamo che il lemma sia verificato per ogni k tale per cui 2 k n 1. Passo induttivo: usando l ipotesi, dimostriamo che il lemma vale per n. L albero della ricorsione T n ha come sottoalbero sinistro T n 1 e come sottoalbero destro T n 2 : per ipotesi essi hanno, rispettivamente, F n 1 e F n 2 foglie, dunque T n ha F n 1 + F n 2 = F n foglie, come si voleva dimostrare. Lemma 1.2. Sia T un albero binario in cui ogni nodo interno ha esattamente due figli: allora il numero di nodi interni di T è pari al numero di foglie diminuito di uno. Proof. Procediamo per induzione su n. Caso base: se n = 1, T ha una sola foglia e nessun nodo interno, quindi la condizione è verificata. Ipotesi induttiva: supponiamo per ipotesi che la condizione valga per tutti gli alberi con meno di n nodi. Passo induttivo: proviamo che la condizione valga anche per T, ossia che i = f 1, dove i è il numero di nodi interni di T e f il numero di foglie di T ; sia ˆT un albero ottenuto da T rimuovendo una qualunque coppia di foglie aventi lo stesso padre: ˆT avrà i 1 nodi interni e f = f 1 foglie. Per ipotesi, poiché ˆT ha meno nodi di T, vale la relazione i 1 = (f 1) 1: sommando uno ad ambo i membri, si ottiene i = f 1, ossia l uguaglianza che si voleva dimostrare. Alla luce di quanto appena dimostrato, la chiamata generica fibonacciricorsivo(n) comporta l esecuzione di F n righe di codice per via delle foglie (una per ciascuna foglia) e 2 (F n 1) righe per via dei nodi interni (due per ciascuno), per un totale di 3 F n 2 righe di codice, una soluzione assai inefficiente Algoritmo iterativo La lentezza di fibonacciricorsivo è dovuta al fatto che continua a ricalcolare ripetutamente la soluzione dello stesso sottoproblema (vedi, ad esempio, F 3 nell albero di ricorsione in figura 1.1); per fare di meglio, si potrebbe risolvere il sottoproblema una volta sola, memorizzarne la soluzione ed usarla nel seguito invece di ricalcolarla: questa è l idea che sta alla base della tecnica chiamata programmazione dinamica. 1 int fibonacciiterativo ( int n){ 2 int Fib [n]; 3 Fib [0] = Fib [1] = 1; 4 for ( int i = 2; i < n; i ++) 5 Fib [i] = Fib [i -1] + Fib [i -2]; 6 return Fib [ n] 7 } Algoritmo Fibonacci iterativo Per quanto riguarda l analisi temporale, occorre operare in maniera diversa: per ogni linea di codice, calcoliamo quante volte essa è eseguita, esaminando a quali cicli appartiene e quante volte essi sono eseguiti. Nel nostro caso si ha: T (n) = { 4 se n = 1, 2 2n se n > 2 Si tratta di una soluzione decisamente più efficiente dell algoritmo ricorsivo proposto. 9
10 Un piccolo miglioramento L algoritmo fibonacciiterativo richiede una quantità di spazio di memoria linearmente proporzionale alla dimensione dell input n, anche se ogni iterazione utilizza solo i due valori precedenti a F n, F n 1 e F n 2 ; rimpiazzando l array con due variabili, come proposto nel seguente algoritmo, otteniamo un notevole risparmio di memoria. 1 int fibonacciiterativomodificato ( int n){ 2 int a = 1, b = 1; 3 for ( int i =2; i<n; i ++) { 4 c = a + b; 5 a = b; 6 b = c; 7 } 8 return b; 9 } Algoritmo Fibonacci iterativo modificato Algoritmo basato su potenze ricorsive L algoritmo che sarà presentato in questa sezione si basa sul seguente lemma. ( ) ( ) n 1 ( ) Lemma 1.3. Sia A =. Allora A 1 0 n 1 Fn F = = n F n 1 F n 2 Proof. Procediamo per induzione su n. Caso base: sia F 0 = 0 fissato per convenzione. Per n = 2 il caso base è banalmente verificato: ( ) 1 ( ) 1 1 F2 F = F 1 F 0 Ipotesi induttiva: supponiamo valido il lemma per n 1, ossia: ( ) n 2 ( ) 1 1 Fn 1 F = n F n 2 F n 3 Passo induttivo: dimostriamo la validità del lemma per n: ( ) n 1 ( ) ( ) 1 1 A n 1 Fn 1 F = = n = 1 0 F n 2 F n ( ) Fn 1 + F n 2 F n 1 = F n 2 + F n 3 F n 2 ( ) Fn F n 1 F n 1 F n 2 Usando il lemma appena dimostrato ed utilizzando il metodo dei quadrati ripetuti per il calcolo della potenza n-esima della matrice, si ottiene il seguente algoritmo: 1 int fibonaccimatrice ( ) ( int n){ M = potenzadimatrice (M, n - 1) 4 return M [0][0] 5 } Algoritmo Fibonacci con matrici 6 void potenzadimatrice ( int [][] M, int n) 7 if (n > 1) { 8 potenzadimatrice (M, n / 2) 9 M = M * M 10 } 11 if (n dispari ( ){ ) M = M * } 10
11 L algoritmo presenta la seguente relazione di ricorrenza: { O(1) se n 1 T (n) = T (n/2) + O(1) se n > 1 la cui soluzione è: T (n) = O(log n) 11
12 12
13 Chapter 2 Modelli di calcolo e metodologie di analisi 2.1 Criteri di costo Il criterio di misurazione del tempo di esecuzione di un algoritmo che si basa sull assunzione che le diverse operazione richiedano tutte lo stesso tempo, indipendentemente dalla dimensione degli operandi coinvolti, è noto come misura di costo uniforme; si tratta di un criterio utile in prima approssimazione, ma si tratta di un modello troppo idealizzato. Per ovviare a questo problema, è stato proposto un criterio, noto come misura di costo logaritmico, che assume che il costo di esecuzione delle operazioni dipenda dalla dimensione degli operandi coinvolti; nonostante fornisca una buona approssimazione, in svariati casi può generare una complessità eccessiva e non necessaria. 2.2 La notazione asintotica Definizione 2.1. Data una funzione f(n), definiamo: O(f(n)) = {g(n) : c > 0 n 0 0 : g(n) cf(n), n n 0 } (g(n) cresce al più come f(n)); Ω(f(n)) = {g(n) : c > 0 n 0 0 : g(n) cf(n), n n 0 } (g(n) cresce almeno come f(n)); Θ(f(n)) = {g(n) : c 1, c 2 > 0 n 0 0 : c 1 g(n) f(n) c 2 g(n), n n 0 } (g(n) cresce esattamente come f(n)). Proprietà 2.1. Date due funzioni f(n) e g(n), risulta g(n) = Θ(f(n)) se e solo se g(n) = O(f(n)) e g(n) = Ω(f(n)). Proprietà 2.2. Θ gode della proprietà simmetrica: g(n) = Θ(f(n)) se e solo se f(n) = Θ(g(n)). Proprietà 2.3. O, Ω sono simmetriche trasposte: f(n) = Ω(g(n)) se e solo se g(n) = O(f(n)). Proprietà 2.4. Per tutte e tre le notazioni vale la proprietà transitiva: per la notazione O, ad esempio, f(n) = O(g(n)) g(n) = O(h(n)) f(n) = O(h(n)). Teorema 2.1. Siano f(n) e g(n) funzioni positive: f(n) lim n + g(n) = + M > 0 n 0 > 0 : f(n) g(n) M, n n 0 f(n) M g(n) f(n) = Ω(g(n)) g(n) = O(f(n)) f(n) lim n + g(n) = 0 preso ɛ > 0, n 0 > 0 : f(n) g(n) ɛ, n n 0 f(n) ɛ g(n) f(n) = O(g(n)) g(n) = Ω(f(n)) 13
14 f(n) lim n + g(n) = l 0 preso ɛ > 0, n 0 > 0 : f(n) g(n) l ɛ, n n0 ɛ f(n) g(n) l ɛ l ɛ f(n) g(n) l + ɛ (l ɛ) g(n) f(n) (l + ɛ) g(n) f(n) = Θ(g(n)) 2.3 Delimitazioni inferiori e superiori Definizione 2.2. Un algoritmo A ha costo di esecuzione O(f(n)) su istanze di ingresso di dimensione n e rispetto ad una certa risorsa di calcolo, se la quantità r di risorsa sufficiente per eseguire A su una qualunque istanza di dimensione n verifica la relazione r(n) = O(f(n)). Definizione 2.3. Un problema P ha complessità O(f(n)) rispetto ad una data risorsa di calcolo se esiste un algoritmo che risolve P il cui costo di esecuzione rispetto a quella risorsa è O(f(n)). Definizione 2.4. Un algoritmo A ha costo di esecuzione Ω(f(n)) su istanze di dimensione n e rispetto ad una certa risorsa di calcolo, se la massima quantità r di risorsa necessaria per eseguire A su istanze di dimensione n verifica la relazione r(n) = Ω(f(n)). Definizione 2.5. Un problema P ha complessità Ω(f(n)) rispetto ad una data risorsa di calcolo se ogni algoritmo che risolve P ha costo di esecuzione Ω(f(n)) rispetto a quella risorsa. Definizione 2.6. Dato un problema P con complessità Ω(f(n)) rispetto ad una data risorsa di calcolo, un algoritmo che risolve P è ottimo se ha costo di esecuzione O(f(n)) rispetto a quella risorsa. 2.4 Metodi di analisi Per analizzare il tempo di esecuzione di un algoritmo, solitamente si usa distinguere fra tre diverse categorie di istanze, a parità di dimensione; sia T (I) il tempo di esecuzione dell algoritmo sull istanza I: Caso peggiore: Caso migliore: T worst (n) = T best (n) = max T (I) istanze di dimensione n min T (I) istanze di dimensione n Caso medio: sia P (I) la probabilità di occorrere dell istanza I: T avg (n) = istanze di dimensione n 2.5 Analisi di algoritmi ricorsivi Metodo di iterazione (T (I) P (I)) L idea è quella di ridurre la ricorsione ad una sommatoria dipendente solo dalla dimensione del problema iniziale. Esempio 2.1. Sia data la seguente relazione di ricorrenza e assumiamo, per semplicità di analisi, che n sia una potenza di 3: { 1 se n = 1 T (n) = 9 T (n/3) + n se n > 1 Srotolando la ricorsione otteniamo: 14
15 T (n) = 9 T (n/3) + n = 9 (9 T (n/9) + n/3) + n = 9 2 T (n/3 2 ) + 9 n/3 + n =... i 1 = 9 i T (n/3 i ) + (9/3) j n Dal momento che n/3 i = 1 quando i = log 3 n, risulta: j=0 log 3 n 1 T (n) = 9 log3n + n Poiché log 3 n = log 9 n log 3 9, risulta 9 log 3 n = 9 log 9 n log 3 9 = n 2 ; usando la serie geometrica, si ottiene: Metodo di sostituzione T (n) = n 2 + 3log 3 n j=0 3 j = n 2 + n 1 2 = Θ(n 2 ) L idea è di intuire la soluzione della relazione di ricorrenza ed utilizzare il principio di induzione per dimostrare che l intuizione è corretta. Esempio 2.2. Sia data la seguente relazione di ricorrenza: T (n) = { 1 se n = 1 T ( n/2 ) + n se n > 1 Intuizione: T (n) = O(n), ossia dimostrare che esistono c > 0 e n 0 > 0 tali che T (n) c n, n n 0 Passo base: provo n = 1 T (1) = 1 c 1 c 1 Ipotesi induttiva: supponiamo di avere c > 0 tale per cui T ( n/2 ) c n/2. Passo induttivo: sia n > 1 T (n) = T ( n/2 ) + n c n/2 + n c n 2 + n Rimane da provare che c n 2 + n c n; ciò risulta essere vero per c 2. Affinché siano verificati sia il caso base che il passo induttivo, occorre prendere una qualsiasi c 2. Esempio 2.3. Per illustrare altre sottigliezze relative all uso del metodo di sostituzione, consideriamo la seguente relazione di ricorrenza: T (n) = { 1 se n = 1, 2 9 T ( n/3 ) + n se n > 2 Intuizione: T (n) = O(n 2 ), ossia dimostrare che esistono c > 0 e n 0 > 0 tali che T (n) c n 2, n n 0 Passo base: T (1) = T (2) = 1 c 1 2 c 2 2 c 1 Ipotesi induttiva: assumiamo che la disuguaglianza sia soddisfatta per ogni k < n 15
16 Passo induttivo: sia n > 2 T (n) = 9 T ( n/3 ) + n 9 c n/3 2 + n 9 c (n/3) 2 + n = c n 2 + n Usando questa soluzione, non riusciamo a dimostrare la nostra affermazione poiché c n 2 + n > c n 2 ; possiamo risolvere facilmente il problema usando un ipotesi induttiva più forte, in modo da far comparire un addendo negativo negativo che, sommato ad n, faccia tornare i conti; provando con l ipotesi T (n) c (n 2 n) otteniamo: T (n) = 9 T ( n/3 ) + n 9 c ((n/3) 2 n/3) + n = c n 2 3 c n + n Rimane da provare che c n 2 3 c n + n c (n 2 n); ciò risulta essere vero per c 1/2. Abbiamo, però, un altro problema: il passo base non è più verificato; infatti T (1) = 1 > c (1 2 1) = 0; ciò può essere risolto cambiando n 0, che prima avevamo scelto pari a 1. Poiché T (2) = 1 c (4 2) per c 1/2, vediamo se possiamo scegliere n 0 = 2: per poterlo fare, dobbiamo definire tutti i casi che si riconducono a T (1) come casi base e verificare che, per tutti questi, esista c che verifichi la nostra condizione; in particolare, in questo esempio, dobbiamo definire come passi base T (3), T (4), T (5), oltre a T (2) (per n 6 ci si riconduce a un caso per cui la condizione valga): T (3) = 9 T (1) + 3 = 12 c (3 2 3) per c 2 T (4) = 9 T (1) + 4 = 13 c (4 2 4) per c 13/12 T (5) = 9 T (1) + 5 = 14 c (5 2 5) per c 7/10 Affinché siano verificati tutti i casi base e il passo induttivo, dobbiamo avere n 0 = 2 e c Il teorema fondamentale delle ricorrenze Si tratta di un metodo per analizzare algoritmi basati sulla tecnica del dividi et impera, in cui: un problema di dimensione n viene diviso in a sottoproblemi di dimensione n/b; dividere in sottoproblemi e combinare le soluzioni richiede tempo f(n). La relazione di ricorrenza corrispondente a questo scenario è la seguente: ( n ) T (n) = a T + f(n) (2.1) b Per analizzare la relazione di ricorrenza, consideriamo l albero della ricorsione ed assumiamo che n sia una potenza esatta di b e che la ricorsione si fermi quando n = 1. Proprietà 2.5. I sottoproblemi al livello i dell albero della ricorsione hanno dimensione n/b i. Proprietà 2.6. Il contributo di un nodo di livello i al tempo di esecuzione (escluso il tempo speso nelle chiamate ricorsive) è f(n/b i ). Proprietà 2.7. Il numero di livelli nell albero della ricorsione è log b n. Proprietà 2.8. Il numero di nodi al livello i dell albero della ricorsione è a i. Usando le proprietà appena elencate, si può riscrivere la relazione di ricorrenza nella seguente forma: T (n) = log b n i=0 ( n ) a i f b i La soluzione della (2.2) è data dal seguente teorema, noto come teorema fondamentale delle ricorrenze. (2.2) 16
17 Teorema 2.2. La relazione di ricorrenza { 1 se n = 1 T (n) = a T (n/b) + f(n) se n > 1 ha soluzione: 1. T (n) = Θ(n log b a ), se f(n) = O(n log b a ɛ ) per ɛ > 0; 2. T (n) = Θ(n log b a log n), se f(n) = Θ(n log b a ); 3. T (n) = Θ(f(n)), se f(n) = Ω(n log b a+ɛ ) per ɛ > 0 e a f(n/b) c f(n) per c < 1 ed n sufficientemente grande. Proof. Assumiamo per semplicità che n sia una potenza esatta di b. Caso 1: riscriviamo il termine generico della sommatoria 2.2: ( n ) ( ( n ) a i f b i = O a i logb a ɛ) ( b i = O n log b a ɛ ( a b ɛ b log b a ) i ) = O(n log b a ɛ (b ɛ ) i ) Per limitare superiormente T (n) si può scrivere: ( ) ( ( log b n log b n T (n) = O(n log b a ɛ (b ɛ ) i ) = O n log b a ɛ (b ɛ ) i = O n log b a ɛ O ( i=0 n log b a ɛ ( i=0 )) b ɛ n ɛ 1 b ɛ = O(n log b a ɛ n ɛ ) = O(n log b a ) 1 )) b ɛ (log b n+1) 1 b ɛ = 1 Analizzando l equazione 2.2 e considerando solo i tempi di esecuzione relativi ai nodi sull ultimo livello dell albero di ricorsione, otteniamo: T (n) a log b n = n log b a T (n) = Ω(n log b a ) Dalle due limitazioni segue che T (n) = Θ(n log b a ). Caso 2: anche in questo caso, riscriviamo il termine generico della sommatoria: ( n ) ( ( n ) a i f b i = Θ a i logb a) ( ( b i = Θ n log b a ) i ) a b log b a = Θ(n log b a ) Da cui segue: T (n) = log b n i=0 Θ(n log b a ) = Θ(n log b a log b n). Caso 3: sotto l assunzione a f(n/b) c f(n), risulta facile dimostrare che a i f(n/b i ) c i f(n); infatti: ( n ) ( n/b a i f b i = a i 1 i 1 ) ( n ) a f a i 1 c f b b i 1 Iterando il ragionamento si ottiene la disuguaglianza desiderata. Usando l equazione 2.2, la serie geometrica con base c < 1 e la disuguaglianza appena dimostrata, si può scrivere: T (n) = log b n i=0 ( n ) a i f b i f(n) c i = f(n) i=0 1 1 c = O(f(n)) Dalla relazione 2.2, si ricava immediatamente che T (n) = Ω(f(n)), da cui T (n) = Θ(f(n)). Esempio 2.4. Consideriamo la seguente relazione di ricorrenza: { O(1) se n = 1 T (n) = T (n/2) + O(1) altrimenti Si ha f(n) = O(1) = Θ(n log 2 1 ); ci troviamo, dunque, nel caso 2 del teorema, e quindi risulta T (n) = Θ(log n). 17
18 Esempio 2.5. Consideriamo la seguente relazione di ricorrenza: { O(1) se n = 1, 2 T (n) = 9 T (n/3) + n altrimenti Si ha f(n) = n = O(n log 3 9 ɛ ); dal caso 1 del teorema fondamentale, risulta che T (n) = Θ(n 2 ). Esempio 2.6. Consideriamo la seguente relazione di ricorrenza: { O(1) se n = 1 T (n) = T (n/2) + n + log n +1 Si ha f(n) = n+log n+1 = Θ(n) = Ω(n log 2 1 ɛ ), che può ricadere nel caso 3 del teorema fondamentale; occorre infatti trovare c < 1 tale che, per n sufficientemente grande, valga: Esisterà n 0 tale che, per n n 0, si ha a f(n/b) c f(n) ( n log n ) c (n + log n + 1) n 2 c + log n (= 1 ) n + log n < 1 per n + n 2 + log n n + log n È sufficiente prendere c = 3/4 affinché la disuguaglianza del caso 3 del teorema fondamentale sia verificata per n sufficientemente grande; segue che T (n) = Θ(n). Esempio 2.7. Consideriamo la seguente relazione di ricorrenza: { O(1) se n = 1, 2 T (n) = 3 T (n/3) + n log n altrimenti Nessuno dei casi del teorema principale può essere applicato; si potrebbe pensare di utilizzare il terzo caso, ma questo non è possibile poiché n log n è solo logaritmicamente, e non polinomialmente, più grande di n log 3 3 = n Analisi dell albero della ricorsione La tecnica consiste nell analizzare l albero delle chiamate ricorsive, indicando le dimensioni dei problemi di ogni chiamata ricorsiva, ed analizzando la dimensione totale dei problemi ad ogni livello dell albero. Esempio 2.8. Consideriamo la seguente relazione di ricorrenza: { 1 se n = 1, 2 T (n) = 9 T (n/3) + n 2 log n altrimenti n 9 n/3 n/3 n/3 n/3 n/3 n/3 n/3 n/3 n/ Figure 2.1: Parte iniziale dell albero di ricorsione Calcoliamo il costo di ciascun livello dell albero di ricorsione: 18
19 Liv. 0: problema di dimensione n e costo n 2 log n totale = n 2 log n; ( ) 2 ( Liv. 1: problema di dimensione n 3 e costo n 3 log n 3 totale = 9 Liv. 2: problema di dimensione n 3 2 Liv. i: problema di dimensione n 3 e costo i n 3 ) 2 log n 3 ; ( ) 2 ( ) 2 n e costo 3 log n 2 3 totale = 9 2 n 2 3 log n 2 ( n 3 i ) 2 log n 3 i totale = 9 i Foglie: problemi di dimensione 1 n 3 k = 1 k = log 3 n. ( 3 2 ; ) n 3 2 log n i 3 = n 2 log n i n 2 log 3); i T (n) = log 3 n 1 i=0 Risulta quindi T (n) = Θ(n 2 log 2 n). (n 2 log n n 2 i log 3) } {{ } contributo nodi interni + 9 log 3 n } {{ } contributo foglie log 3 n 1 log 3 n 1 = n 2 log n 1 n 2 log 3 i + n 2 i=0 i=0 = n 2 log n log 3 n n 2 log 3 (log 3 n 1) (log 3 n) 2 = n 2 log n log 3 n n 2 log 3 log2 3 n Cambiamenti di variabile + n 2 + n 2 log 3 log 3 n 2 Si tratta di una tecnica che viene utilizzata quando la relazione di ricorrenza presenta delle radici; per maggiori informazioni, vedere l esempio. Esempio 2.9. Consideriamo la seguente relazione di ricorrenza: T (n) = { O(1) se n = 1 T ( n) + O(1) altrimenti Eseguiamo la sostituzione n = 2 x (ossia x = log n), da cui n = 2 x/2 e T (2 x ) = T (2 x/2 ) + O(1); poniamo inoltre T (2 x ) = R(x), da cui otteniamo la relazione di ricorrenza R(x) = R(x/2) + O(1), risolvibile con il teorema principale (R(x) = O(log x)). Combinando le uguaglianze T (2 x ) = O(log x) e n = 2 x, si ha T (n) = O(log log n). + n Analisi ammortizzata una tecnica usata nel campo dell analisi delle complessità per calcolare il costo medio di una singola operazione, all interno di una sequenza che può contenere operazioni molto costose, in maniera più precisa, invece di sovrastimare tutte le operazioni attribuendo loro costo massimo. Attenzione: l analisi del caso medio considera la tipologia di input medio, ovvero quello più probabile; l analisi ammortizzata non usa la teoria della probabilità, ma considera una serie di operazioni e valuta le prestazioni medie di ciascuna operazione nel caso pessimo. Nell analisi ammortizzata, si fa sostanzialmente uso di tre metodi: metodo dell aggregazione; metodo degli accantonamenti; metodo del potenziale. 19
20 In seguito, considereremo l esempio di un contatore binario: dato un array A[k 1...0] di {0, 1}, che rappresenta il numero k 1 x = (A[i] 2 i ) i=0 si vuole calcolare il costo di n incrementi, con x inizialmente a zero; l algoritmo di incremento è il seguente: 1 increment ( array A void ) 2 i = 0 3 while (i < length (A) && A[i] == 1){ 4 A[ i] = 0 5 i = i } 7 if(i < length (A)) 8 A[ i] = 1 Seguendo la tecnica di analisi tradizionale, poiché nel caso peggiore la complessità dell incremento è O(k), concludiamo che il costo di n incrementi è O(n k). Proviamo, invece, ad usare ciascuna delle tre tecniche dell analisi ammortizzata e vediamo che risultati otteniamo Metodo dell aggregazione Idea: se una sequenza di n operazioni impiega, nel caso peggiore, un tempo T (n), allora il costo ammortizzato di ogni operazione è T (n)/n. Esempio Facciamo n operazioni di increment: chiaramente non tutti i bit cambiano ad ogni chiamata. In particolare: A[0] cambia ad ogni chiamata, per un totale di n volte; A[1] cambia ogni due chiamate, per un totale di n/2 volte; A[2] cambia ogni quattro chiamate, per un totale di n/4 volte; A[i] cambia la metà delle volte di A[i 1], ossia n/2 i volte. Il numero totale di cambi in n operazioni è: T (n) = k n 2 i i=0 k n k ( 1 i 2 2) i = n ( 1 ) i n = 2 n 2 Quindi, il costo medio delle operazioni nel caso pessimo è 2 n/n = 2 = O(1). i= Metodo degli accantonamenti Idea: vengono assegnati costi diversi a operazioni differenti; qualche operazione potrebbe essere associata a un costo minore o maggiore di quello effettivo, detto costo ammortizzato. Quando il costo ammortizzato supera quello effettivo, la differenza viene trattenuta come credito: questo può essere usato successivamente per pagare operazioni il cui costo ammortizzato è minore di quello effettivo. Siano: C i : costo effettivo dell i-esima operazione; Ĉi: costo ammortizzato dell i-esima operazione; dopo n operazioni, dev essere valida la relazione: n Ĉ i i=1 Il credito totale è dato dalla seguente formula: n Ĉ i i=1 i=0 n i=1 n i=1 C i C i i=0 20
21 Esempio Definiamo i costi nel seguente modo: impostare un bit a 1 costa 2 unità; impostare un bit a 0 costa 0 unità. Il costo ammortizzato di ogni operazione di increment è 2 unità, in quanto viene impostato un solo bit a 1, mentre un numero variabile di bit a 0. Ora dobbiamo provare che il credito totale è sempre maggiore o uguale a zero; definiamo innanzitutto b i come il numero di bit a 1 dopo l i-esima operazione. Proprietà 2.9. Se ogni operazione di increment viene pagata con costo ammortizzato 2 e il contatore è inizialmente nullo, allora dopo i operazioni il credito è maggiore o uguale a b i. Proof. Procediamo per induzione su i. Caso base: si ha i = 0; il credito è 0 e b i = 0, in quanto il contatore è inizialmente nullo. Ipotesi induttiva: per k < i, il credito dopo la k-esima operazione è maggiore o uguale a b k. Passo induttivo: sia i > 0; per ipotesi si ha che il credito, dopo i 1 operazioni, è maggiore o uguale a b i 1. L operazione i-esima: deposita due unità, da cui il credito iniziale è maggiore o uguale a b i 1 + 2; imposta a zero una serie s i di bit: si ha s i b i ; se il contatore non è stato azzerato, imposta un bit a 1. Il costo effettivo della chiamata è quindi minore o uguale a s i + 1. All uscita: b i b i 1 s i + 1; il credito è dato dalla differenza tra credito iniziale e costo effettivo: Dunque il credito residuo non è mai negativo. credito b i (s i + 1) = b i 1 s i + 1 b i Metodo del potenziale Idea: rappresentiamo il credito prepagato come una sorta di energia potenziale che può essere liberata per pagare le operazioni future; il potenziale è associato alla struttura e dipende dalle operazioni fatte. dove: Fissiamo una struttura ed eseguiamo n operazioni: φ(0) è il potenziale iniziale; φ(i) è il potenziale dopo l i-esima operazione; C i è il costo dell i-esima operazione; φ : {0, 1,..., n} R Ĉi è il costo ammortizzato dell i-esima operazione. I fondi effettivi devono essere pari alle spese sostenute, ossia: Ĉ i + φ(i 1) = C i + φ(i) da cui: Ĉ i = C i + φ(i) φ(i 1) 21
22 ossia: Si ha: Vogliamo che valga: n Ĉ i = i=1 = = = = n (C i + φ(i) φ(i 1)) i=1 n C i + i=1 n i=1 n i=1 n φ(i) i=1 n φ(i 1) i=1 n 1 C i + φ(n) + φ(i) i=1 n φ(i 1) φ(0) i=2 n 1 n 1 C i + φ(n) + φ(i) φ(j) φ(0) i=1 n C i + φ(n) φ(0) i=1 n Ĉ i i=1 n i=1 C i j=1 φ(n) φ(0) 0 (2.3) Se non sappiamo quante operazioni saranno fatte, per garantire la relazione 2.3, si impone φ(i) φ(0); di solito è comodo porre φ(0) = 0 e provare φ(i) 0. Esempio Scegliamo φ(i) come il numero di bit a 1 dopo la i-esima operazione: si ha φ(0) = 0 e φ(i) 0 per ogni i > 0; abbiamo un buon potenziale, in quanto soddisfa φ(i) φ(0). Consideriamo la i-esima operazione e sia s i il numero di bit impostati a zero nel corso di questa operazione; si ha: { b i 1 s i se b i 1 = k b i = Da cui: C i = b i 1 s i + 1 { s i s i + 1 se b i 1 = k se b i 1 < k se b i 1 < k { s i + b i b i 1 se b i 1 = k Ĉ i = s i b i b i 1 se b i 1 < k { s i + b i 1 s i b i 1 se b i 1 = k = s i b i 1 s i + 1 b i 1 se b i 1 < k { 0 se b i 1 = k = 2 se b i 1 < k Scegliendo 2 come costo ammortizzato siamo a posto. 2.7 Esercizi Esercizio 2.1. Dimostrare che f(n) Θ(g(n)) sse f(n) O(g(n)) Ω(g(n)). Svolgimento: ( ) Supponiamo che f(n) Θ(g(n)). Allora esistono due costanti c 0, c 1 R + ed un numero naturale n 0 N tali che per ogni n n 0 abbiamo c 0 g(n) f(n) c 1 g(n). Il fatto che n n 0. c 0 g(n) f(n) ci dice che f(n) Ω(g(n)), mentre ( n n 0 ).f(n) c 1 g(n) implica che f(n) O(g(n)). ( ) Siccome f(n) Ω(g(n)), esistono due costanti c 0 R + e n 0 N tali che f(n) c 0 g(n), per ogni n n 0. Siccome f(n) O(g(n)), esistono due costanti c 0 R + e n 0 N tali che c 0g(n) f(n), per ogni n n 0. Sia m 0 = max(n 0, n 0). Allora c 0g(n) f(n) c 0 g(n), per ogni n m 0. Dunque f(n) Θ(g(n)). 22
23 Esercizio 2.2. Dimostrare che per n > 6 si ha F n > 2 n 2. Svolgimento: Ricordiamo la definizione ricorsiva della serie di Fibonacci: { 1 se n = 1 oppure n = 2 F n = F n 1 + F n 2 se n 3 Prodediamo dunque con una prova per induzione completa. Il caso base è n = 7. Abbiamo F 7 = 13 > = 128 perché 13 = 169. Per ipotesi induttiva ora sappiamo che F n 1 > 2 n 1 2 e F n 2 > 2 n 2 dunque F n = F n 1 + F n 2 > 2 n n 2 2 = 2 n n 2 2 > 2 n 2 poiché > 2 2. Esercizio 2.3. Dire perché il tempo di calcolo dell algoritmo Fibonacci2 (pag. 6 [1]) cresce così rapidamente al crescere di n (argomentando usando l albero di ricorsione). Svolgimento: Come dice anche il libro stesso, la formula di ricorrenza che calcola la complessità dell algoritmo definisce la funzione di Fibonacci stessa. L esercizio 2.2 ci dice che F n Ω(2 n 2 ), e pertanto l algoritmo ha complessità almeno esponenziale. Esercizio 2.4. Spiegare come l algoritmo Fibonacci3 (pag. 9 [1]) è migliore di Fibonacci2. Svolgimento: La complessità di Fibonacci3 è lineare nella dimensione dell input mentre gli esercizi 2.2,2.3 ci dicono che la complessità di Fibonacci2 è esponenziale nella dimensione dell input. Esercizio 2.5. Dimostrare che n + 10 Θ( n). Svolgimento: Dobbiamo trovare due costanti c 0, c 1 R + ed un numero naturale n 0 N tali che per ogni n n 0 abbiamo c 0 n n + 10 c1 n. Le soluzioni (nell incognita n) della disequazione c 0 n n + 10 sono n 10 (1 c 2). Scegliendo c 0 = 2 0 abbiamo n Le soluzioni (nell incognita n) della disequazione n + 10 c 1 n sono n 10 (c 2 1). Scegliendo c 1 = 2 1 abbiamo n 10. L intersezione dei due intervalli di soluzioni {n : n 10} e {n : n 10 3 } è uguale a [10, + ). Quindi se scegliamo n 0 = 10, c 0 = 2 e c 1 = 2 abbiamo che il sistema { c 0 n n + 10 n + 10 c1 n 2, è soddisfatto per ogni n n 0. Esercizio 2.6. Dimostrare che 1 2 n2 3n Θ(n 2 ). Svolgimento: Dobbiamo trovare due costanti c 0, c 1 R + ed un numero naturale n 0 N tali che per ogni n n 0 abbiamo c 0 n n2 3n c 1 n 2. Le soluzioni (nell incognita n) della disequazione c 0 n n2 3n sono n 6 1 c 0. Scegliendo c 0 = 1 2 abbiamo n 12. Le soluzioni (nell incognita n) della disequazione 1 2 n2 3n c 1 n 2 sono n 6 2c. Scegliendo c = 1 abbiamo n 6. L intersezione dei due intervalli di soluzioni {n : n 12} e {n : n 6} è uguale a [12, + ). Quindi se scegliamo n 0 = 12, c 0 = 1 2 e c 1 = 1 abbiamo che il sistema è soddisfatto per ogni n n 0. Esercizio 2.7. Dimostriamo che: (1) f(n) O(g(n)) sse g(n) Ω(f(n)) (2) f(n) Θ(g(n)) sse g(n) Θ(f(n)) Svolgimento: { c 0 n n2 3n 1 2 n2 3n c 1 n 2 23
24 (1) Supponiamo f(n) O(g(n)). Allora esistono c R + e n 0 N tali che n n 0. f(n) cg(n). Dunque, ponendo c = 1 c si ha n n 0. c f(n) g(n) e siccome c R +, abbiamo mostrato che g(n) Ω(f(n)). Il viceversa si fa in maniera analoga. (2) Basta usare il punto (1). Esercizio 2.8. Sia f una funzione per cui esiste un numero naturale n 0 tale che f(n) > 0, per ogni n n 0. Dimostriamo che per ogni a, b R +, af(n) + b Θ(f(n)). Svolgimento: Dobbiamo trovare c 1, c 2, n 0 tali che n n 0. c 1 f(n) af(n) + b c 2 f(n). Scegliamo c 1 = a e c 2 = a + b. Allora af(n) af(n) + b af(n) + bf(n), per ogni n n 0. Esercizio 2.9. Dimostriamo che log a n è in Θ(log b n). Svolgimento: Poiché log b n = (log b a)(log a n), ponendo c = log b a abbiamo che c(log a n) log b n c(log a n) per ogni n 0. Esercizio Verificare che n(2 + sin n) = Θ(n). Svolgimento: Consideriamo le due disequazioni c 1 n n(2 + sin n) c 2 n. Abbiamo che n n(2 + sin n) e quindi basta scegliere c 1 = 1. Similmente n(2 + sin n) c 2 n sse 2 + sin n c 2. Scegliendo c 2 = 4 ciò è sempre vero. Esercizio Ordinare le seguenti classi di complessità: n 2, n log n, n 3 + log n, n, n 2 + 2n log n, log(log n), 17 log n, 10n 3 2, n 5 n 4 + 2n, 5n 2 log(log n), 3n 2 + n 3 log n, n + 6 log n. Svolgimento: Iniziamo confrontando n 5 n 4 +2n e 3n 2 +n 3 log n. Vogliamo dire che 3n 2 +n 3 log n o(n 5 n 4 n + 2n). Calcoliamo lim 5 n 4 +2n x 3n 2 +n 3 log n = lim x n2 n 3 = +. n +log n Poniamo y = log n. Allora log n n sse y 2 n sse y 2 2 y. Questa disuguaglianza è vera a partire dal valore y = 4 e dunque dal valore n 0 = 16 in poi. Quindi log(log n) log( n) 1 n = n 4. Pertanto esiste un n 0 tale che 5n 2 log(log n) 5n 9 4 O(n 3 + log n). Similmente possiamo ordinare tutte le altre funzioni. Alla fine ci risulta che 3n 2 + n 3 log n O(n 5 n 4 + 2n), n 3 + log n O(3n 2 + n 3 log n), 5n 2 log(log n) O(n 3 + log n), n 2 + 2n log n O(5n 2 log(log n)), n 2 O(n 2 + 2n log n), 10n 3 2 O(n 2 ), n log n O(10n 3 2 ), n + 6 log n O(n log n) n O(n + 6 log n), 17 log n O( n), log(log n) O(17 log n). Inoltre nessuna coppia di queste funzioni appartiene alla stessa Θ-classe di equivalenza. Esercizio Scrivere un algoritmo che prende in input una lista e calcola il numero dei massimi locali. Calcolarne quindi la complessità. Svolgimento: Ecco un possibile algoritmo. 24
25 9 input : array A di interi 10 output : il numero dei massimi locali in A c := 0; 13 j := 0; 14 while ( j< lentgh (A) ) { 15 if (j >0 and j+1 < length (A) and A[j -1] < A[j] > A[j +1]) { 16 c := c +1; 17 } 18 if (j >0 and j= length (A) -1 and A[j -1] < A[j]){ 19 c := c +1; 20 } 21 if (j -1=0 and j< length (A) and A[j -1] > A[j]){ 22 c := c +1; 23 } 24 j := j +1; 25 } 26 return c; La sua complessità è Θ(n) dove n è la lunghezza di A. Esercizio Risolvere le seguenti relazioni di ricorrenza utilizzando il master theorem: 1. T (n) = 2T ( n 4 ) + n T (n) = 3T ( n 3 ) + n 3. T (n) = 64T ( n 8 ) + n2 log n Svolgimento: Per i casi base (n = 1) le ricorrenze sono definite come Θ(1). 1. Siccome 0.51 = log 4 (2)+ε con ε > 0, abbiamo che n 0.51 = Ω(n log 4 (2)+ε ). Risolvendo la disequazione 2( n 4 )0.51 cn rispetto ad n otteniamo 4 c. Siccome < 1, possiamo scegliere per c 0.51 un valore nell intervallo ( 2 4, 1), che soddisfa la disequazione per ogni n 0. Quindi T (n) = 0.51 Θ(n log 4 (2) ). 2. Abbiamo che n O(n log 3 (3) ε ) e dunque T (n) = Θ(n log 3 (3) ). 3. Abbiamo che n 2 log n Ω(n log 8 (64)+ε ). Risolvendo la disequazione 64( n 8 )2 (log n 8 ) cn2 log n rispetto ad n otteniamo log n c. Al crescere di n l intervallo (0, 1 log n ) tende all intervallo (0, 1). Siccome c va scelto nell intervallo (1 3 log n, 1), non c è un valore di c che vada bene per tutti gli n a partire da un certo naturale in poi. Qui il master theorem non si può applicare. Esercizio Trovare i limiti asintotici superiori ed inferiori (migliori possibile) per T (n) in ciascuna delle seguenti ricorrenze (supponendo che T (n) = Θ(1) per n 2). 1. T (n) = 3T ( n 2 ) + n log n 2. T (n) = 5T ( n 5 ) + n log n 3. T (n) = 4T ( n 2 ) + n2 n 4. T (n) = 3T ( n 3 + 5) + n 2 5. T (n) = 2T ( n 2 ) + n log n 6. T (n) = T (n 1) + 1 n 7. T (n) = T (n 1) + log n 8. T (n) = T (n 2) + 2 log n 9. T (n) = nt ( n) + n 25
26 Svolgimento: (1) Siccome log 2 3 > 1 e n log n O(n log 2 3 ε ) per un certo ε > 0 (p.e. applicare il Master Theorem per concludere che T (n) Θ(n log 2 3 ). log ) basta n n (2) In questo caso log b a = log 5 5 = 1. Notiamo che log n Θ(n) perché n O( log n ). Per vedere ciò basta considerare la disequazione n cn log n, le cui soluzioni in n sono intervalli della forma (0, 2c ]. n Notiamo anche che log n O(n1 ε n ) perché la disequazione log n cn n ha come soluzioni i naturali n tali ε che nε log n c. Per ogni c > 0 fissato questa disequazione ha un insieme finito di soluzioni naturali. Infine n esiste un ε > 0 tale che log n Ω(n1+ε ) perché n log n cn 1+ε sse n log n cnn ε sse 1 n ε log n c 1 e per ogni c > 0 fissato esiste un n 0 > 0 tale che per ogni n n 0 abbiamo n ε log n c. Basta prendere ad esempio ε = 1 2. Ora vediamo che n 5 log n 5 sse log n 5 log n 5 log 5 c c n log n log x La funzione f(x) = 5 log x 5 log 5 è monotona decrescente per x 10 e quindi basta scegliere c = f(10) < 1. Pertanto il Master Theorem ci dice che T (n) Ω(n ε ). (3) In questo caso log b a = log 2 4 = 2. Inoltre n 2 n = n 5 2 Ω(n 2+ε ) (basta scegliere 0 < ε < 1 2 ). Ora vediamo che 4( n 2 ) 5 2 cn 5 2 sse 4 c Quindi possiamo applicare il Master Theorem e concludere che T (n) Θ(n 5 2 ) (4) Nella forma T (n) = 3T ( n 3 + 5) + n 2 non si può applicare il Master Theorem. Però possiamo effettuare un cambio di variabile y n + 15 e risolvere S(y) = 3T ( y 3 ) + y Siccome f(y) = y 15 2 Θ(y log 3 3 ) concludiamo che S(y) Θ(y log y). Infine T (n) = S(y 15) Θ((y 15) log(y 15)) = Θ(n log n). n (5) In questo caso log b a = 1. Non si possono applicare i casi del Master Theorem perché log n O(n1 ε ) n e log n Ω(n1+ε ). Allora useremo il metodo dell iterazione: Quindi T (n) O(n + n log 2 n). T (n) = 2 log 2 n + n log 2 n 1 j=0 = n + n log 2 n 1 j=0 = n + n log 2 n i=1 n + n log 2 n 1 i 1 log 2 1 log 2 n j (6) Non si possono applicare i casi del Master Theorem ma useremo il metodo dell iterazione: n 2 j Quindi T (n) O(n). T (n) = T (n 1) + 1 n = n 1 1 i=0 n i = n i=1 1 i n 26
27 (7) Non si possono applicare i casi del Master Theorem ma useremo il metodo dell iterazione: Quindi T (n) O(n). T (n) = T (n 1) + log n = n 1 1 i=0 = n i=1 n log(n i) 1 log i (8) Non si possono applicare i casi del Master Theorem ma useremo il metodo dell iterazione: Quindi T (n) O(n). T (n) = T (n 2) + 2 log n = n i=0 2 log(n 2i) n (9) Non si possono applicare i casi del Master Theorem ma useremo il metodo dell iterazione: T (n) = n + n 1 2 T (n 1 2 ) = n n (n n T (n 1 = d i=0 (n 1 2 i i j=0 n 1 = d i=0 (n 1 2 i n i 2 j ) j=0 ( 1 2 )j ) = d i=0 (n 1 2 i n i ) = d i=0 (n 1 2 i n 2 ) n 1 2 i = d i=0 n2 n 2 log 2 n dove d è il massimo numero naturale tale che n 1 2 d 1. Troviamo che T (n) O(n 2 log n). 2 2 )) 27
28 28
29 Chapter 3 Correttezza degli algoritmi 3.1 Algoritmi iterativi Per dimostrare la correttezza degli algoritmi iterativi si utilizza l invariante di ciclo, ossia una proposizione (riguardante i contenuti delle variabili della procedura o programma) che rispetta le seguenti proprietà: Inizializzazione: la proposizione è vera immediatamente prima di entrare nel ciclo. Mantenimento: se la proposizione è vera prima di eseguire un iterazione, lo è anche al termine dell iterazione. Terminazione: al termine del ciclo, la proposizione permette di ricavare la proprietà che permette di dimostrare la correttezza dell algoritmo. Esempio 3.1. Consideriamo l algoritmo fibonacciiterativomodificato, del quale vogliamo dimostrare il fatto che calcoli l n-esimo numero di Fibonacci; l invariante di ciclo è il seguente: Ad ogni iterazione, b = F i 1 e a = F i 2 Inizializzazione: poiché i = 3, dobbiamo verificare che b = F 2 e a = F 1 ; la dimostrazione è immediata, poiché b = 1 = F 2 e a = 1 = F 1. Mantenimento: assumiamo l invariante verificato per una generica i-esima iterazione e dimostriamo che esso vale anche al termine di tale iterazione; ricordiamo inoltre, nonostante non sia esplicitamente indicato, che al termine dell iterazione viene incrementato l indice i. Grazie alla nostra assunzione, abbiamo b = F i 1 e a = F i 2 : alla variabile c viene assegnato il valore della somma a + b = F i 2 + F i 1 = F i, alla variabile a viene assegnato il valore di b = F i 1, alla variabile b il valore di c = F i ed i viene incrementata (i = i + 1); è immediato dimostrare che continua a valere l invariante, ossia che b = F (i+1) 1 e a = F (i+1) 2. Terminazione: all uscita del ciclo, si ha i = n+1, dunque b = F (n+1) 1 = F n, che è il valore restituito, come volevasi dimostrare. 3.2 Algoritmi ricorsivi La dimostrazione viene svolta procedendo per induzione; occorre formalizzare una proprietà utile per dimostrare la correttezza dell algoritmo e provare che: valga per i casi base; assumendo che valga per problemi di dimensione inferiore, ossia per le chiamate ricorsive eseguite, provare che vale anche per il problema iniziale (passo induttivo). Esempio 3.2. Consideriamo l algoritmo fibonacciricorsivo e formalizziamo la seguente proprietà: L output della chiamata di funzione fibonacciricorsivo(n) è l n-esimo numero di Fibonacci. 29
30 Casi base: per n = 1 e n = 2, l algoritmo restituisce 1 = F 1 = F 2. Ipotesi induttiva: supponiamo che, per k < n, fibonacciricorsivo(k) restituisca F k. Passo induttivo: l algoritmo restituisce fibonacciricorsivo(n 1) + fibonacciricorsivo(n 2) (sia n > 2); per ipotesi, essi restituiscono, rispettivamente, F n 1 e F n 2, la cui somma è F n, come volevasi dimostrare. 30
31 Chapter 4 Pile e code 4.1 Pile La pila è una struttura dati, realizzabile sia con strutture indicizzate, sia collegate, che può essere descritta dal seguente schema generale: Dati: una sequenza S di n elementi. Operazioni: isempty() booleano Restituisce true se S è vuota, false altrimenti. push(elem e) void Aggiunge e come ultimo elemento di S. pop() elem Toglie da S l ultimo elemento e lo restituisce. top() elem Restituisce l ultimo elemento di S, senza rimuoverlo. 4.2 Code La coda, come la pila, è una struttura dati realizzabile sia mediante strutture indicizzate, sia con strutture collegate; la realizzazione di una coda segue il seguente schema generale: Dati: una sequenza S di n elementi. Operazioni: isempty() booleano Restituisce true se S è vuota, false altrimenti. enqueue(elem e) void Aggiunge e come ultimo elemento di S. dequeue() elem Toglie da S il primo elemento e lo restituisce. first() elem Restituisce il primo elemento di S, senza rimuoverlo. 4.3 Esercizi Esercizio 4.1. Realizzare una coda Q utilizzando due pile P 1 e P 2. 31
32 Svolgimento: Supponiamo di avere due pile P 1 e P 2. La pila P 1 ci serve per mantenere la collezione di oggetti, mentre P 2 serve come ausilio per le operazioni. Metodo enqueue dell oggetto Q. void enqueue(item x){ while(!p_1.isempty()){ P_2.push(P_1.pop()) } P_1.push(x) while(!p_2.isempty()){ P_1.push(P_2.pop()) } } Item dequeue(item x){ return P_1.pop() } boolean isempty(){ return P_1.isEmpty() } Esercizio 4.2. Realizzare una pila P utilizzando due code Q 1 e Q 2. Svolgimento: Supponiamo di avere due code Q 1 e Q 2. La pila Q 1 ci serve per mantenere la collezione di oggetti, mentre Q 2 serve come ausilio per le operazioni. void push(item x){ while(!q_1.isempty()){ Q_2.enqueue(Q_1.dequeue()) } Q_1.enqueue(x) while(!q_2.isempty()){ Q_1.enqueue(Q_2.dequeue()) } } Item pop(item x){ return Q_1.dequeue() } boolean isempty(){ return Q_1.isEmpty() } 32
Esercizi Capitolo 2 - Analisi di Algoritmi
Esercizi Capitolo - Analisi di Algoritmi Alberto Montresor 19 Agosto, 014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare
DettagliProof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme
G Pareschi Principio di induzione Il Principio di Induzione (che dovreste anche avere incontrato nel Corso di Analisi I) consente di dimostrare Proposizioni il cui enunciato è in funzione di un numero
Dettagli4.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ù
DettagliEsercizi Capitolo 6 - Alberi binari di ricerca
Esercizi Capitolo 6 - Alberi binari di ricerca Alberto Montresor 23 settembre 200 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile
DettagliNote su quicksort per ASD 2010-11 (DRAFT)
Note su quicksort per ASD 010-11 (DRAFT) Nicola Rebagliati 7 dicembre 010 1 Quicksort L algoritmo di quicksort è uno degli algoritmi più veloci in pratica per il riordinamento basato su confronti. L idea
DettagliProgrammazione dinamica
Capitolo 6 Programmazione dinamica 6.4 Il problema della distanza di edit tra due stringhe x e y chiede di calcolare il minimo numero di operazioni su singoli caratteri (inserimento, cancellazione e sostituzione)
DettagliEsercizi 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
DettagliMatematica generale CTF
Successioni numeriche 19 agosto 2015 Definizione di successione Monotonìa e limitatezza Forme indeterminate Successioni infinitesime Comportamento asintotico Criterio del rapporto per le successioni Definizione
Dettagli4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0
Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice
DettagliAlgoritmi e strutture dati. Codici di Huffman
Algoritmi e strutture dati Codici di Huffman Memorizzazione dei dati Quando un file viene memorizzato, esso va memorizzato in qualche formato binario Modo più semplice: memorizzare il codice ASCII per
DettagliAlgoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Esercizi II parte Esercizio 1 Discutere la correttezza di ciascuna delle seguenti affermazioni. Dimostrare formalmente la validità
DettagliIniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:
Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora: G.C.D.( a d, b d ) = 1 Sono state introdotte a lezione due definizioni importanti che ricordiamo: Definizione
Dettaglif(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da
Data una funzione reale f di variabile reale x, definita su un sottoinsieme proprio D f di R (con questo voglio dire che il dominio di f è un sottoinsieme di R che non coincide con tutto R), ci si chiede
Dettagli3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1
3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 Scopo: Stimare l onere computazionale per risolvere problemi di ottimizzazione e di altra natura
DettagliLE FUNZIONI A DUE VARIABILI
Capitolo I LE FUNZIONI A DUE VARIABILI In questo primo capitolo introduciamo alcune definizioni di base delle funzioni reali a due variabili reali. Nel seguito R denoterà l insieme dei numeri reali mentre
Dettaglirisulta (x) = 1 se x < 0.
Questo file si pone come obiettivo quello di mostrarvi come lo studio di una funzione reale di una variabile reale, nella cui espressione compare un qualche valore assoluto, possa essere svolto senza necessariamente
DettagliFUNZIONI ELEMENTARI - ESERCIZI SVOLTI
FUNZIONI ELEMENTARI - ESERCIZI SVOLTI 1) Determinare il dominio delle seguenti funzioni di variabile reale: (a) f(x) = x 4 (c) f(x) = 4 x x + (b) f(x) = log( x + x) (d) f(x) = 1 4 x 5 x + 6 ) Data la funzione
DettagliParte 2. Determinante e matrice inversa
Parte. Determinante e matrice inversa A. Savo Appunti del Corso di Geometria 013-14 Indice delle sezioni 1 Determinante di una matrice, 1 Teorema di Cramer (caso particolare), 3 3 Determinante di una matrice
DettagliMetodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo
Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo L. De Giovanni G. Zambelli 1 Problema del flusso a costo minimo Il problema del flusso a costo minimo é definito
DettagliTecniche avanzate di sintesi di algoritmi: Programmazione dinamica Algoritmi greedy
Tecniche avanzate di sintesi di algoritmi: Programmazione dinamica Algoritmi greedy Dr Maria Federico Programmazione dinamica Solitamente usata per risolvere problemi di ottimizzazione il problema ammette
DettagliIntroduzione al MATLAB c Parte 2
Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione
DettagliINTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI
INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, abbiamo bisogno di conoscere un metodo risolutivo, cioè un metodo che a partire dai dati di ingresso fornisce i risultati attesi.
DettagliFunzioni. Parte prima. Daniele Serra
Funzioni Parte prima Daniele Serra Nota: questi appunti non sostituiscono in alcun modo le lezioni del prof. Favilli, né alcun libro di testo. Sono piuttosto da intendersi a integrazione di entrambi. 1
DettagliEsercizi su lineare indipendenza e generatori
Esercizi su lineare indipendenza e generatori Per tutto il seguito, se non specificato esplicitamente K indicherà un campo e V uno spazio vettoriale su K Cose da ricordare Definizione Dei vettori v,,v
DettagliSono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza
Il problema di flusso di costo minimo (MCF) Dati : grafo orientato G = ( N, A ) i N, deficit del nodo i : b i (i, j) A u ij, capacità superiore (max quantità di flusso che può transitare) c ij, costo di
DettagliAnno 4 Grafico di funzione
Anno 4 Grafico di funzione Introduzione In questa lezione impareremo a disegnare il grafico di una funzione reale. Per fare ciò è necessario studiare alcune caratteristiche salienti della funzione che
DettagliCapitolo 2. Operazione di limite
Capitolo 2 Operazione di ite In questo capitolo vogliamo occuparci dell operazione di ite, strumento indispensabile per scoprire molte proprietà delle funzioni. D ora in avanti riguarderemo i domini A
DettagliPolitecnico di Milano. Facoltà di Ingegneria Industriale. Corso di Analisi e Geometria 2. Sezione D-G. (Docente: Federico Lastaria).
Politecnico di Milano. Facoltà di Ingegneria Industriale. Corso di Analisi e Geometria 2. Sezione D-G. (Docente: Federico Lastaria). Aprile 20 Indice Serie numeriche. Serie convergenti, divergenti, indeterminate.....................
DettagliParte 3. Rango e teorema di Rouché-Capelli
Parte 3. Rango e teorema di Rouché-Capelli A. Savo Appunti del Corso di Geometria 203-4 Indice delle sezioni Rango di una matrice, 2 Teorema degli orlati, 3 3 Calcolo con l algoritmo di Gauss, 6 4 Matrici
DettagliSERIE NUMERICHE. prof. Antonio Greco 6-11-2013
SERIE NUMERICHE prof. Antonio Greco 6--203 Indice Motivazioni........... 3 Definizione........... 3 Errore tipico........... 3 Un osservazione utile...... 3 Condizione necessaria...... 4 Serie armonica.........
DettagliFondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)
Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2) Definiamo innanzitutto una relazione d ordine tra le funzioni. Siano φ e ψ funzioni
DettagliPer studio di funzione intendiamo un insieme di procedure che hanno lo scopo di analizzare le proprietà di una funzione f ( x) R R
Studio di funzione Per studio di funzione intendiamo un insieme di procedure che hanno lo scopo di analizzare le proprietà di una funzione f ( x) R R : allo scopo di determinarne le caratteristiche principali.
DettagliEQUAZIONI DIFFERENZIALI. 1. Trovare tutte le soluzioni delle equazioni differenziali: (a) x = x 2 log t (d) x = e t x log x (e) y = y2 5y+6
EQUAZIONI DIFFERENZIALI.. Trovare tutte le soluzioni delle equazioni differenziali: (a) x = x log t (d) x = e t x log x (e) y = y 5y+6 (f) y = ty +t t +y (g) y = y (h) xy = y (i) y y y = 0 (j) x = x (k)
Dettagli10 - Programmare con gli Array
10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
DettagliDimensione di uno Spazio vettoriale
Capitolo 4 Dimensione di uno Spazio vettoriale 4.1 Introduzione Dedichiamo questo capitolo ad un concetto fondamentale in algebra lineare: la dimensione di uno spazio vettoriale. Daremo una definizione
DettagliCAPITOLO 16 SUCCESSIONI E SERIE DI FUNZIONI
CAPITOLO 16 SUCCESSIONI E SERIE DI FUNZIONI Abbiamo studiato successioni e serie numeriche, ora vogliamo studiare successioni e serie di funzioni. Dato un insieme A R, chiamiamo successione di funzioni
DettagliSiamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.
DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti
DettagliDue 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( x) ( x) 0. Equazioni irrazionali
Equazioni irrazionali Definizione: si definisce equazione irrazionale un equazione in cui compaiono uno o più radicali contenenti l incognita. Esempio 7 Ricordiamo quanto visto sulle condizioni di esistenza
Dettagli1. PRIME PROPRIETÀ 2
RELAZIONI 1. Prime proprietà Il significato comune del concetto di relazione è facilmente intuibile: due elementi sono in relazione se c è un legame tra loro descritto da una certa proprietà; ad esempio,
DettagliSerie numeriche e serie di potenze
Serie numeriche e serie di potenze Sommare un numero finito di numeri reali è senza dubbio un operazione che non può riservare molte sorprese Cosa succede però se ne sommiamo un numero infinito? Prima
DettagliOttimizazione vincolata
Ottimizazione vincolata Ricordiamo alcuni risultati provati nella scheda sulla Teoria di Dini per una funzione F : R N+M R M di classe C 1 con (x 0, y 0 ) F 1 (a), a = (a 1,, a M ), punto in cui vale l
Dettagli4. Operazioni elementari per righe e colonne
4. Operazioni elementari per righe e colonne Sia K un campo, e sia A una matrice m n a elementi in K. Una operazione elementare per righe sulla matrice A è una operazione di uno dei seguenti tre tipi:
DettagliESEMPIO 1: eseguire il complemento a 10 di 765
COMPLEMENTO A 10 DI UN NUMERO DECIMALE Sia dato un numero N 10 in base 10 di n cifre. Il complemento a 10 di tale numero (N ) si ottiene sottraendo il numero stesso a 10 n. ESEMPIO 1: eseguire il complemento
Dettagli1 Serie di Taylor di una funzione
Analisi Matematica 2 CORSO DI STUDI IN SMID CORSO DI ANALISI MATEMATICA 2 CAPITOLO 7 SERIE E POLINOMI DI TAYLOR Serie di Taylor di una funzione. Definizione di serie di Taylor Sia f(x) una funzione definita
DettagliPROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI
PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento
DettagliIntroduzione 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:
Dettagli10. Insiemi non misurabili secondo Lebesgue.
10. Insiemi non misurabili secondo Lebesgue. Lo scopo principale di questo capitolo è quello di far vedere che esistono sottoinsiemi di R h che non sono misurabili secondo Lebesgue. La costruzione di insiemi
DettagliMatematica 1 - Corso di Laurea in Ingegneria Meccanica
Matematica 1 - Corso di Laurea in Ingegneria Meccanica Esercitazione su massimi e minimi vincolati 9 dicembre 005 Esercizio 1. Considerare l insieme C = {(x,y) R : (x + y ) = x } e dire se è una curva
Dettagli~ Copyright Ripetizionando - All rights reserved ~ http://ripetizionando.wordpress.com STUDIO DI FUNZIONE
STUDIO DI FUNZIONE Passaggi fondamentali Per effettuare uno studio di funzione completo, che non lascia quindi margine a una quasi sicuramente errata inventiva, sono necessari i seguenti 7 passaggi: 1.
DettagliIl concetto di valore medio in generale
Il concetto di valore medio in generale Nella statistica descrittiva si distinguono solitamente due tipi di medie: - le medie analitiche, che soddisfano ad una condizione di invarianza e si calcolano tenendo
DettagliCONTINUITÀ E DERIVABILITÀ Esercizi risolti
CONTINUITÀ E DERIVABILITÀ Esercizi risolti. Determinare kπ/ [cos] al variare di k in Z. Ove tale ite non esista, discutere l esistenza dei iti laterali. Identificare i punti di discontinuità della funzione
DettagliLe equazioni. Diapositive riassemblate e rielaborate da prof. Antonio Manca da materiali offerti dalla rete.
Le equazioni Diapositive riassemblate e rielaborate da prof. Antonio Manca da materiali offerti dalla rete. Definizione e caratteristiche Chiamiamo equazione l uguaglianza tra due espressioni algebriche,
DettagliCorso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile
Problemi connessi all utilizzo di un numero di bit limitato Abbiamo visto quali sono i vantaggi dell utilizzo della rappresentazione in complemento alla base: corrispondenza biunivoca fra rappresentazione
DettagliLEZIONE 23. Esempio 23.1.3. Si consideri la matrice (si veda l Esempio 22.2.5) A = 1 2 2 3 3 0
LEZIONE 23 231 Diagonalizzazione di matrici Abbiamo visto nella precedente lezione che, in generale, non è immediato che, data una matrice A k n,n con k = R, C, esista sempre una base costituita da suoi
DettagliVC-dimension: Esempio
VC-dimension: Esempio Quale è la VC-dimension di. y b = 0 f() = 1 f() = 1 iperpiano 20? VC-dimension: Esempio Quale è la VC-dimension di? banale. Vediamo cosa succede con 2 punti: 21 VC-dimension: Esempio
DettagliCorso di Calcolo Numerico
Corso di Calcolo Numerico Dott.ssa M.C. De Bonis Università degli Studi della Basilicata, Potenza Facoltà di Ingegneria Corso di Laurea in Ingegneria Meccanica Sistemi di Numerazione Sistema decimale La
Dettagli2. Leggi finanziarie di capitalizzazione
2. Leggi finanziarie di capitalizzazione Si chiama legge finanziaria di capitalizzazione una funzione atta a definire il montante M(t accumulato al tempo generico t da un capitale C: M(t = F(C, t C t M
DettagliMATEMATICA DEL DISCRETO elementi di teoria dei grafi. anno acc. 2009/2010
elementi di teoria dei grafi anno acc. 2009/2010 Grafi semplici Un grafo semplice G è una coppia ordinata (V(G), L(G)), ove V(G) è un insieme finito e non vuoto di elementi detti vertici o nodi di G, mentre
DettagliCorso di Matematica per la Chimica
Dott.ssa Maria Carmela De Bonis a.a. 203-4 I sistemi lineari Generalità sui sistemi lineari Molti problemi dell ingegneria, della fisica, della chimica, dell informatica e dell economia, si modellizzano
DettagliFUNZIONE REALE DI UNA VARIABILE
FUNZIONE REALE DI UNA VARIABILE Funzione: legge che ad ogni elemento di un insieme D (Dominio) tale che D R, fa corrispondere un elemento y R ( R = Codominio ). f : D R : f () = y ; La funzione f(): A
DettagliAPPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI
APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................
DettagliBasi di matematica per il corso di micro
Basi di matematica per il corso di micro Microeconomia (anno accademico 2006-2007) Lezione del 21 Marzo 2007 Marianna Belloc 1 Le funzioni 1.1 Definizione Una funzione è una regola che descrive una relazione
DettagliSemantica Assiomatica
Semantica Assiomatica Anche nella semantica assiomatica, così come in quella operazionale, il significato associato ad un comando C viene definito specificando la transizione tra stati (a partire, cioè,
DettagliCorso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 25/6/2015
Corso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 25/6/2015 Chi deve recuperare il progetto del modulo 1 ha 1 ora e 30 minuti per svolgere gli esercizi 1, 2, 3 Chi deve recuperare
DettagliStudio di una funzione ad una variabile
Studio di una funzione ad una variabile Lo studio di una funzione ad una variabile ha come scopo ultimo quello di pervenire a un grafico della funzione assegnata. Questo grafico non dovrà essere preciso
DettagliPer lo svolgimento del corso risulta particolarmente utile considerare l insieme
1. L insieme R. Per lo svolgimento del corso risulta particolarmente utile considerare l insieme R = R {, + }, detto anche retta reale estesa, che si ottiene aggiungendo all insieme dei numeri reali R
DettagliCapitolo 13: L offerta dell impresa e il surplus del produttore
Capitolo 13: L offerta dell impresa e il surplus del produttore 13.1: Introduzione L analisi dei due capitoli precedenti ha fornito tutti i concetti necessari per affrontare l argomento di questo capitolo:
DettagliLezione 9: Cambio di base
Lezione 9: Cambio di base In questa lezione vogliamo affrontare uno degli argomenti piu ostici per lo studente e cioè il cambio di base all interno di uno spazio vettoriale, inoltre cercheremo di capire
Dettaglix 1 + x 2 3x 4 = 0 x1 + x 2 + x 3 = 0 x 1 + x 2 3x 4 = 0.
Problema. Sia W il sottospazio dello spazio vettoriale R 4 dato da tutte le soluzioni dell equazione x + x 2 + x = 0. (a. Sia U R 4 il sottospazio dato da tutte le soluzioni dell equazione Si determini
DettagliSOMMARIO. 13.1 I radicali pag. 3. 13.2 I radicali aritmetici pag. 5. 13.3 Moltiplicazione e divisione fra radicali aritmetici pag.
SOMMARIO CAPITOLO : I RADICALI. I radicali pag.. I radicali aritmetici pag.. Moltiplicazione e divisione fra radicali aritmetici pag.. Potenza di un radicale aritmetico pag.. Trasporto di un fattore esterno
Dettagli19. Inclusioni tra spazi L p.
19. Inclusioni tra spazi L p. Nel n. 15.1 abbiamo provato (Teorema 15.1.1) che, se la misura µ è finita, allora tra i corispondenti spazi L p (µ) si hanno le seguenti inclusioni: ( ) p, r ]0, + [ : p
Dettagli3 GRAFICI DI FUNZIONI
3 GRAFICI DI FUNZIONI Particolari sottoinsiemi di R che noi studieremo sono i grafici di funzioni. Il grafico di una funzione f (se non è specificato il dominio di definizione) è dato da {(x, y) : x dom
DettagliComplemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno
Rappresentazione di numeri Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno Un numero e un entità teorica,
DettagliEsponenziali elogaritmi
Esponenziali elogaritmi Potenze ad esponente reale Ricordiamo che per un qualsiasi numero razionale m n prendere n>0) si pone a m n = n a m (in cui si può sempre a patto che a sia un numero reale positivo.
DettagliFUNZIONE ESPONENZIALE E FUNZIONE LOGARITMICA
FUNZIONE ESPONENZIALE E FUNZIONE LOGARITMICA DEFINIZIONE: Dato un numero reale a che sia a > 0 e a si definisce funzione esponenziale f(x) = a x la relazione che ad ogni valore di x associa uno e un solo
DettagliPertanto la formula per una prima approssimazione del tasso di rendimento a scadenza fornisce
A. Peretti Svolgimento dei temi d esame di MDEF A.A. 015/16 1 PROVA CONCLUSIVA DI MATEMATICA per le DECISIONI ECONOMICO-FINANZIARIE Vicenza, 9/01/016 ESERCIZIO 1. Data l obbligazione con le seguenti caratteristiche:
DettagliCorrettezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza
DettagliEsercitazione #5 di Statistica. Test ed Intervalli di Confidenza (per una popolazione)
Esercitazione #5 di Statistica Test ed Intervalli di Confidenza (per una popolazione) Dicembre 00 1 Esercizi 1.1 Test su media (con varianza nota) Esercizio n. 1 Il calore (in calorie per grammo) emesso
DettagliEquazioni alle differenze finite (cenni).
AL 011. Equazioni alle differenze finite (cenni). Sia a n } n IN una successione di numeri reali. (Qui usiamo la convenzione IN = 0, 1,,...}). Diremo che è una successione ricorsiva o definita per ricorrenza
DettagliQuando troncare uno sviluppo in serie di Taylor
Quando troncare uno sviluppo in serie di Taylor Marco Robutti October 13, 2014 Lo sviluppo in serie di Taylor di una funzione è uno strumento matematico davvero molto utile, e viene spesso utilizzato in
Dettagli1. Limite finito di una funzione in un punto
. Limite finito di una funzione in un punto Consideriamo la funzione: f ( ) = il cui dominio risulta essere R {}, e quindi il valore di f ( ) non è calcolabile in =. Quest affermazione tuttavia non esaurisce
DettagliAlgoritmi e Strutture Dati II: Parte B Anno Accademico 2004-2005. Lezione 11
Algoritmi e Strutture Dati II: Parte B Anno Accademico 2004-2005 Docente: Ugo Vaccaro Lezione 11 In questa lezione vedremo alcune applicazioni della tecnica greedy al progetto di algoritmi on-line. Vediamo
DettagliCome visto precedentemente l equazione integro differenziale rappresentativa dell equilibrio elettrico di un circuito RLC è la seguente: 1 = (1)
Transitori Analisi nel dominio del tempo Ricordiamo che si definisce transitorio il periodo di tempo che intercorre nel passaggio, di un sistema, da uno stato energetico ad un altro, non è comunque sempre
DettagliApplicazioni lineari
Applicazioni lineari Esempi di applicazioni lineari Definizione. Se V e W sono spazi vettoriali, una applicazione lineare è una funzione f: V W tale che, per ogni v, w V e per ogni a, b R si abbia f(av
DettagliAlessandro Pellegrini
Esercitazione sulle Rappresentazioni Numeriche Esistono 1 tipi di persone al mondo: quelli che conoscono il codice binario e quelli che non lo conoscono Alessandro Pellegrini Cosa studiare prima Conversione
DettagliRaccolta degli Scritti d Esame di ANALISI MATEMATICA U.D. 1 assegnati nei Corsi di Laurea di Fisica, Fisica Applicata, Matematica
DIPARTIMENTO DI MATEMATICA Università degli Studi di Trento Via Sommarive - Povo (TRENTO) Raccolta degli Scritti d Esame di ANALISI MATEMATICA U.D. 1 assegnati nei Corsi di Laurea di Fisica, Fisica Applicata,
DettagliAA 2006-07 LA RICORSIONE
PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella
DettagliCorso di Informatica
Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down
DettagliLE SUCCESSIONI 1. COS E UNA SUCCESSIONE
LE SUCCESSIONI 1. COS E UNA SUCCESSIONE La sequenza costituisce un esempio di SUCCESSIONE. Ecco un altro esempio di successione: Una successione è dunque una sequenza infinita di numeri reali (ma potrebbe
DettagliEsercitazione Informatica I AA 2012-2013. Nicola Paoletti
Esercitazione Informatica I AA 2012-2013 Nicola Paoletti 4 Gigno 2013 2 Conversioni Effettuare le seguenti conversioni, tenendo conto del numero di bit con cui si rappresenta il numero da convertire/convertito.
DettagliDocumentazione esterna al software matematico sviluppato con MatLab
Documentazione esterna al software matematico sviluppato con MatLab Algoritmi Metodo di Gauss-Seidel con sovrarilassamento Metodo delle Secanti Metodo di Newton Studente Amelio Francesco 556/00699 Anno
DettagliAPPLICAZIONI LINEARI
APPLICAZIONI LINEARI 1. Esercizi Esercizio 1. Date le seguenti applicazioni lineari (1) f : R 2 R 3 definita da f(x, y) = (x 2y, x + y, x + y); (2) g : R 3 R 2 definita da g(x, y, z) = (x + y, x y); (3)
DettagliSemantica operazionale dei linguaggi di Programmazione
Semantica operazionale dei linguaggi di Programmazione Oggetti sintattici e oggetti semantici Rosario Culmone, Luca Tesei Lucidi tratti dalla dispensa Elementi di Semantica Operazionale R. Barbuti, P.
DettagliAlgoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello dell 8 Febbraio 2005 Esercizio 1 (ASD) 1. Dire quale delle seguenti affermazioni è vera giustificando la risposta. (a) lg
DettagliIntorni Fissato un punto sull' asse reale, si definisce intorno del punto, un intervallo aperto contenente e tutto contenuto in
Intorni Fissato un punto sull' asse reale, si definisce intorno del punto, un intervallo aperto contenente e tutto contenuto in Solitamente si fa riferimento ad intorni simmetrici =, + + Definizione: dato
DettagliIl principio di induzione e i numeri naturali.
Il principio di induzione e i numeri naturali. Il principio di induzione è un potente strumento di dimostrazione, al quale si ricorre ogni volta che si debba dimostrare una proprietà in un numero infinito
DettagliLa Programmazione Lineare
4 La Programmazione Lineare 4.1 INTERPRETAZIONE GEOMETRICA DI UN PROBLEMA DI PROGRAMMAZIONE LINEARE Esercizio 4.1.1 Fornire una rappresentazione geometrica e risolvere graficamente i seguenti problemi
DettagliNOME:... MATRICOLA:... Scienza dei Media e della Comunicazione, A.A. 2007/2008 Analisi Matematica 1, Esame scritto del 08.02.2008. x 1.
NOME:... MATRICOLA:.... Scienza dei Media e della Comunicazione, A.A. 007/008 Analisi Matematica, Esame scritto del 08.0.008 Indicare per quali R vale la seguente diseguaglianza : + >. Se y - - è il grafico
DettagliMATEMATICA. { 2 x =12 y 3 y +8 x =0, si pone il problema di trovare, se esistono, un numero x ed un numero y che risolvano entrambe le equazioni.
MATEMATICA. Sistemi lineari in due equazioni due incognite. Date due equazioni lineari nelle due incognite x, y come ad esempio { 2 x =12 y 3 y +8 x =0, si pone il problema di trovare, se esistono, un
Dettagli