Corso di Laurea in INFORMATICA Algoritmi e Strutture Dati MODULO 3 Introduzione alla Teoria della Complessita
|
|
- Riccardo Masini
- 4 anni fa
- Visualizzazioni
Transcript
1 Corso di Laurea in INFORMATICA Algoritmi e Strutture Dati MODULO 3 Introduzione alla Teoria della Complessita Questi lucidi sono stati preparati da Maria Francesca Costabile e Floriana Esposito, Università degli Studi di Bari, per uso didattico. Essi contengono materiale originale di proprietà dell'università degli Studi di Bari e/o figure di proprietà di altri autori, società e organizzazioni di cui e' riportato il riferimento. Tutto o parte del materiale può essere fotocopiato per uso personale o didattico ma non può essere distribuito per uso commerciale. Qualunque altro uso richiede una specifica autorizzazione da parte dell'università degli Studi di Bari e degli altri autori coinvolti. 1
2 Teoria della complessita Lo studio della computabilità aiuta a stabilire quali problemi ammettono una soluzione algoritmica e quali no. Per i problemi computabili, è interessante conoscere la complessità degli algoritmi che li risolvono. Complessità di un algoritmo: è una misura delle risorse di calcolo consumate durante la computazione. Efficienza di un algoritmo: è inversamente proporzionale alla sua complessità. La teoria della complessità studia l uso delle risorse di calcolo necessarie per la computazione di algoritmi e, più in generale, per la soluzione di problemi. Questo studio è importante al fine di: poter confrontare algoritmi diversi che risolvono lo stesso problema; stabilire se dei problemi ammettono algoritmi risolutivi che sono praticamente computabili. Riferimenti: A. Bertossi, Algoritmi e Strutture Dati, 2000, Ed. Utet, pagg C. Batini et al., Fondamenti di Programmazione dei Calcolatori Elettronici, Ed. Franco Angeli, 1992, cap. 6, pagg
3 Risorse di interesse Le risorse di interesse sono TEMPO e SPAZIO DI MEMORIA Quindi si parla di: COMPLESSITA IN TEMPO COMPLESSITA IN SPAZIO di un algoritmo. In ogni caso, per poter valutare la complessità occorre definire un MODELLO DI COSTO che dipende dal particolare modello di macchina astratta a cui si fa riferimento. Le unità di misura che si assumono in teoria della complessità non sono unità di tempo propriamente intese, per due ragioni: 1. Non ha senso parlare di tempi di esecuzione quando si considerano modelli di macchine astratte. 2. Anche se descrivessimo due algoritmi attraverso uno specifico linguaggio di programmazione disponibile per un calcolatore reale, il confronto dei tempi di esecuzione dei due programmi sarebbe lecito solo se i programmi fossero tradotti con il medesimo traduttore e fossero eseguiti con lo stesso elaboratore. 3
4 Il modello di costo Il modello di costo utilizzato e quello di un linguaggio di programmazione lineare. L analisi della complessità di un programma e basata sull ipotesi che il costo di ogni istruzione semplice e di ogni operazione di confronto sia pari ad un unita di costo indipendentemente dal linguaggio e dal sistema usato. In Pascal, assumiamo che: Il costo di un operazione di Assegnazione aritmetica +, -, *, /, DIV, MO logica AND, OR, NOT confronto,, <, >, =, è unitario. Il costo di un operazione di selezione If cond then S1 else S2 è dato da: costo test cond + costo S1 se cond costo test cond + costo S2 se cond 4
5 Il costo di un istruzione di ciclo: while cond do S1 è dato da: costo test cond + (costo S1 + costo test cond) * n se il ciclo è ripetuto n volte. Il costo di un ciclo repeat repeat S1 until cond è dato da: (costo S1 + costo test cond) * n se il ciclo è ripetuto n volte. Il costo di una istruzione for i 1 to n do S1 è equivalente al costo del seguente ciclo i 1 while i n do begin S1; i i+1 end ed è quindi dato da: 2 + (costo di S1 + 3) * n Esempio: fatt 1 for i 1 to n do fatt fatt * i; n = 3 costo = ( ) *3 = 18 iniz * 5
6 Costo per lo spazio Il costo è unario per i dati di tipo semplice mentre è dato da: n * dimensione di un elemento per array di n elementi. Il costo di un record è dato dalla somma dei costi delle singole componenti. Esempio: L algoritmo somma for i 1 to n do somma somma + A [i] ha complessità in spazio pari a 13 se n = 10 6
7 Esempio: Min di n elementi function MIN (var B: vettore; j, k: integer): integer; C 1 1 var m, i: integer; 0 1 begin m := B [ j ]; C 2 1 for i := j + 1 to k do C 3 n if B(i) < m then C 4 n-1 m := B[i]; C 5 n-1 MIN := m C 6 1 end; Si noti che l'incremento dell'indice i nel ciclo for è ripetuto n volte e non n 1. Infatti il for, come spiegato precedentemente, è un modo più compatto di scrivere un while nel quale la condizione i k deve essere verificata una volta in più per poter uscire dal ciclo quando i supera k. Il tempo di calcolo T(n) di MIN si ottiene sommando su tutte le istruzioni il prodotto del costo di ciascuna istruzione per il numero di volte che tale istruzione è eseguita: T(n) = C 1 + C 2 + C 3 n + C 4 (n 1) + C 5 (n 1) + C 6 = =( C 3 + C 4 + C 5 ) n + (C 1 + C 2 + C 6 C 4 C 5 ). Pertanto, il tempo di calcolo di MIN può essere espresso come T(n) = an + b, con a e b costanti intere positive. 7
8 Esempio: Ricerca esaustiva 1/3 procedure ricerca_esaustiva (var t : tipotavola; k : tipochiave; var trovato : boolean); { la procedura ricerca nella tavola l elemento avente chiave k, se la ricerca ha successo allora la variabile booleana trovato viene posta a true, altrimenti a false} var i : integer; Begin {1} i := 0; {2} repeat {3} i := i + 1 {4} until ( t [i].chiave = k) or (i = n); {5} if ( t [i].chiave = k) {6} then trovato := true {7} else trovato := false end; 8
9 Esempio: Ricerca esaustiva 2/3 Il costo di esecuzione del programma dipende dalla posizione del particolare elemento che si vuole individuare: se l elemento cercato è il primo della tavola allora si effettua un solo confronto (questa situazione rappresenta il caso ottimo); se l elemento cercato è il secondo della tavola allora si effettuano due confronti e così via. Il caso peggiore è costituito dalla ricerca dell ultimo elemento o da una ricerca infruttuosa, perchè in questo caso l algoritmo esamina tutte le componenti della tavola ed esegue il ciclo n volte. Valutiamo ora il costo del programma nel caso di ricerca dell ultimo elemento: L istruzione 1 è eseguita 1 volta; L istruzione 3 è eseguita n volte; Il test dell istruzione repeat è eseguito n volte; Il test dell istruzione if then else è eseguito 1 volta; L istruzione in 6 è eseguita 1 volta; L istruzione in 7 non viene eseguita. Pertanto il costo di esecuzione del programma è 1 + n + n = 2n + 3 9
10 Esempio: Ricerca esaustiva 3/3 E facile vedere che la stessa funzione esprime anche il costo del programma nel caso di ricerca infruttuosa. Se si vuole valutare il comportamento del programma nel caso medio è necessario distinguere il caso di ricerca con successo da quello di ricerca infruttuosa. Nel caso di ricerca fruttuosa, se si assume che tutti gli elementi dell array possano essere ricercati con uguale probabilità pari a 1/n, allora è facile vedere che il programma richiede mediamente (n + 1)/2 confronti. Infatti se ricerchiamo l i-esimo elemento si effettuano i confronti e, quindi, il numero di confronti medio è dato da: 1 i n Prob(E(i)) i = 1 i n i/n = (n + 1)/2=1/2 n + 1/2 dove Prob(E(i)) è la probabilità che l elemento da cercare nell array sia quello in posizione i. 10
11 Si considerano tre tipi di complessità: Tre tipi di complessità CASO PESSIMO: si ottiene considerando quella particolare configurazione che, a parità di dimensione dei dati, dà luogo al massimo tempo di calcolo. La corrispondente funzione di complessità è indicata con f pess (n). CASO OTTIMO: si ottiene considerando la configurazione che dà luogo al minimo tempo di calcolo. La corrispondente funzione di complessità è indicata con f ott (n). CASO MEDIO: si riferisce al tempo di calcolo mediato su tutte le possibili configurazioni dei dati, sempre per una data dimensione n. Funzione di complessità: f med (n). Esistono particolari algoritmi in cui tutte le possibili configurazioni dei dati sono equivalenti per quanto riguarda la complessita in tempo. In questo caso, la complessita ottima, pessima e media coincidono. Esempi: f pess = f ott = f med per l algoritmo del fattoriale. f pess = f ott = f med per l algoritmo del Min di n elementi. 11
12 Confronto di algoritmi con complessità diverse 1/2 Complessità dell algoritmo Dimensioni dell input n 1 millisec. 3 millisec. 6 millisec. 10 n 2 1 millisec. 9 millisec. 36 millisec. n 3 1 millisec. 27 millisec. 2.1 secondi 2 n 1 millisec. 18 minuti 366 secoli La tabella indica il tempo di calcolo in funzione delle dimensione del problema 12
13 Confronto di diversi algoritmi con complessità diverse 2/2 Complessità dell algoritm o Tempo impiegato 1 sec. 1 min. 1 ora 1 giorno 100 n * * * n n n La tabella indica le dimensioni massime del problema (il max valore di n) risolubili in una data quantità di tempo 13
14 Funzioni di complessità La complessità di un algoritmo è funzione della dimensione dei dati, ovvero della mole dei dati del problema da risolvere. L individuazione della dimensione dei dati è per lo più immediata. Determinare la complessità in tempo (o in spazio) di un algoritmo significa determinare una funzione di complessità f(n) che fornisca la misura del tempo (o dello spazio di memoria occupato), al variare della dimensione dei dati, n. Le funzioni di complessità sono caratterizzate da due proprietà: 1. Assumono solo valori positivi 2. Sono crescenti rispetto alla dimensione dei dati. 14
15 Comportamento asintotico Per semplificare l analisi, non si cerca di individuare esattamente la funzione che esprime il costo del programma ma si ritiene sufficiente stabilire il suo comportamento asintotico quando le dimensioni dell input tendono all infinito. Si trascurano cosi costanti moltiplicative e termini additivi di ordine inferiore. Due programmi i cui costi sono espressi rispettivamente dalle funzioni (n + 3) e (100n ) sono caratterizzati dalla stessa complessità asintotica. (n + 3) esprime un costo minore della funzione (100n ) e, quindi, ignorare la costante moltiplicativa può essere in alcuni casi una semplificazione eccessiva. E importante però sottolineare che, ignorando le costanti moltiplicative e i termini additivi di ordine inferiore, l analisi per stabilire il costo di un algoritmo viene molto semplificata e le valutazioni ottenute, pur con questa approssimazione, permettono di giungere a risultati significativi. Lo studio asintotico offre un criterio chiaro per confrontare due 15 algoritmi.
16 Esempi Esempio A 1 : f 1 (n) = 3n 2 4n + 2 A 2 : f 2 (n) = 2n + 3 n = 1, 2 f 1 (n) < f 2 (n) n = 3, 4 f 1 (n) > f 2 (n) Qual è l algoritmo più efficiente? A 2, perché n > 2 f 1 (n) > f 2 (n) Esempio Le funzioni di complessità: f 1 (n) = 3n 2 + n + 1 f 2 (n) = 4n 2 f 3 (n) = 4n 2 + 2n sono asintoticamente equivalenti, in quanto crescono tutte con il quadrato di n. Nello studio asintotico vengono trascurate le costanti moltiplicative e i termini la cui crescita asintotica e inferiore a quella di altri termini. 16
17 Delimitazioni della complessita Il costo di esecuzione di un programma, o di un algoritmo, si esprime come funzione delle dimensioni dell input in cui si ignorano le costanti moltiplicative. Si definiscono inoltre diversi tipi di delimitazioni che formalizzano la complessità di un programma (o di un algoritmo). Noi studiamo solo la delimitazione superiore e la notazione O(g(n)). 17
18 Notazione asintotica O Una funzione f(n) è di ordine O (g(n)) f(n) è O (g(n)) se esistono due costanti positive c ed m per cui f(n) c g(n) per ogni n m. La g(n) indica un limite superiore al comportamento asintotico della funzione f, ovvero f non si comporta asintoticamente peggio di g. Esempio La funzione: f(n) = 3n 2 + 3n 1 è un O(n 2 ) dal momento che esistono due costanti c = 4 ed m = 3 tali che n 3 f(n) 4n 2. In generale, f(n) è un O(n k ), k 2 18
19 Notazione asintotica O f(n) = O( g(n) ) se due costanti c>0 e n 0 0 tali che f(n) c g(n) per ogni n n 0 f(n) = Ο( g(n) ) cg(n) f(n) n 0 n 19
20 Notazione asintotica Ω f(n) = Ω( g(n) ) se due costanti c>0 e n 0 0 tali che f(n) c g(n) per ogni n n 0 f(n) = Ω( g(n) ) f(n) c g(n) n 0 n 20
21 Notazione asintotica Θ f(n) = Θ( g(n) ) se tre costanti c 1,c 2 >0 e n 0 0 tali che c 1 g(n) f(n) c 2 g(n) per ogni n n 0 f(n) = Θ( g(n) ) c 2 g(n) f(n) c 1 g(n) n 0 n 21
22 Notazione asintotica: esempi Sia f(n)=3n f(n)=o(n 2 ): scegliere c=4 e n 0 =10 f(n)=ω(n 2 ): scegliere c=1 e n 0 =0 f(n)=θ(n 2 ): infatti f(n)= Θ(g(n)) se e solo se f(n)= Ο(f(n)) e f(n)= Ω(g(n)) f(n)=o(n 3 ) ma f(n) Θ(n 3 ) 22
23 Valutazione della complessità di un programma 1/2 La valutazione del costo di un programma o di un algoritmo richiede la determinazione di una delimitazione superiore (ed eventualmente anche una inferiore). Diamo una serie di regole che aiutano a trovare la delimitazione superiore della complessita. Regola 1. Supponiamo che il programma sia composto di due parti P e Q da eseguire sequenzialmente e che I costi di P e Q siano S(n) =O(f(n)) e T(n) = O(g(n)). Allora il costo del programma è O(max(f(n), g(n))). Per dimostrare la correttezza della regola osserviamo che in questo caso il costo complessivo del programma è, chiaramente, pari a S(n) + T(n) Inoltre si noti che 1. Poichè S(n) = O(f(n)) allora esistono costanti a, b e n tali che S(n) < a f(n) + b per n > n ; 2. Poichè T(n) = O(g(n)) allora esistono costanti a, b e n tali che T(n) < a g(n) + b per n > n ; Da queste due osservazioni deriva che, per n > max (n, n ) S(n) + T(n) < a f(n) + b + a g(n) + b < (a + a ) max(f(n), g(n)) + (b + b ) Quindi, O(S(n) + T(n)) è proprio O(max(f(n), g(n))). 23
24 Valutazione della complessità di un programma 2/2 La seconda regola che presentiamo permette di valutare il costo del programma quando esso richiede più volte l esecuzione di un insieme di istruzioni o l attivazione di una procedura. Regola 2. Supponiamo che un programma richieda per k volte l esecuzione di una istruzione composta o l attivazione di una procedura, e sia f i (n) il costo relativo all esecuzione i-esima, i = 1, 2, k. Il costo complessivo del programma è pari a O ( i f i (n)) 24
25 Istruzione dominante 1/2 Introduciamo ora il concetto di istruzione dominante che permette, in molti casi, di semplificare in modo drastico la valutazione della complessità di un programma. Definizione 3. Sia dato un programma o un algoritmo P il cui costo di esecuzione è T(n). Una istruzione di P si dice istruzione o operazione dominante se, per ogni intero n, essa viene eseguita, nel caso peggiore di input avente dimensione n, un numero di volte d(n) che verifica la seguente condizione T(n) < a d(n) + b per opportune costanti a e b. In altre parole, un istruzione dominante viene eseguita un numero di volte proporzionale al costo di esecuzione di tutto l algoritmo. E importante osservare che in un programma, più istruzioni possono essere dominanti, ma può anche accadere che il programma non contenga affatto istruzioni dominanti. 25
26 Istruzione dominante 2/2 Regola 3. Supponiamo che un programma contenga un istruzione dominante che, nel caso peggiore di input di dimensione n, viene eseguita d(n) volte. La delimitazione superiore alla complessità del programma è O(d(n)). Per individuare un istruzione dominante è sufficiente, in molti casi, esaminare le operazioni che sono contenute nei cicli più interni del programma. Ad esempio, nel caso della ricerca esaustiva considerata in un esempio precedente, è possibile valutare il costo del programma mostrato osservando che l istruzione {3} è dominante. Infatti essa viene eseguita, nel caso peggiore, n volte; questo è sufficiente per dire che il programma ha costo lineare. Osserviamo inoltre che il test {4} del ciclo repeat until viene eseguito nel caso peggiore n volte e, quindi, rappresenta un altra istruzione dominante. 26
27 Classi di complessità computazionale Grazie all analisi della complessità asintotica possiamo categorizzare gli algoritmi nelle seguenti classi di complessità: costante O(1) logaritmica O (logn) lineare O (n) nlog O (nlogn) quadratica O (n 2 ) cubica O (n 3 ) esponenziale O (a n ) a > 1 Gli algoritmi con complessità costante sono più efficienti di quelli con complessità logaritmica che a loro volta sono più efficienti di quelli con complessità lineare e così via. O (1) < O (logn) < O (n) < O (nlogn) < O (n 2 ) < O (n 3 ) < O (a n ) 27
28 28
29 Algoritmi polinomiali vs esponenziali La distinzione di maggiore interesse in teoria della complessità è fra: algoritmi polinomiali, con complessità O(n k ), k >0 (Es.: O(logn), O(n 2 )) algoritmi esponenziali, con complessità O(a g(n) ), a >1 g(n) funzione crescente (Es.: O(2 n )), O(2 logn ), O(n logn )). Gli algoritmi di importanza pratica sono quelli polinomiali. 29
30 Riepilogo Esprimiamo la quantità di una certa risorsa di calcolo (tempo, spazio) usata da un algoritmo in funzione della dimensione n dell istanza di ingresso La notazione asintotica permette di esprimere la quantità di risorsa usata dall algoritmo in modo sintetico, ignorando dettagli non influenti A parità di dimensione n, la quantità di risorsa usata può essere diversa, da cui la necessità di analizzare il caso peggiore o, se possibile, il caso medio 30
31 Complessità della fusione di liste 1/4 La complessità della procedura fusione dipende dalla complessità degli operatori su lista utilizzati, ovvero: CREALISTA PRIMOLISTA FINELISTA LEGGILISTA INSLISTA SUCCLISTA Nella realizzazione con puntatori e doppi puntatori la complessità di questi operatori è O(1). Nel caso di realizzazione con cursori occorre tenere presente il costo della procedura INIZIALIZZALISTALIBERA che comunque è eseguita fuori della procedura fusione e quindi non va conteggiato a fini della complessità della procedura. 31
32 Complessità della fusione di liste 2/4 Consideriamo come operazione dominante il confronto di elem1 con elem2. Allora la complessità dipende dalla configurazione dei dati di ingresso. In particolare, dette m ed n le lunghezze rispettivamente di Lista1 e Lista2, possiamo distinguere i seguenti casi: CASO OTTIMO: tutti gli elementi della lista più corta sono minori degli elementi della lista più lunga. Si effettueranno tanti confronti quanti sono gli elementi della lista più corta: ƒ ott (m, n) = min {m, n} 32
33 Complessità della fusione di liste 3/4 CASO PESSIMO: l inserimento dell ultimo elemento di una delle due liste può avvenire solo dopo l inserimento del penultimo elemento dell altra lista. Il numero di confronti sarà dato da: ƒ pess (m, n) = m + n 1 CASO MEDIO: senza perdere di generalità supponiamo essere m <= n. Consideriamo allora i seguenti eventi: Ek l ultimo elemento di Lista1 è inserito prima del K-esimo elemento di Lista2 per K = 1,2,3,, n. Supponiamo che i vari eventi siano tutti equiprobabili (poiché non abbiamo informazioni sufficienti per sostenere il contrario, ipotizziamo una distribuzione uniforme), allora: P (Ek) = 1/n poiché i diversi eventi sono n. 33
34 Complessità della fusione di liste 4/4 Il costo, espresso in termini di numero di confronti, associato ad ogni evento è dato da: costo (Ek) = m + k 1 Si noti che E1 corrisponde al caso ottimo mentre En al caso pessimo. Allora la complessità nel caso medio sarà dato da: ƒ med (m, n) = k=1 n P (Ek) costo (Ek) = 1/n k=1 n (m + k - 1) = = 1/n [ k=1 n m + k=1 n k - k=1 n 1 ] = 1/n (m n + (n(n + 1)/2) - n) = m + (n + 1)/2-1 34
35 Analisi della complessità dell ordinamento di lista Osserviamo che per una lista di n elementi, il numero massimo di passi di distribuzione e fusione delle catene è al più uguale a [log 2 n] + 1 in quanto ad ogni passo il numero di catene, che nel caso peggiore coincide con n stesso, viene dimezzato. Quindi la complessità dipende dalla particolare configurazione dei dati in ingresso. Consideriamo, come operazione dominante, il confronto leggilista (pa, A) < leggilista (pb, B) nella procedura fondicatena. Allora nel caso pessimo abbiamo (log 2 n) esecuzioni della procedura merge che ha complessità proporzionale a n, quindi: ƒ pess (n) è un O(n log 2 n) 35
36 Complessità in spazio dell ordinamento di lista Per quanto riguarda la complessità in spazio, va osservato che la procedura ordinamentonaturale crea liste ex novo ad ogni passo senza cancellare prima gli elementi delle tre liste al fine di recuperare spazio. E quindi possibile ottimizzare l algoritmo effettuando questa operazione di cancellazione. 36
37 La complessità dei problemi Oltre che di complessità degli algoritmi ha senso anche parlare di complessità dei problemi. Def.: Un problema ha complessità di ordine g(n) se qualunque algoritmo risolutivo del problema ha una complessità di ordine Ω(g(n)). Quindi ogni problema P ha una sua complessità intrinseca e non potremo mai trovare un algoritmo per P che abbia una complessità inferiore a quella del problema stesso. Esempio: Il problema della stampa degli elementi in un array di dimensione n ha una complessità temporale intrinseca pari a n. Ogni algoritmo risolutivo di un problema P determina automaticamente un limite superiore per la complessità di P. La determinazione di un limite inferiore per la complessità di un problema richiede invece la dimostrazione che tutti gli algoritmi risolutivi di quel problema abbiano una complessità peggiore del limite stabilito. 37
38 Complessita del problema dell ordinamento Esempio: Complessità del problema dell ordinamento di n elementi La soluzione e data da una delle possibili n! permutazioni degli n elementi. Consideriamo inizialmente il problema di ordinare tre elementi a, b, c. Ognuna delle 6 permutazioni di a, b e c potrebbe rappresentare l ordinamento corretto. Le possibilità si possono scartare via via per confronti successivi. 38
39 Albero decisionale per 3 elementi Ogni nodo dell albero corrisponde ad un confronto e ad esso è associato l insieme delle permutazioni ancora accettabili prima di effettuare tale confronto. Il confronto ha due possibili esiti, ognuno dei quali consente di scartare alcune possibilità. Il procedimento continua finché rimane una sola possibilità,che è la soluzione. 39
40 Albero decisionale per n elementi In generale, supponiamo di voler ordinare n elementi a 1, a 2,, a n. Dobbiamo costruire un albero decisionale. Ad ogni livello il numero dei nodi dell albero raddoppia, quindi al k-esimo livello si hanno al più 2 k foglie (ad ogni foglia è associata una soluzione). 40
41 Complessita dell ordinamento Le possibili soluzioni al problema dell ordinamento sono n!, ovvero tutte le permutazioni degli elementi di partenza. Quindi, per avere la certezza di arrivare alla soluzione, in ogni caso l albero deve avere n! nodi soluzione, cioe n! nodi foglie. Quindi occorre effettuare un numero di confronti k tale che n! <= 2 k da cui segue che: log 2 (n!) <= log 2 (2 k ) = k per l approssimazione di Stirling: n! (2 л n) 1/2 (n/e) n possiamo scrivere: k >= log 2 (n!) nlog 2 n - nlog 2 e + ½log 2 n + ½log 2 2л che è un Θ (nlog 2 n). Quindi, la complessità del problema è nlog 2 n e cioè qualunque algoritmo di ordinamento richiede, nel caso peggiore, almeno nlog 2 n confronti. Un algoritmo che ha la stessa complessità intrinseca di un problema si dice ottimo in ordine di grandezza. 41
42 Le classi Exp e P In generale siamo interessati a distinguere le classe Exp dei problemi con complessità esponenziale dalla classe P dei problemi con complessità polinomiale. I problemi in P sono detti praticamente calcolabili, perché risolvibili in tempo ragionevole anche per una grande mole di dati. Tutti i problemi che non appartengono a P sono invece definiti intrattabili, perché pur essendo teoricamente calcolabili non lo sono più in pratica all aumentare della dimensione dei dati. Esempio Il problema di costruire l insieme potenza (o delle parti) di un insieme S, è esponenziale e quindi intrattabile. 42
43 La classe NP Non per tutti i problemi si è riuscito a stabilire se siano in Exp o in P. Esiste un ampia classe di problemi per cui non si conoscono algoritmi migliori di quelli esponenziali, benché i più stretti limiti inferiori finora determinati sono tutti polinomiali. Per questi problemi è stata definita una nuova classe NP (Not Polinomial) ovvero la classe di problemi intrinsecamente esponenziale. Per un problema in NP è teoricamente possibile che in futuro si riesca a trovare un algoritmo polinomiale, ma è altrettanto possibile che in futuro la complessità del problema è esponenziale. 43
44 Problemi NP-completi Fra i problemi in NP ve ne sono alcuni che sono più difficili di altri, nel senso che, se mai venisse trovato un algoritmo polinomiale per uno di questi problemi difficili in NP, allora sarebbe possibile trovare un algoritmo polinomiale per tutti i problemi in NP. Questi problemi difficili sono detti NP-completi. I problemi dello zaino, della soddisfattibilità e del commesso viaggiatore sono tutti problemi NP-completi. Esistono problemi NP-incompleti? Per il seguente problema: Dato un intero positiv K, determinare se esso e primo, ovvero s esistono du interi m, n > 1 tali che K = mn non si è riusciti a dimostrare la NP-completezza. 44
45 45
46 E possibile che algoritmi polinomiali per un modello di macchina astratta risultino esponenziali per un altro modello e viceversa? TEOREMA Le MDT e le URM sono modelli di macchine astratte correlati polinomialmente. Ciò significa che un algoritmo di complessità polinomiale/esponenziale per una MDT mantiene una complessità polinomiale/esponenziale se realizzato da una URM e viceversa. Analogamente si può dimostrare che se un algoritmo espresso in linguaggio lineare ha una complessità polinomiale/esponenziale, allora lo stesso algoritmo espresso per URM mantiene la stessa complessità. 46
complessità degli algoritmi
complessità degli algoritmi progetto CORDA informatica algoritmo matematico persiano Muhammad al-khwarizmi (IX secolo) un algoritmo è una sequenza finita di passi interpretabili da un esecutore l esecuzione
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
Lezione 4 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2017 2018 Lezione 4 Ugo Vaccaro Introduciamo ora la notazione Ω, che ci sarà utile quando vorremo valutare limitazioni inferiori al tempo di esecuzione di algoritmi
Testo di riferimento. Problema delle 12 monete. Algoritmi. Complessità degli algoritmi (cenni) Dispense del Corso di Algoritmi e Strutture Dati
Testo di riferimento Complessità degli algoritmi (cenni) CORDA Informatica A. Ferrari Dispense del Corso di Algoritmi e Strutture Dati Marco Bernardo - Edoardo Bontà Università degli Studi di Urbino Carlo
Complessità degli algoritmi (cenni)
Complessità degli algoritmi (cenni) CORDA Informatica A. Ferrari Testo di riferimento Dispense del Corso di Algoritmi e Strutture Dati Marco Bernardo - Edoardo Bontà Università degli Studi di Urbino Carlo
COMPLESSITA COMPUTAZIONALE. Esercitazioni Tutor: Francesca Piersigilli
COMPLESSITA COMPUTAZIONALE Esercitazioni Tutor: Francesca Piersigilli La complessità computazionale si occupa della valutazione del costo degli algoritmi in termini di risorse di calcolo: tempo di elaborazione;
COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI
COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.00.005/06 Prof. V.L. Plantamura Dott.ssa A. Angelini Classificazione degli algoritmi Tassonomia di costo: algoritmo costante: c
Algoritmi e Strutture Dati
Analisi di Algoritmi Modelli di calcolo e analisi di algoritmi Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Analisi di Algoritmi Analisi
COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI
COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.200.2005/06 Prof. V.L. Plantamura Dott.ssa A. Angelini Ω (grande omega) Diciamo che T(n) = Ω (f(n)), - leggiamo T(n) ha complessità
sono le risorse di calcolo necessarie per la sua l esecuzione di un metodo sono tipicamente:
Complessità dei metodi e degli algoritmi Carla Binucci e Walter Didimo Efficienza di un metodo Un metodo è tanto più efficiente quanto minori sono le risorse di calcolo necessarie per la sua esecuzione
3 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
Prof. Pagani Corrado ALGORITMI E COMPLESSITÀ COMPUTAZIONALE
Prof. Pagani Corrado ALGORITMI E COMPLESSITÀ COMPUTAZIONALE COMPLESSITÀ DEGLI ALGORITMI L oggetto della teoria della complessità è stabilire se un problema sia facile o difficile In base a quali parametri
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Modelli di calcolo e metodologie di analisi Domenico Fabio Savo 1 Notazione asintotica f(n) = tempo di esecuzione / occupazione di memoria di un algoritmo su input di dimensione
Algoritmi e Strutture Dati
Analisi Asintotica Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Un graduale processo di astrazione Passo 1: abbiamo ignorato il costo effettivo
Appendice B. Algoritmi e Complessità
Appendice B Algoritmi e Complessità 1. Introduzione Un algoritmo A è una procedura passo-passo per risolvere un problema P. Un problema P è caratterizzato dall insieme I delle sue istanze. L algoritmo
Laboratorio Algoritmi 2016
Laboratorio Algoritmi 2016 Lunedì 10:30 13:30 Aula 2 in via Saldini. Ricevimento: inviare e-mail a frasca@di.unimi.it. 44 ore (9 CFU) Linguaggio di programmazione: C Esame : progetto Sito del corso http://frasca.di.unimi.it/algm16/algm.html
Problemi, istanze, soluzioni
lgoritmi e Strutture di Dati II 2 Problemi, istanze, soluzioni Un problema specifica una relazione matematica tra dati di ingresso e dati di uscita. Una istanza di un problema è formata dai dati di un
Tempo e spazio di calcolo
Tempo e spazio di calcolo Modelli di calcolo e metodologie di analisi In quale modo stimiamo il tempo di calcolo? Possiamo considerare due approcci: Approccio empirico (a posteriori) Approccio teorico
LA COMPLESSITA DEGLI ALGORITMI
LA COMPLESSITA DEGLI ALGORITMI Tra i problemi che ammettono soluzione esistono problemi facili e difficili. Teoria della complessità (anni 70): complessità di un problema; valutazione dell efficienza degli
complessità computazionale
complessità computazionale classificazione degli algoritmi o algoritmi sequenziali o eseguono un solo passo alla volta o algoritmi paralleli o possono eseguire più passi per volta o algoritmi deterministici
Complessità degli algoritmi. Obiettivi: Calcolare (valutare) la complessità di un algoritmo Confrontare algoritmi risolutivi del medesimo problema
Complessità degli algoritmi Obiettivi: Calcolare (valutare) la complessità di un algoritmo Confrontare algoritmi risolutivi del medesimo problema 1 Algoritmo Sequenza logica di istruzioni elementari (univocamente
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
Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet
Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet Algoritmi e Strutture di Dati I 2 Problemi Un problema specifica in termini generali una relazione che intercorrere
Algoritmi e Strutture Dati
Analisi di algoritmi Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Parte I Analisi
Notazioni asintotiche. Martedì 30 settembre 2014
Notazioni asintotiche Martedì 30 settembre 2014 Punto della situazione Cos è un algoritmo Tempo di esecuzione T(n) Analisi di algoritmi: analisi asintotica di T(n) Argomento di oggi: Notazioni asintotiche:
Fondamenti di Informatica II 9. Complessità computazionale
Scelta di un algoritmo Fondamenti di Informatica II 9. Complessità computazionale Dato un problema, esistono diversi algoritmi che permettono di risolverlo. I fattori che possono influenzare la scelta
Fondamenti di Informatica
Scelta di un algoritmo Fondamenti di Informatica 19. Complessità computazionale Dato un problema, esistono diversi algoritmi che permettono di risolverlo. I fattori che possono influenzare la scelta dell
COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI
COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.200.2005/06 Prof. V.L. Plantamura Dott.ssa A. Angelini Confronto di algoritmi Uno stesso problema può essere risolto in modi diversi,
Algoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo
1 Cos è l informatica? L informatica è la scienza della rappresentazione e dell elaborazione dell informazione Algoritmi e loro proprietà Proprietà formali degli Algoritmi Efficienza rispetto al tempo
Gli algoritmi e la loro complessità
Gli algoritmi e la loro complessità Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Algoritmo Un algoritmo è una procedura di calcolo (eventualmente composta da un certo numero di passi)
Laboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Marco Tarini e-mail: marco.tarini@uninsubria.it Argomenti del corso Calcolo del tempo di computazione di un algoritmo: Esercizi di analisi formale: sommatorie,
Algoritmi, Strutture Dati e Programmi. UD 4.b: Trattabilità e Intrattabilità
Algoritmi, Strutture Dati e Programmi : Trattabilità e Intrattabilità Prof. Alberto Postiglione AA 2007-2008 INTRODUZIONE Dispense, cap. 4.2.1 1 Problemi Intrattabili Esistono problemi che, pur avendo
UD 4.b: Trattabilità e Intrattabilità INTRODUZIONE
Algoritmi, Strutture Dati e Programmi : Trattabilità e Intrattabilità INTRODUZIONE Prof. Alberto Postiglione Dispense, cap. 4.2.1 AA 2007-2008 Problemi Intrattabili Problemi Intrattabili Esistono problemi
Di cosa parliamo oggi?
Di cosa parliamo oggi? Oggi parliamo di Analisi di Algoritmi Analisi di Algoritmi = valutazione delle risorse usate da algoritmi per risolvere un dato problema Risorse = Tempo impiegato dall algoritmo
Complessità. Ricorda: Problema P decidibile Linguaggio L P decidibile Taglia input x x. Esempio: G è un grafo connesso? { G G è un grafo connesso}
Complessità Calcolabilità: studia la frontiera tra problemi solubili e insolubili, Si limita ad aspetti qualitativi della risolubilità dei problemi (distingue ciò che è risolubile da ciò che non lo è).
Algoritmi e loro proprietà. Proprietà formali degli Algoritmi Efficienza rispetto al tempo Efficienza rispetto allo spazio
Algoritmi e loro proprietà Proprietà formali degli Algoritmi Efficienza rispetto al tempo Efficienza rispetto allo spazio Cos è l informatica? L informatica è la scienza della rappresentazione e dell elaborazione
Cos è l informatica? Un esempio di algoritmo. Che cos è un algoritmo? Algoritmi e loro proprietà. non ambigue ed effettivamente calcolabili
Algoritmi e loro proprietà Proprietà formali degli Algoritmi Efficienza rispetto al tempo Efficienza rispetto allo spazio Cos è l informatica? L informatica è la scienza della rappresentazione e dell elaborazione
Studio degli algoritmi
COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.2006/07 Prof. V.L. Plantamura Dott.ssa A. Angelini Studio degli algoritmi Dato un problema P, le problematiche riguardano: Sintesi
Algoritmi di Ordinamento
Algoritmi di Ordinamento 1 Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento Statistiche di ordine 2 Selection Sort SelectionSort(dati[]) {
Nozioni di base (II Parte)
Nozioni di base (II Parte) 1 Ricorsione [GTG14, Par. 5.1-5.4 and 13.1] Algoritmo Ricorsivo: algoritmo che invoca se stesso (su istanze sempre più piccole) sfruttando la nozione di induzione. La soluzione
Analisi asintotica. Astrazione: come il tempo di esecuzione cresce in funzione della taglia dell input asintoticamente.
Analisi asintotica Vittorio Maniezzo University of Bologna Analisi asintotica Obiettivo: semplificare l analisi del consumo di risorse di un algoritmo prescindendo dai dettagli implementativi o di altro
Informatica e Laboratorio di Programmazione complessità degli algoritmi Alberto Ferrari. Alberto Ferrari Informatica e Laboratorio di Programmazione
Informatica e Laboratorio di Programmazione complessità degli algoritmi Alberto Ferrari Alberto Ferrari Informatica e Laboratorio di Programmazione algoritmo o matematico persiano Muhammad al-khwarizmi
Tecniche di analisi degli algoritmi
Tecniche di analisi degli algoritmi Damiano Macedonio mace@unive.it Algoritmi e Strutture Dati, A.A. 2012/13 27 ottobre 2012 Original work Copyright c 2009 Moreno Marzolla, Università di Bologna Modifications
Algoritmi e Strutture di Dati
Algoritmi e Strutture di Dati Complessità dei problemi m.patrignani Nota di copyright queste slides so protette dalle leggi sul copyright il titolo ed il copyright relativi alle slides (inclusi, ma n limitatamente,
Principali strumenti per lo sviluppo di algoritmi in pascal-like. concetti universali presenti in tutti i linguaggi di programmazione
LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 12 LA COMPLESSITA COMPUTAZIONALE Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli Studi di Napoli Federico II wpage.unina.it/lapegna
Capitolo 8: Teoria della complessitá
Capitolo 8: Teoria della complessitá 1 La Teoria della calcolabilitá considera aspetti qualitativi della soluzione di problemi. Distingue il calcolabile dal non calcolabile. La Teoria della complessitá
Algoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort
Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Selection e Insertion Sort Ordinamento Dato un insieme S di n elementi presi da un dominio totalmente ordinato, ordinare S in ordine non crescente o non
Tecniche di analisi degli algoritmi
Tecniche di analisi degli algoritmi Moreno Marzolla marzolla@cs.unibo.it Dipartimento di Scienze dell Informazione, Università di Bologna 19 ottobre 2010 Copyright c 2009, 2010 Moreno Marzolla, Università
Per regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente
Progetto di algoritmi sequenziali (un solo esecutore ) Divide et Impera Per regnare occorre tenere divisi i nemici e trarne vantaggio Greedy fai ad ogni passo la scelta più conveniente Buoni risultati
ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)
ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09) DISPENSA N. 4 1. Ricerca Binaria Ricorsiva L algoritmo Ricerca Binaria risolve il problema della ricerca di una chiave in un vettore. È un esempio
Algoritmi e Strutture Dati. Luciano Gualà
Algoritmi e Strutture Dati Luciano Gualà guala@mat.uniroma2.it www.mat.uniroma2.it/~guala È sensato misurare la complessità di un algoritmo contando il numero di linee di codice eseguite? riassunto puntate
Ad ogni problema computazionale possiamo associare una misura della sua complessità.
Problema computazionale: Descrizione dell input, Compito da svolgere. Esempio: SOMMA: INPUT: 2 numeri x e y, COMPITO: stampare x+y. Ad ogni problema computazionale possiamo associare una misura della sua
FONDAMENTI DI INFORMATICA
Università degli Studi di Cagliari Corsi di Laurea in Ingegneria Chimica e Ingegneria Meccanica FONDAMENTI DI INFORMATICA http://people.unica.it/gianlucamarcialis A.A. 2018/2019 Docente: Gian Luca Marcialis
Fondamenti di Programmazione - Prof.ssa Gargano Anno Acc Esercitazioni 2009
Fondamenti di Programmazione - Prof.ssa Gargano Anno Acc. 2008-09 Esercitazioni 2009 1. Mostrare per induzione che per ogni intero positivo n 0, la seguente affermazione S(n) é vera: S(n): n i=0 2i = 2
Complessità computazionale
Complessità computazionale Alberto Policriti Dpt. of Mathematics and Informatics, University of Udine. Applied Genomics Institute December 16, 2009 Il problema computazionale Un problema specifica una
Teoria della NP-completezza
Teoria della NP-completezza Ivan Lanese Dipartimento di Informatica Scienza e Ingegneria Università di Bologna Ivan.lanese@gmail.com http://www.cs.unibo.it/~lanese/ NP-completezza 2 Complessità di problemi
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
Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente
Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente Divide et impera - Schema generale Divide-et-impera (P, n) if n k then risolvi direttamente
Certificati dei problemi in NP
Certificati dei problemi in NP La stringa y viene in genere denominata un certificato Un Certificato è una informazione ausiliaria che può essere utilizzata per verificare in tempo polinomiale nella dimensione
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à
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
Definizioni di base. Algoritmo: procedura computazionale ben definita che prende valori in input e produce valori in output.
ANALISI DELLA COMPLESSITÀ DEGLI ALGORITMI Definizioni di base Algoritmo: procedura computazionale ben definita che prende valori in input e produce valori in output. Un algoritmo è uno strumento per risolvere
Esercizi per il corso di Algoritmi
1 Esercizi per il corso di Algoritmi Esercizi sulle Notazioni Asintotiche 1. Esercizio: In ciascuno dei seguenti casi, indicare se f(n) = O(g(n)), o se f(n) = Ω(g(n)), oppure entrambi (nel cui caso occorre
Notazione asintotica. notazione Ω. notazione O. notazione o notazione ω. Marina Zanella Algoritmi e strutture dati Richiami matematici 1
Notazione asintotica Sebbene si possa talvolta determinare il tempo esatto di esecuzione di un algoritmo, l estrema precisione non giustifica lo sforzo del calcolo; infatti, per input sufficientemente
Elementi di Complessità Computazionale
Elementi di Complessità Computazionale Ultima modifica 23.06.2004 Il problema Esiste una misura oggettiva per valutare l'efficienza di un algoritmo? In che relazione sono gli input di un algoritmo con
2.1 Notazione O (limite asintotico superiore)
Pag 13 2) Complessità asintotica Per poter valutare l efficienza di un algoritmo, così da poterlo confrontare con algoritmi diversi che risolvono lo stesso problema, bisogna essere in grado di valutare
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
Nell' Informatica è importante porsi questa domanda: Questo è l'argomento che viene trattato nella Complessità Computazionale, e si articola in due
Complessità Nell' Informatica è importante porsi questa domanda: Quanto costa risolvere un dato problema? Questo è l'argomento che viene trattato nella Complessità Computazionale, e si articola in due
Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi
Informatica Generale Andrea Corradini 13 - Gli algoritmi e la risoluzione di problemi Sommario Passi per la risoluzione di problemi Problemi di ricerca e ordinamento Algoritmi iterativi: la ricerca lineare
Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :
PROGRAMMAZIONE (Corsi B e C) Pre-appello di Gennaio 2004 (A.A. 2003/2004) PROGRAMMAZIONE (B e C) S. Straordinaria - Appello di Gennaio (A.A. 2002/2003) 22 Gennaio 2004 ore 11 Aula II di Facoltà (Durata:
Complessità computazionale
Università Roma Tre Dipartimento di Matematica e Fisica Percorso Abilitante Speciale Classe A048 Matematica Applicata Corso di Informatica Complessità computazionale Marco Liverani (liverani@mat.uniroma3.it)
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e notazione asintotica Modello di calcolo Per valutare la complessità temporale dei vari algoritmi Fibonacci, abbiamo pedissequamente contato le
Teoria della complessità
Fondamenti di Informatica per la Sicurezza a.a. 2006/07 Teoria della complessità Stefano Ferrari UNIVERSITÀ DEGLI STUDI DI MILANO DIPARTIMENTO DI TECNOLOGIE DELL INFORMAZIONE Stefano Ferrari Università
Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi. Parte prima
Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi Parte prima 1) Si dimostri il teorema sulla limitazione inferiore per il tempo asintotico di esecuzione nel caso
Automi e Linguaggi Formali
Automi e Linguaggi Formali Problemi intrattabili, classi P e NP A.A. 2014-2015 Alessandro Sperduti sperduti@math.unipd.it Problemi intrattabili Ci occuperemo solo di problemi decidibili, cioè ricorsivi.
in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico
Click to edit Algoritmo Master title style algoritmo: un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce un risultato e si arresta in un tempo finito
Tecniche di analisi degli algoritmi
Tecniche di analisi degli algoritmi Moreno Marzolla, Lorenzo Donatiello Dipartimento di Infromatica, Università di Bologna 11 novembre 2014 Copyright c 2009, 2010 Moreno Marzolla, Università di Bologna
Proprietà delle notazioni asintotiche. Mercoledì 1 ottobre 2014
Proprietà delle notazioni asintotiche Mercoledì 1 ottobre 2014 Punto della situazione Cos è un algoritmo Tempo di esecuzione T(n) Analisi di algoritmi: analisi asintotica di T(n) Notazioni asintotiche
2 OTTIMIZZAZIONE SU GRAFI. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1
2 OTTIMIZZAZIONE SU GRAFI E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 Molti problemi decisionali possono essere formulati utilizzando il linguaggio della teoria dei grafi. Esempi: - problemi di
Informatica II. Capitolo 2 Analisi di algoritmi. Valutare la complessità in tempo. Complessità in tempo: cosa serve?
Valutare la complessità in tempo Complessità in tempo: cosa serve? Informatica II Capitolo 2 Analisi di algoritmi Per stimare il tempo impiegato da un programma Per stimare il più grande input gestibile
Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.
Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari. Algoritmi e Strutture Dati + Lab A.A. / Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro ALBERO
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,
Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software
Introduzione alla programmazione Algoritmi e diagrammi di flusso F. Corno, A. Lioy, M. Rebaudengo Sviluppo del software problema idea (soluzione) algoritmo (soluzione formale) programma (traduzione dell
Problemi intrattabili
Tempo polinomiale ed esponenziale Una Tm M ha complessita in tempo T(n) se, dato un input w di lunghezza n, M si ferma dopo al massimo T (n) passi. Problemi intrattabili Ci occuperemo solo di problemi
Algoritmo per A. !(x) Istanza di B
Riduzioni polinomiali Una funzione f: T*!T* è detta computabile in tempo polinomiale se esiste una macchina di Turing limitata polinomialmente che la computi. Siano L 1 e L 2 " T* due linguaggi. Una funzione
2.1 Computational Tractability. Chapter 2. Basics of Algorithm Analysis. Efficienza degli algoritmi. Efficienza degli algoritmi
Chapter 2 2.1 Computational Tractability Basics of Algorithm Analysis 1 Efficienza degli algoritmi Efficienza degli algoritmi Siamo interessati soprattutto running time ma anche spazio, ovvero memoria
algoritmi e strutture di dati
algoritmi e strutture di dati complessità dei problemi m.patrignani ta di copyright queste slides so protette dalle leggi sul copyright il titolo ed il copyright relativi alle slides (inclusi, ma n limitatamente,
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
Crescita funzioni. 20 novembre Come possiamo confrontare le funzioni di costo che abbiamo ottenuto finora?
Crescita funzioni 20 novembre 2006 1 Funzioni di costo Definizione 1 (Funzione di costo). Utilizziamo il termine funzione di costo per indicare una funzione f : N R dall insieme dei numeri naturali ai
Algoritmi di ordinamento
Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento giu 03 ASD 1 Selection Sort SelectionSort(dati[]) { for (i=0; i
Esercizi di Algoritmi e Strutture Dati
Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 3 novembre 2010 1 Trova la somma/1 Scrivere un algoritmo che dati in input un array A[1... n] di n interi
PASCAL: I VETTORI TRATTO DA CAMAGNI-NIKOLASSY, CORSO DI INFORMATICA, VOL. 1, HOEPLI. Informatica
PASCAL: I VETTORI TRATTO DA CAMAGNI-NIKOLASSY, CORSO DI INFORMATICA, VOL. 1, HOEPLI Informatica I dati strutturati: gli array I vettori (o Array) Fino a ora abbiamo memorizzato le informazioni (valori)
Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi
Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore
Ω (grande omega) Esempio 10 COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI
COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.2006/07 Prof. V.L. Plantamura Dott.ssa A. Angelini Esempio 10 int potenza(int base, int esp); main () { \* Genera le prime potenze
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Università di Camerino Corso di Laurea in Informatica (12 CFU) I periodo didattico Emanuela Merelli email:emanuela.merelli@unicam.it Argomenti della lezione Elementi di un linguaggio
Complessità Computazionale. Introduzione
Complessità Computazionale Introduzione Un problema di conteggio Input - Un intero dove. Output - Il numero di coppie ordinate ( i, j ) tali che i e j sono interi e i j. Esempio: =4 (,), (,2), (,3), (,4),
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,
2 OTTIMIZZAZIONE SU GRAFI. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1
2 OTTIMIZZAZIONE SU GRAFI E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 Molti problemi decisionali possono essere formulati utilizzando il linguaggio della teoria dei grafi. Esempi: - problemi di