Alberto Montresor Università di Trento

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Alberto Montresor Università di Trento"

Transcript

1 !! Algoritmi e Strutture Dati! Capitolo 1 - Greedy!!! Alberto Montresor Università di Trento!! This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit or send a letter to Creative Commons, 53 Howard Street, 5th Floor, San Francisco, California, 105, USA. Alberto Montresor 1

2 Introduzione Gli algoritmi per problemi di ottimizzazione Eseguono una sequenza di decisioni La programmazione dinamica In maniera bottom-up, valuta tutte le decisioni possibili Evitando però di ripetere sotto-problemi (decisioni) già percorse Un algoritmo greedy (ingordo, goloso) Seleziona una sola delle possibili decisioni quella che sembra ottima (ovvero, è localmente ottima) Sperabilmente, si ottiene così un ottimo globale Alberto Montresor

3 Introduzione Quando applicare la tecnica greedy? Quando è possibile dimostrare che esiste una scelta ingorda Fra le molte scelte possibili, ne può essere facilmente individuata una che porta sicuramente alla soluzione ottima Quando il problema ha sottostruttura ottima Fatta tale scelta, resta un sottoproblema con la stessa struttura del problema principale Non tutti i problemi hanno una scelta ingorda Nota: in alcuni casi, soluzioni non ottime possono essere comunque interessanti Alberto Montresor 3

4 Insieme indipendente di intervalli Problema: Siano dati n intervalli distinti [ai, bi[ della retta reale trovare un insieme indipendente massimo un sottoinsieme di massima cardinalità formato da intervalli tutti disgiunti tra loro Definizioni: S={ 1,,, n } un insieme di intervalli Ad ogni intervallo i in S sono associati: ai tempo di inizio bi tempo di fine Che relazione c è con Insieme indipendente di intervalli pesati? i ai bi Alberto Montresor

5 Attività Alberto Montresor Tempo

6 Attività Alberto Montresor Tempo

7 Come affrontare il problema! Cerchiamo innanzitutto di risolverlo tramite programmazione dinamica (PD):! Individuiamo una sottostruttura ottima! Scriviamo una definizione ricorsiva per la dimensione della soluzione ottima! Scriviamo una versione iterativa bottom-up dell'algoritmo! Passiamo poi alla tecnica greedy! Cerchiamo una possibile scelta ingorda! Dimostriamo che la scelta ingorda porta alla soluzione ottima! Scriviamo un algoritmo ricorsivo o iterativo che effettua sempre la scelta ingorda Alberto Montresor 7

8 Sottostruttura ottima Si assuma che le attività siano ordinate per tempo di fine: Aggiungiamo due attività fittizie : b1 b bn 0 b0 = 0 Sottoproblema S[i,j] n+1 an+1 = + S[i,j] = { k bi ak < bk aj } Il sottoinsieme di attività che iniziano dopo che i ha finito finiscono prima che j abbia iniziato Così S[0, n+1] corrisponde al problema completo S Domanda Dimostrare che se i j, allora S[i,j] è vuoto bi ak bk aj Alberto Montresor

9 Sottostruttura ottima: caratterizzazione Se A[i,j] è una soluzione ottimale di S[i,j], e l'attività k è inclusa in A[i,j], allora Il problema S[i,j] viene suddiviso in due sottoproblemi: S[i,k]: le attività di S[i,j] che finiscono prima di k S[k,j]: le attività di S[i,j] che iniziano dopo di k A[i,j] contiene le soluzioni ottimali di S[i,k] e S[k,j] A[i,j] S[i,k] è la soluzione ottimale di S[i,k] A[i,j] S[k,j] è la soluzione ottimale di S[k,j] Dimostrazione: Utilizzando il metodo cut-and-paste Alberto Montresor

10 Definizione ricorsiva Descrizione ricorsiva della soluzione: A[i,j] = A[i,k] { k } A[k, j] Come determinare k? Analizzando tutte le possibilità... Definizione: D[i, j] La dimensione del più grande sottoinsieme A[i,j] S[i,j] di attività mutualmente compatibili Come si calcola? D[i, j] = ( 0 S[i, j] =; max {D[i, k]+d[k, j]+1} ks[i,j] S[i, j] 6= ; Alberto Montresor 10

11 Verso una soluzione greedy La definizione precedente: Ci permette di scrivere un algoritmo basato su programmazione dinamica o su memoization Complessità: θ(n 3 ) Devo risolvere tutti i sottoproblemi con i j, nel caso peggiore tempo O(n) per un sottoproblema Possiamo fare di meglio? Avevamo visto una soluzione O(n log n) Richiedeva pre-elaborazione Questa soluzione è peggiore, ma... Siamo sicuri che sia necessario analizzare tutti i possibili valori per k? Alberto Montresor 11

12 Teorema: Greedy choice Sia S[i,j] un sottoproblema non vuoto, e m l'attività di S[i,j] con il minor tempo di fine; allora m è compresa in qualche soluzione ottima di S[i,j] Il sottoproblema S[i,m] è vuoto Dimostrazione Conseguenze: Non è più necessario analizzare tutti i possibili valori di k Faccio una scelta ingorda, ma sicura: seleziono l'attività m con il minor tempo di fine Non è più necessario analizzare due sottoproblemi: Elimino tutte le attività che non sono compatibili con la scelta ingorda Mi resta solo un sottoproblema da risolvere: S[m,j] Alberto Montresor 1

13 già inclusi. Il sottoinsieme di intervalli selezionati è un insieme indipendente massimo. La complessità Realizzazione è O(niterativa log n), dovuta all ordinamento. SET independentset(integer[]a, integer[]b) { ordina a e b in modo che b[1] b[] b[n] } SET S Set() S.insert(1) integer ultimo 1 for integer i to n do if a[i] b[ultimo] then S.insert(i) ultimo i return S % Ultimo intervallo inserito % Controllo indipendenza Complessità Inserisce la prima attività: è sempre compatibile 1.3 Minimo albero di copertura Se l'input è già ordinato: θ(n) Si consideri Altrimenti, il seguente è necessario problema un di passo ottimizzazione di ordinamento: su grafi θ(n pesati. log n) Alberto Montresor 13

14 i= Alberto Montresor Attività Tempo

15 i= Alberto Montresor Attività Tempo

16 i= Alberto Montresor Attività Tempo

17 i= Alberto Montresor Attività Tempo

18 1 3 i= Alberto Montresor Attività Tempo

19 1 3 i= Alberto Montresor Attività Tempo

20 1 3 i= Alberto Montresor Attività Tempo

21 1 3 i= Alberto Montresor Attività Tempo

22 i= Alberto Montresor Attività Tempo

23 i= Alberto Montresor Attività Tempo

24 i= Alberto Montresor Attività Tempo

25 Attività i=11 Alberto Montresor Tempo

26 Tecnica greedy approccio a partire da PD Abbiamo cercato di risolvere il problema della selezione delle attività tramite programmazione dinamica: Abbiamo individuato una sottostruttura ottima Abbiamo scritto una definizione ricorsiva per la dimensione della soluzione ottima Abbiamo dimostrato la proprietà della scelta greedy: Per ogni sottoproblema, esiste almeno una soluzione ottima che inizia con la scelta greedy Abbiamo scritto un algoritmo iterativo che effettua sempre la scelta ingorda Alberto Montresor 6

27 Problema del resto Input Output Un numero intero positivo n Il più piccolo numero intero di pezzi per dare un resto di n centesimi utilizzando monete da 50c, 10c, 5c e 1c. Esempi n = 7, 7 pezzi: n = 1, 5 pezzi: Seguiamo la stessa procedura precedente: Programmazione dinamica approccio greedy Alberto Montresor 7

28 Problema del resto Domanda Descrivere un alg. goloso per dare il resto con le monete specificate Sottostruttura ottima Scelta ingorda Provare che tale algoritmo fornisce sempre una soluzione ottima Domanda Supponete di avere un insieme di monete i cui valori siano potenze di c: c 0, c 1, c,..., c k L'algoritmo visto in precedenza funziona ancora? Domanda Trovare un insieme di pezzature per cui la scelta golosa non è applicabile Alberto Montresor

29 Tecnica greedy approccio senza passare per PD Evidenziare i passi di decisione Trasformare il problema di ottimizzazione in un problema di scelte successive Evidenziare una possibile scelta ingorda Dimostrare che tale scelta rispetto il principio della scelta ingorda Evidenziare la sottostruttura ottima Dimostrare che la soluzione ottima del problema residuo dopo la scelta ingorda può essere unito a tale scelta Scrittura codice: top-down, anche in maniera iterativa Nota: può essere necessario pre-processare l'input Alberto Montresor

30 Algoritmo di scheduling Definizione: 1 processore, n job p1, p,..., pn Ogni job pi ha un tempo di esecuzione t[i] Minimizzare il tempo di completamento medio Domanda: Risolvere il problema tramite la tecnica greedy Shortest job first ( )/ = 3/ (1+++1)/ = 7/ Alberto Montresor 30

31 Zaino Input Un intero positivo C - la capacità dello zaino n oggetti, tali che l oggetto i-esimo è caratterizzato da: un profitto pi e un volume vi, entrambi interi positivi Zaino (o Zaino 0/1) trovare un sottoinsieme S di {1,..., n} di oggetti tale che il volume totale non superi la capacità massima e il profitto totale sia massimo Zaino reale (o Zaino frazionario) E' possibile prendere frazioni di oggetti Alberto Montresor 31

32 p[] 60 v[] C 55 Scegli per primo l oggetto che ha profitto più alto = 5 Alberto Montresor 3

33 p[] 60 v[] C 55 Scegli per primo l oggetto che ha profitto più alto = 5 30 Scegli per primo l oggetto che ha volume più alto = 5 Alberto Montresor 33

34 p[ ] v[ ] per litro 5 per litro per litro C 55 Scegli per primo l oggetto che ha profitto più alto = 5 Scegli per primo l oggetto che ha volume più alto = 5 Scegli per primo l oggetto che ha il più alto profitto specifico / = 65 Alberto Montresor 3

35 Problema dello zaino Domanda: Dimostrare che il problema dello Zaino Reale gode della scelta greedy Dimostrare che il problema dello Zaino 0-1 non gode di scelta greedy In altre parole: Risolvere il problema dello Zaino Reale con programmazione dinamica è inutile e costoso Risolvere il problema dello Zaino 0-1 con tecnica greedy è scorretto Alberto Montresor 35

36 dell oggetto immediatamente successivo, ed i rimanenti oggetti non saranno scelti. Il tempo di calcolo è O(n log n), dominato dal costo dell ordinamento. Zaino reale zaino(integer[]p, integer[]v, integer C, integer n, integer[]x)!!!!!!! { ordina p e v in modo che p[1]/v[1] p[]/v[] p[n]/v[n]} integer i 1 while i n and C>0 do if v[i] C then x[i] C/v[i] C 0; else x[i] 1 C C v[i] i i +1 for integer j i to n do x[j] 0 Complessità O(n log n) per l ordinamento O(n) per la scelta dei valori Alberto Montresor 36

37 Problema della compressione Rappresentare i dati in modo efficiente Impiegare il numero minore di bit per la rappresentazione Goal: risparmio spazio su disco e tempo di trasferimento Una possibile tecnica di compressione: codifica di caratteri Tramite funzione di codifica f: f(c) = x c è un possibile carattere preso da un alfabeto Σ x è una rappresentazione binaria c è rappresentato da x Alberto Montresor 37

38 Codici di Huffman Supponiamo di avere un file di n caratteri Composto dai caratteri: a!! b!! c!! d!! e!! f Con le seguenti frequenze: 5% 13% 1% 16% % 5% Codifica tramite ASCII ( bit per carattere) Dimensione totale: n bit Codifica basata sull'alfabeto (3 bit per carattere) Codifica: Dimensione totale: 3n bit Possiamo fare di meglio? Alberto Montresor 3

39 Codici di Huffman Codifica a lunghezza variabile Caratteri: a!! b!! c!! d!! e!! f Codifica: Costo totale: ( ) n=.n Codice a prefisso (meglio, senza prefissi ): Nessun codice è prefisso di un altro codice Condizione necessaria per permettere la decodifica Esempio: ADDAABCA Considerate questo codice: f(a) = 1, f(b)=10, f(c)=11 Alberto Montresor 3

40 Codici di Huffman! Alcune domande! E' possibile che il testo codificato sia più lungo della rappresentazione con 3 bit?! Esistono testi difficili per una rappresentazione di questo tipo?! Come organizzare un algoritmo per la decodifica?! Come organizzare un algoritmo per la codifica è il tema dei lucidi seguenti! Cenni storici! David Huffman, 15! Algoritmo ottimo per costruire codici prefissi! Utilizzato in PKZIP Alberto Montresor 0

41 Rappresentazione ad albero per la decodifica Rappresentazione come alberi binari Figlio sinistro: 0 Figlio destro: 1 Caratteri dell'alfabeto sulle foglie 1 0 Algoritmo di decodifica:! 1. parti dalla radice. leggi un bit alla volta percorrendo l'albero: 0: sinistra 1: destra 3. stampa il carattere della foglia. torna a 1 a b c 0 d 0 1 e a: 00 b: 010 c: 011 d: 100 e: 101 Alberto Montresor 1

42 Rappresentazione ad albero per la decodifica Non c'è motivo di avere un nodo interno con un solo figlio Il figlio unico può essere sostituito al proprio genitore Sia che sia una foglia che un nodo interno 0 1 a Spazio sprecato a: 00 b: 010 c: 011 d: 100 e: 101 b c d e Alberto Montresor

43 Rappresentazione ad albero per la decodifica! Non c'è motivo di avere un nodo interno con un solo figlio! Il figlio unico può essere sostituito al proprio genitore! Sia che sia una foglia che un nodo interno 1 0 a: 00 b: 010 c: 011 d: 100 e: 101 a b c 0 d 1 e In questo albero ogni nodo interno ha due figli a: 00 b: 010 c: 011 d: 10 e: 11 Alberto Montresor 3

44 Definizione formale del problema Definizione: codice ottimo Nota: Nota: Dato un file F, un codice C è ottimo per F se non esiste un altro codice tramite il quale F possa essere compresso impiegando un numero inferiore di bit. Il codice ottimo dipende dal particolare file Possono esistere più soluzioni ottime I codici a prefisso ottimi sono rappresentati da un albero in cui tutti i nodi interni hanno due figli Alberto Montresor

45 Definizione formale del problema Supponiamo di avere: un file F composto da caratteri nell alfabeto Σ un albero T che rappresenta la codifica Quanti bit sono richiesti per codificare il file? Per ogni c Σ, sia dt(c) la profondità della foglia che rappresenta c Il codice per c richiederà allora dt(c) bit Se f [c] è il numero di occorrenze di c in F, allora la dimensione della codifica è C[F, T] = X c f[c] d T (c) Alberto Montresor 5

46 Algoritmo di Huffman Principio del codice di Huffman Minimizzare la lunghezza dei caratteri che compaiono più frequentemente Assegnare ai caratteri con la frequenza minore i codici corrispondenti ai percorsi più lunghi all interno dell albero Un codice è progettato per un file specifico Si ottiene la frequenza di tutti i caratteri Si costruisce il codice Si rappresenta il file tramite il codice Si aggiunge al file una rappresentazione del codice Alberto Montresor 6

47 Costruzione del codice Passo 1: Costruire una lista ordinata di nodi foglia per ogni carattere, etichettato con la propria frequenza f : 5 e : c : 1 b : 13 d : 16 a : 5 Alberto Montresor 7

48 Costruzione del codice Passo : Rimuovere i due nodi più piccoli (con frequenze minori) Passo 3: Collegarli ad un nodo padre etichettato con la frequenza combinata (sommata) 1 c : 1 b : 13 d : 16 a : 5 f : 5 e : Alberto Montresor

49 Costruzione del codice Passo : Aggiungere il nodo combinato alla lista. c : 1 b : 13 1 d : 16 a : 5 f : 5 e : Alberto Montresor

50 Costruzione del codice Ripetere i passi - fino a quando non resta un solo nodo nella lista 1 d : 16 5 a : 5 f : 5 e : c : 1 b : 13 Alberto Montresor 50

51 Costruzione del codice Ripetere i passi - fino a quando non resta un solo nodo nella lista 5 30 a : 5 c : 1 b : 13 1 d : 16 f : 5 e : Alberto Montresor 51

52 Costruzione del codice Ripetere i passi - fino a quando non resta un solo nodo nella lista a : c : 1 b : 13 1 d : 16 f : 5 e : Alberto Montresor 5

53 Costruzione del codice Al termine, si etichettano gli archi dell'albero con bit a c b d f e Alberto Montresor 53

54 Algoritmo in pseudo-codice max k S[i,j] {D[i, k]+d[k, j]+1} S[i, j] = TREE huffman(integer[]f, integer[]c, integer n) PRIORITYQUEUE Q MinPriorityQueue() for i 1 to n do Q.insert(f[i], Tree(f[i], c[i])) for i 1 to n 1 do z 1 Q.deleteMin() z Q.deleteMin() z Tree(z 1.f + z.f, nil) z.left z 1 z.right z Q.insert(z.f,z) return Q.deleteMin() Tree:! f // frequenza (key) c // carattere left // figlio sinistro right // figlio destro Complessità θ(n log n) Alberto Montresor 5

55 Dimostrazione di correttezza Teorema: L'output dell'algoritmo Huffman per un dato file è un codice a prefisso ottimo Schema della dimostrazione: Proprietà della scelta greedy Scegliere i due elementi con la frequenza più bassa conduce sempre ad una soluzione ottimale Sottostruttura ottima Dato un problema sull'alfabeto Σ, è possibile costruire un sottoproblema con un alfabeto più piccolo Alberto Montresor 55

56 Scelta greedy Sia Σ un alfabeto, f un vettore di frequenze x, y i due caratteri che hanno frequenza più bassa Allora Esiste un codice prefisso ottimo per Σ in cui x,y hanno la stessa profondità massima e i loro codici differiscono solo per l'ultimo bit (sono foglie sorelle) Dimostrazione Al solito, basata sulla trasformazione di una soluzione ottima Supponiamo che esistano due caratteri a,b con profondità massima e questi siano diversi da x,y Alberto Montresor 56

57 Scelta greedy Assumiamo (senza perdere in generalità): f[x] f[y] f[a] f[b] Poiché le frequenze di x e y sono minime: f[x] f[a] f[y] f[b] Scambiamo x con a: otteniamo T' Scambiamo y con b: otteniamo T" T T' T" x a a y y b a b x b x y Alberto Montresor 57

58 Scelta greedy Dimostriamo che: C(f,T '') C(f, T ') C(f,T) Ma poiché T è ottimo, sappiamo anche che: C(f,T) C(f,T '') Quindi T è anch'esso ottimo Alberto Montresor 5

59 Sottostruttura ottima Sia Σ un alfabeto, f un array di frequenze x, y i due caratteri che hanno frequenza più bassa Σ' = Σ - { x, y } { z } f[z] = f[x] + f[y] O un albero che rappresenta un codice a prefisso ottimo per Σ' Allora: L'albero T ottenuto da O sostituendo il nodo foglia z con un nodo interno con due figli x, y rappresenta un codice a prefisso ottimo per Σ Alberto Montresor 5

60 Sottostruttura ottima Esprimiamo la relazione fra il costo di T e O Per ogni c Σ - { x, y } f[c] dt(c) = f[c] do(c) Quindi tutte queste componenti sono uguali dt(x) = dt(y) = do(z)+1 da cui concludiamo f[x] dt(x) + f[y] dt(y) = (f[x] + f[y])( do(z)+1 ) = f[z] do(z) + f[x] + f[y] da cui concludiamo C(f, T) = C(f, O) + f[x] + f[y] C(f, O) = C(f, T) - f[x] - f[y] Alberto Montresor 60

61 Sottostruttura ottima Per assurdo: supponiamo T non sia ottimo Allora esiste un albero T' tale che C(f, T') < C(f, T) Senza perdere in generalità, sappiamo che T' ha x e y come foglie sorelle (proprietà della scelta greedy) Sia T'' l'albero ottenuto da T' sostituendo il padre di x, y con un nodo z tale che f[z] = f[x] + f[y] Allora C(f, T'') = C(f, T') f[x] f[y] < C(f, T) f[x] f[y] = C(f, O) Il che è assurdo, visto che O è ottimo Alberto Montresor 61

62 Albero di copertura di peso minimo Un problema di notevole importanza: determinare come interconnettere diversi elementi fra loro minimizzando certi vincoli sulle connessioni Esempio classico: progettazione dei circuiti elettronici dove si vuole minimizzare la lunghezza delle connessioni fra i diversi componenti Questo problema prende il nome di: albero di copertura (di peso) minimo albero di connessione (di peso) minimo minimum spanning tree Alberto Montresor 6

63 Definizione del problema Input: G=(V,E) un grafo non orientato e connesso w: V V R una funzione di peso (costo di connessione) se [u,v] E, allora w(u,v) è il peso dell'arco [u,v] se [u,v] E, allora w(u,v) = Poiché G non è orientato, w(u,v) = w(v,u) Alberto Montresor 63

64 Definizione del problema Albero di copertura (spanning tree) Dato un grafo G=(V,E) non orientato e connesso, un albero di copertura di G è un sottografo T=(V, E T ) tale che T è un albero E T E T contiene tutti i vertici di G 7 b c d a 11 7 i 6 h g f e Alberto Montresor 6

65 Definizione del problema Output: albero di copertura minimo (minimum spanning tree) L'albero di copertura il cui peso totale X w(u, v) [u,v]e T sia minimo! Nota: L albero di copertura di peso minimo non è unico b c d 7 7 b c d a 11 7 i 6 1 e a 11 7 i 6 1 e h g f 1 10 h g f 1 10 Alberto Montresor 65

66 Differenze con cammini minimi Calcolare un albero dei cammini minimi da singola sorgente a un albero di copertura minima coincidono? a b 1 c 1 d Alberto Montresor 66

67 Algoritmo generico Vediamo Un algoritmo di tipo goloso generico Due istanze di questo algoritmo: Kruskal e Prim L'idea è di accrescere un sottoinsieme A di archi in modo tale che venga rispettata la seguente condizione: A è un sottoinsieme di qualche albero di connessione minimo Un arco [u,v] è detto sicuro per A se A {[u,v]} è ancora un sottoinsieme di qualche albero di connessione minimo. Alberto Montresor 67

68 Algoritmo generico SET mst-generico(graph G, integer[]w) SET A while A non forma un albero di copertura do trova un arco sicuro [u, v] A A {[u, v]} return A Alberto Montresor 6

69 Definizioni Per caratterizzare gli archi sicuri dobbiamo introdurre alcune definizioni: Un taglio (S,V-S) di un grafo non orientato G=(V,E) è una partizione di V in due sottoinsiemi disgiunti Un arco [u,v] attraversa il taglio se u S e v V-S Un taglio rispetta un insieme di archi A se nessun arco di A attraversa il taglio Un arco che attraversa un taglio è leggero nel taglio se il suo peso è minimo fra i pesi degli archi che attraversano un taglio Alberto Montresor 6

70 Esempio 7 b c d Arco leggero che attraversa il taglio a 11 7 i 6 h g f e S Taglio V-S Insieme A: archi in grigio Il taglio rispetta A Alberto Montresor 70

71 Archi sicuri La regola per riconoscere gli archi sicuri è data dal seguente Teorema: Sia G=(V,E) un grafo non orientato e connesso Sia w una funzione peso a valori reali definita su E Sia A E contenuto in un qualche albero di copertura minimo per G Sia (S,V-S) un qualunque taglio che rispetta A Sia [u,v] un arco leggero che attraversa il taglio. Allora l arco [u,v] è sicuro per A Alberto Montresor 71

72 Esempio: arco non sicuro perché il taglio non rispetta A 7 b c d a 7 b c d 11 7 i 6 h g f e a 11 7 i 6 1 h g f 10 1 Arco sicuro 7 b c d a 11 7 i 6 1 h g f 10 1 Arco non sicuro e e Alberto Montresor 7

73 Esempio: arco non sicuro perché non leggero 7 b c d a 7 b c d 11 7 i 6 h g f e a a 11 7 i 6 1 h g f 10 1 Arco sicuro 7 b c d 11 7 i 6 1 h g f 10 1 e e Arco non sicuro Alberto Montresor 73

74 Archi sicuri Corollario: Sia G=(V,E) un grafo non orientato e connesso Sia w una funzione peso a valori reali definita su E Sia A E contenuto in un qualche albero di copertura minimo per G Sia C una componente connessa (un albero) nella foresta G A =(V,A) Sia [u,v] un arco leggero che connette C a qualche altra componente in G A Allora l arco [u,v] è sicuro per A Alberto Montresor 7

75 Algoritmo di Kruskal Idea Ingrandire sottoinsiemi disgiunti di un albero di copertura minimo connettendoli fra di loro fino ad avere l albero complessivo Si individua un arco sicuro scegliendo un arco [u,v] di peso minimo tra tutti gli archi che connettono due distinti alberi (componenti connesse) della foresta L algoritmo è greedy perché ad ogni passo si aggiunge alla foresta un arco con il peso minore Implementazione Utilizziamo una struttura dati Merge-Find Alberto Montresor 75

76 return T Algoritmo di Kruskal SET kruskal(edge[]e, integer n, integer m) SET A MFSET M Set() Mfset(n) { ordina E[1,...,m] in modo che E[1].peso apple apple E[m].peso } integer c 0 integer i 1 while c<n 1 and i apple m do % Termina quando l albero è costruito if M.find(E[i].u) 6= M.find(E[i].v) then M.merge(E[i].u, E[i].v) A.insert(E[i]) c c +1 i i +1 return A Alberto Montresor 76

77 Visualizzazione 7 b c d 7 b c d a 11 7 i 6 1 e a 11 7 i 6 1 e h g f 1 10 h g f b c d 7 b c d a 11 7 i 6 1 e a 11 7 i 6 1 e h g f 1 10 h g f 1 10 Alberto Montresor 77

78 Visualizzazione 7 b c d 7 b c d a 11 7 i 6 1 e a 11 7 i 6 1 e h g f 1 10 h g f b c d 7 b c d a 11 7 i 6 h g f e a 11 7 i 6 h g f e Alberto Montresor 7

79 Visualizzazione 7 b c d 7 b c d a 11 7 i 6 h g f e a 11 7 i 6 h g f e a 7 b c d 11 7 i 6 1 h g f 10 1 e a 7 b c d 11 7 i 6 1 h g f 10 1 e Alberto Montresor 7

80 Analisi Il tempo di esecuzione per l algoritmo di Kruskal dipende dalla realizzazione della struttura dati per insiemi disgiunti Utilizziamo la versione con euristica sul rango + compressione L inizializzazione richiede O(n) L'ordinamento richiede O(m log m) = O(m log n ) = O(m log n) Vengono eseguite O(m) operazioni sulla foresta di insiemi disgiunti, il che richiede un tempo O(m) Totale: O(n+m log n + m) = O(m log n) Alberto Montresor 0

81 Algoritmo di Prim L algoritmo di Prim procede mantenendo in A un singolo albero L albero parte da un vertice arbitrario r (la radice) e cresce fino a quando non ricopre tutti i vertici Ad ogni passo viene aggiunto un arco leggero che collega un vertice in V A con un vertice in V-V A dove V A è l'insieme di nodi raggiunti da archi in A Correttezza (V A,V-V A ) è un taglio che rispetta A (per definizione) Per il corollario, gli archi leggeri che attraversano il taglio sono sicuri Alberto Montresor 1

82 Implementazione Una struttura dati per i nodi non ancora nell'albero Durante l'esecuzione, i vertici non ancora nell'albero si trovano in una coda con priorità Q ordinata in base alla seguente definizione di priorità: La priorità del nodo v è il peso minimo di un arco che collega v ad un vertice nell'albero, o + se tale arco non esiste Come mantenere l'albero Ogni nodo v mantiene un puntatore al padre p[v] A è mantenuto implicitamente: A = { [v, v.p] v V-Q-{r} } Terminazione: Quando la coda Q è vuota Tutti i nodi tranne la radice conoscono il proprio padre Alberto Montresor

83 Algoritmo di Prim prim(graph G, integer r, integer[]p) PRIORITYQUEUE Q MinPriorityQueue() PRIORITYITEM[]pos new PRIORITYITEM[1...G.n] foreach u G.V() {r} do pos[u] Q.insert(u, + ) pos[r] Q.insert(r, 0) p[r] 0 while not Q.isEmpty() do u Q.deleteMin() pos[u] nil foreach v G.adj(u) do if pos[v] = nil and w(u, v) < pos[v].priorità then Q.decrease(pos[v],w(u, v)) p[v] u Alberto Montresor 3

84 Algoritmo di Prim: Esempio 7 b c d 7 b c d a 11 7 i 6 h g f e a 11 7 i 6 h g f e a 7 7 b c d 11 7 i 6 1 h g f 10 1 e a 7 7 b c d 11 7 i 6 1 h g f e Alberto Montresor

85 Algoritmo di Prim: Esempio a 7 7 b c d 11 7 i 6 1 h g f e 10 a 7 7 b c d 11 7 i 6 1 h g f e a 7 7 b c d 11 7 i 6 1 h g f 10 1 e 10 a 7 b c d 11 7 i 6 h g6 f e Alberto Montresor 5

86 Algoritmo di Prim: Esempio 7 b c d a 11 7 i 6 1 e h g f 1 10 Alberto Montresor 6

87 Algoritmo di Prim: Analisi L efficienza dell algoritmo di Prim dipende dalla coda Q Se Q viene realizzata tramite uno heap binario: Inizializzazione: O(n log n) Il ciclo principale viene eseguito n volte ed ogni operazione extractmin() è O(log n) Il ciclo interno viene eseguito O(m) volte L'operazione decreasekey() sullo heap che costa O(log n) Tempo totale: O(n+n log n + m log n)=o(m log n) asintoticamente uguale a quello di Kruskal Cosa succede se la coda con priorità è implementata tramite vettore non ordinato? Alberto Montresor 7

88 Esercizi Vero o falso L arco con peso minimo è sicuro L arco con il secondo peso minimo è sicuro L arco con il terzo peso minimo è sicuro Albero di copertura minima in un piano Dati n punti nel piano La distanza euclidea fra due punti è il peso di una connessione fra di essi Trovare un insieme di connessioni di peso minimo Alberto Montresor

89 Conclusioni Prospettiva storica Primo algoritmo: Boruvka 16 Kruskal 156 Prim 157 (ma anche Jarnik nel 130) Utilizzando gli heap di Fibonacci Prim viene eseguito in tempo O(m + n log n) Sviluppi recenti Karger, Klein, Tarjan (algoritmo randomizzato): O(n+m) Fredman, Willard (algoritmo non basato su confronti): O(n+m) Alberto Montresor

90 Algoritmi greedy Vantaggi Semplici da programmare Molto efficienti Quando è possibile dimostrare la proprietà di scelta ingorda, danno la soluzione ottima La soluzione sub-ottima può essere accettabile Svantaggi Non sempre applicabili se si vuole la soluzione ottima Alberto Montresor 0

Algoritmi e strutture dati. Codici di Huffman

Algoritmi 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

Dettagli

Esercizi Capitolo 14 - Algoritmi Greedy

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

Dettagli

Esercizi Capitolo 5 - Alberi

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

Dettagli

Alberto Montresor Università di Trento

Alberto Montresor Università di Trento !! Algoritmi e Strutture Dati! Capitolo 3 - Tipi di dato e strutture di dati!!! Alberto Montresor Università di Trento!! This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

Dettagli

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Algoritmi 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à

Dettagli

Tabelle hash. Damiano Macedonio Università Ca' Foscari di Venezia. mace@unive.it

Tabelle hash. Damiano Macedonio Università Ca' Foscari di Venezia. mace@unive.it Tabelle hash Damiano Macedonio Università Ca' Foscari di Venezia mace@unive.it Original work Copyright Alberto Montresor, University of Trento (http://www.dit.unitn.it/~montreso/asd/index.shtml) Modifications

Dettagli

4.1 Modelli di calcolo analisi asintotica e ricorrenze

4.1 Modelli di calcolo analisi asintotica e ricorrenze 4 Esercizi Prima Parte 4.1 Modelli di calcolo analisi asintotica e ricorrenze Esercizio 4 1 Rispondere alle seguenti domande: 1. Come misuriamo l efficienza di un algoritmo?. Quali sono gli algoritmi più

Dettagli

Minimo Albero Ricoprente

Minimo Albero Ricoprente Minimo lbero Ricoprente Pag. 1/20 Minimo lbero Ricoprente Il problema della definizione di un Minimo lbero Ricoprente trova applicazione pratica in diverse aree di studio, quali ad esempio la progettazione

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Introduzione al corso Alberto Montresor Università di Trento This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of

Dettagli

Grafi. Moreno Marzolla Dip. di Informatica Scienza e Ingegneria Università di Bologna. moreno.marzolla@unibo.it http://www.moreno.marzolla.

Grafi. Moreno Marzolla Dip. di Informatica Scienza e Ingegneria Università di Bologna. moreno.marzolla@unibo.it http://www.moreno.marzolla. Grafi Moreno Marzolla ip. di Informatica Scienza e Ingegneria Università di ologna moreno.marzolla@unibo.it http://www.moreno.marzolla.name/ opyright lberto Montresor, Università di Trento, Italy (http://www.dit.unitn.it/~montreso/asd/index.shtml)

Dettagli

Esercizi per il corso di Algoritmi e Strutture Dati

Esercizi per il corso di Algoritmi e Strutture Dati 1 Esercizi per il corso di Algoritmi e Strutture Dati Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, né in C++, etc. ). Di tutti gli algoritmi

Dettagli

Tecniche avanzate di sintesi di algoritmi: Programmazione dinamica Algoritmi greedy

Tecniche 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

Dettagli

Sommario della lezione

Sommario della lezione Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 1/36 Sommario della lezione Ulteriori esempi di applicazione della Programmazione Dinamica Esempio di applicazione

Dettagli

Esercizi Capitolo 6 - Alberi binari di ricerca

Esercizi 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

Dettagli

Sono 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

Sono 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

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Soluzione esercizi di approfondimento Stefano Leucci stefano.leucci@univaq.it Una terza variante dell IS InsertionSort3 (A) 1. for k=1 to n-1 do 2. x = A[k+1] 3. j = ricerca_binaria(a[1,k],x)

Dettagli

Algoritmi di Visita di Grafi. Damiano Macedonio mace@unive.it

Algoritmi di Visita di Grafi. Damiano Macedonio mace@unive.it lgoritmi di Visita di rafi amiano Macedonio mace@unive.it Original work opyright lberto Montresor, Università di Trento, Italy Modifications opyright 00 0, Moreno Marzolla, Università di ologna, Italy

Dettagli

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione.

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione. Grafi ed Alberi Pag. /26 Grafi ed Alberi In questo capitolo richiameremo i principali concetti di due ADT che ricorreranno puntualmente nel corso della nostra trattazione: i grafi e gli alberi. Naturale

Dettagli

2) Codici univocamente decifrabili e codici a prefisso.

2) Codici univocamente decifrabili e codici a prefisso. Argomenti della Lezione ) Codici di sorgente 2) Codici univocamente decifrabili e codici a prefisso. 3) Disuguaglianza di Kraft 4) Primo Teorema di Shannon 5) Codifica di Huffman Codifica di sorgente Il

Dettagli

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Algoritmi 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

Dettagli

I tipi di dato astratti

I tipi di dato astratti I tipi di dato astratti.0 I tipi di dato astratti c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 001/00.0 0 I tipi di dato astratti La nozione di tipo di dato

Dettagli

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

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

Dettagli

16.3.1 Alberi binari di ricerca

16.3.1 Alberi binari di ricerca 442 CAPITOLO 16. STRUTTURE DI DATI DINAMICHE root 7 5 11 2 8 13 10 Figura 16.11 Esempio di albero binario: ogni nodo contiene il dato da immagazzinare e tre puntatori che definiscono le sue relazioni di

Dettagli

Introduzione alla tecnica di Programmazione Dinamica

Introduzione alla tecnica di Programmazione Dinamica Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 1/37 Sommario della lezione Introduzione alla tecnica di Programmazione Dinamica Esempio di applicazione n. 1:

Dettagli

Esercizi di Ricerca Operativa I

Esercizi di Ricerca Operativa I Esercizi di Ricerca Operativa I Dario Bauso, Raffaele Pesenti May 10, 2006 Domande Programmazione lineare intera 1. Gli algoritmi per la programmazione lineare continua possono essere usati per la soluzione

Dettagli

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 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

Dettagli

Parte 3: Gestione dei progetti, Shop scheduling

Parte 3: Gestione dei progetti, Shop scheduling Parte : Gestione dei progetti, Shop scheduling Rappresentazione reticolare di un progetto Insieme di attività {,...,n} p i durata (nota e deterministica dell attività i) relazione di precedenza fra attività:

Dettagli

1. Considerazioni generali

1. Considerazioni generali 1. Considerazioni generali Modelli di shop scheduling In molti ambienti produttivi l esecuzione di un job richiede l esecuzione non simultanea di un certo numero di operazioni su macchine dedicate. Ogni

Dettagli

AA 2006-07 LA RICORSIONE

AA 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

Dettagli

Appunti di Algoritmi e Strutture Dati. Grafi. Gianfranco Gallizia

Appunti di Algoritmi e Strutture Dati. Grafi. Gianfranco Gallizia Appunti di Algoritmi e Strutture Dati Grafi Gianfranco Gallizia 12 Dicembre 2004 2 Indice 1 Grafi 5 1.1 Definizione.............................. 5 1.2 Implementazione........................... 5 1.2.1

Dettagli

Problemi di soddisfacimento di vincoli. Formulazione di problemi CSP. Colorazione di una mappa. Altri problemi

Problemi di soddisfacimento di vincoli. Formulazione di problemi CSP. Colorazione di una mappa. Altri problemi Problemi di soddisfacimento di vincoli Maria Simi a.a. 2014/2015 Problemi di soddisfacimento di vincoli (CSP) Sono problemi con una struttura particolare, per cui conviene pensare ad algoritmi specializzati

Dettagli

PROBLEMA 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 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

Dettagli

Elementi di Informatica

Elementi di Informatica Università degli Studi di Udine Facoltà di Ingegneria CORSO DI LAUREA IN SCIENZE dell ARCHITETTURA Elementi di Informatica Algoritmi, e Programmi D. Gubiani 29 marzo 2010 D. Gubiani Algoritmi, e Programmi

Dettagli

Entropia. Motivazione. ? Quant è l informazione portata dalla sequenza? Abbiamo una sequenza S di N simboli (campioni audio, pixel, caratteri,...

Entropia. Motivazione. ? Quant è l informazione portata dalla sequenza? Abbiamo una sequenza S di N simboli (campioni audio, pixel, caratteri,... Entropia Motivazione Abbiamo una sequenza S di N simboli (campioni audio, pixel, caratteri,... ) s,s 2,s 3,... ognuno dei quali appartiene ad un alfabeto A di M elementi.? Quant è l informazione portata

Dettagli

Corso 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 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

Dettagli

Ricerca Operativa Branch-and-Bound per problemi di Programmazione Lineare Intera

Ricerca Operativa Branch-and-Bound per problemi di Programmazione Lineare Intera Ricerca Operativa Branch-and-Bound per problemi di Programmazione Lineare Intera L. De Giovanni AVVERTENZA: le note presentate di seguito non hanno alcuna pretesa di completezza, né hanno lo scopo di sostituirsi

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Definizione Visita dell albero inorder Ricerca Ricerca minimo, massimo e successore. Inserimento ed eliminazione di un nodo Problema del bilanciamento dell albero Albero binario

Dettagli

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata Esempi di Problema: Prendere un Caffè al Distributore Università degli Studi di Udine Facoltà di Ingegneria CORSO DI LAUREA IN SCIENZE dell ARCHITETTURA Elementi di Informatica, e Programmi D. Gubiani

Dettagli

Algoritmi e strutture di dati. Dispense. Corso di Laurea in Informatica. a.a. 2012-2013 Giorgio Gambosi UNIVERSITÀ DI ROMA ``TOR VERGATA''

Algoritmi e strutture di dati. Dispense. Corso di Laurea in Informatica. a.a. 2012-2013 Giorgio Gambosi UNIVERSITÀ DI ROMA ``TOR VERGATA'' Algoritmi e strutture di dati Corso di Laurea in Informatica Dispense aa 2012-2013 Giorgio Gambosi UNIVERSITÀ DI ROMA ``TOR VERGATA'' Revisione per l'aa 2013/14 a cura di Miriam Di Ianni (aggiornate al

Dettagli

Testing: basato su analisi dinamica del codice. Metodi Formali: basato su analisi statica del codice.

Testing: basato su analisi dinamica del codice. Metodi Formali: basato su analisi statica del codice. Convalida: attività volta ad assicurare che il SW sia conforme ai requisiti dell utente. Verifica: attività volta ad assicurare che il SW sia conforme alle specifiche dell analista. Goal: determinare malfunzionamenti/anomalie/errori

Dettagli

Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006

Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006 Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006 Esercizio 1 - Heapsort Si consideri la seguente struttura dati, chiamata heap. Essa è un albero binario semi-completo (ossia un

Dettagli

Metodi 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 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

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 18 dicembre 2007 Esercizio 1: rappresentazione di una tabella di occorrenze L obiettivo è quello di rappresentare in modo efficiente

Dettagli

Esercizi Capitolo 2 - Analisi di Algoritmi

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

Dettagli

Verifica parte IIA. Test (o analisi dinamica) Mancanza di continuità. Esempio

Verifica parte IIA. Test (o analisi dinamica) Mancanza di continuità. Esempio Test (o analisi dinamica) Verifica parte IIA Rif. Ghezzi et al. 6.3-6.3.3 Consiste nell osservare il comportamento del sistema in un certo numero di condizioni significative Non può (in generale) essere

Dettagli

Sommario della lezione

Sommario della lezione Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 1/33 Sommario della lezione Ancora sui cammini minimi: Cammini minimi in grafi con archi di costo negativo Algoritmi

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati schifano@fe.infn.it Laurea di Informatica - Università di Ferrara 2011-2012 [1] Strutture dati Dinamiche: Le liste Una lista è una sequenza di elementi di un certo tipo in cui è possibile aggiungere e/o

Dettagli

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona e e Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Sommario e ed implementazione in Java Visita di un grafo e e Concetti di base Struttura

Dettagli

Reti sequenziali e strutturazione firmware

Reti sequenziali e strutturazione firmware Architettura degli Elaboratori, a.a. 25-6 Reti sequenziali e strutturazione firmware Alla parte di corso sulle reti sequenziali è apportata una sensibile semplificazione rispetto a quanto contenuto nel

Dettagli

Alberi binari. Ilaria Castelli castelli@dii.unisi.it A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione

Alberi binari. Ilaria Castelli castelli@dii.unisi.it A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione Alberi binari Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/2010 I. Castelli Alberi binari, A.A. 2009/2010 1/20 Alberi binari

Dettagli

Algoritmi per la Visualizzazione. Disegno 2D ortogonale. Disegno ortogonale 2D (1) Disegno ortogonale 2D (2)

Algoritmi per la Visualizzazione. Disegno 2D ortogonale. Disegno ortogonale 2D (1) Disegno ortogonale 2D (2) Algoritmi per la visualizzazione DISEGNO DI GRAFI: ALCUNI CASI PARTICOLARI Disegno 2D ortogonale Disegno ortogonale 2D () Disegno ortogonale 2D (2) Punto di vista umano: primo criterio per giudicare la

Dettagli

Ricerca Operativa. Claudio Arbib Universitàdi L Aquila. Problemi combinatorici (Gennaio 2006)

Ricerca Operativa. Claudio Arbib Universitàdi L Aquila. Problemi combinatorici (Gennaio 2006) Claudio Arbib Universitàdi L Aquila Ricerca Operativa Problemi combinatorici (Gennaio 2006) Sommario Problemi combinatorici Ottimizzazione combinatoria L algoritmo universale Il metodo greedy Problemi

Dettagli

Ricerca euristica. Funzioni di valutazione euristica. Esempi di euristica. Strategia best-first: esempio. Algoritmo di ricerca Best-First 03/03/15

Ricerca euristica. Funzioni di valutazione euristica. Esempi di euristica. Strategia best-first: esempio. Algoritmo di ricerca Best-First 03/03/15 Ricerca euristica Ricerca euristica Maria Simi a.a. 2014/2015 La ricerca esaustiva non è praticabile in problemi di complessità esponenziale Noi usiamo conoscenza del problema ed esperienza per riconoscere

Dettagli

MATEMATICA DEL DISCRETO elementi di teoria dei grafi. anno acc. 2009/2010

MATEMATICA 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

Dettagli

B-Tree. Struttura dati usata in applicazioni che necessitano di gestire insiemi di chiavi ordinate Una variante (B+-Tree) è diffusa in:

B-Tree. Struttura dati usata in applicazioni che necessitano di gestire insiemi di chiavi ordinate Una variante (B+-Tree) è diffusa in: B-Tree Prof. Rudolf Bayer Struttura dati usata in applicazioni che necessitano di gestire insiemi di chiavi ordinate Una variante (B+-Tree) è diffusa in: Filesystem: btrfs, NTFS, ReiserFS, NSS, XFS, JFS

Dettagli

IL PROBLEMA DELLO SHORTEST SPANNING TREE

IL PROBLEMA DELLO SHORTEST SPANNING TREE IL PROBLEMA DELLO SHORTEST SPANNING TREE n. 1 - Formulazione del problema Consideriamo il seguente problema: Abbiamo un certo numero di città a cui deve essere fornito un servizio, quale può essere l energia

Dettagli

Le Macchine di Turing

Le Macchine di Turing Le Macchine di Turing Come è fatta una MdT? Una MdT è definita da: un nastro una testina uno stato interno un programma uno stato iniziale Il nastro Il nastro è infinito suddiviso in celle In una cella

Dettagli

STRUTTURE NON LINEARI

STRUTTURE NON LINEARI PR1 Lezione 13: STRUTTURE NON LINEARI Michele Nappi mnappi@unisa.it www.dmi.unisa.it/people/nappi Per la realizzazione della presentazione è stato utilizzato in parte materiale didattico prodotto da Oronzo

Dettagli

Algoritmi. a.a. 2013/14 Classe 2: matricole dispari

Algoritmi. a.a. 2013/14 Classe 2: matricole dispari Algoritmi a.a. 2013/14 Classe 2: matricole dispari Marcella Anselmo Presentazioni Info: http://www.di.unisa.it/professori/anselmo/ Orario ricevimento: Lunedì 15-17 Giovedì 12-13 Il mio studio è il n 57

Dettagli

Il problema del commesso viaggiatore

Il problema del commesso viaggiatore ITTS Vito Volterra Progetto ABACUS Ottimizzazione combinatoria Il problema del commesso viaggiatore Studente: Davide Talon Esame di stato 2013 Anno scolastico 2012-2013 Indice 1. Introduzione........................................

Dettagli

Planning as Model Checking Presentazione della Tesina di Intelligenza Artificiale

Planning as Model Checking Presentazione della Tesina di Intelligenza Artificiale Planning as Model Checking Presentazione della Tesina di Intelligenza Artificiale di Francesco Maria Milizia francescomilizia@libero.it Model Checking vuol dire cercare di stabilire se una formula è vera

Dettagli

INFORMATICA 1 L. Mezzalira

INFORMATICA 1 L. Mezzalira INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello

Dettagli

Note su quicksort per ASD 2010-11 (DRAFT)

Note 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

Dettagli

TSP con eliminazione di sottocicli

TSP con eliminazione di sottocicli TSP con eliminazione di sottocicli Un commesso viaggiatore deve visitare 7 clienti in modo da minimizzare la distanza percorsa. Le distanze (in Km) tra ognuno dei clienti sono come segue: 3 5 7-8 9 57

Dettagli

Minimo sottografo ricoprente. Minimo sottografo ricoprente. Minimo albero ricoprente. Minimo albero ricoprente

Minimo sottografo ricoprente. Minimo sottografo ricoprente. Minimo albero ricoprente. Minimo albero ricoprente Minimo sottografo ricoprente Minimo sottografo ricoprente Dato un grafo connesso G = (V, E) con costi positivi sugli archi c e, un minimo sottografo ricoprente è un insieme di archi E E tale che: G = (V,

Dettagli

Codifiche a lunghezza variabile

Codifiche a lunghezza variabile Sistemi Multimediali Codifiche a lunghezza variabile Marco Gribaudo marcog@di.unito.it, gribaudo@elet.polimi.it Assegnazione del codice Come visto in precedenza, per poter memorizzare o trasmettere un

Dettagli

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno UD 3.1b: Costrutti di un Algoritmo Dispense 1.2 I Costrutti di base 13 apr 2010

Dettagli

Problemi computazionali

Problemi computazionali Problemi computazionali Intrattabilità e classi computazionali Decidibilità e Trattabilità Problemi decidibili possono richiedere tempi di risoluzione elevati: Torri di Hanoi Decidibilità e Trattabilità

Dettagli

Il Metodo Branch and Bound

Il Metodo Branch and Bound Il Laura Galli Dipartimento di Informatica Largo B. Pontecorvo 3, 56127 Pisa laura.galli@unipi.it http://www.di.unipi.it/~galli 4 Novembre 2014 Ricerca Operativa 2 Laurea Magistrale in Ingegneria Gestionale

Dettagli

TSP con eliminazione di sottocicli

TSP con eliminazione di sottocicli TSP con eliminazione di sottocicli Un commesso viaggiatore deve visitare 7 clienti in modo da minimizzare la distanza percorsa. Le distanze (in Km) tra ognuno dei clienti sono come segue: 7-8 9 7 9-8 79

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e Strutture Dati Code con priorità Tipo di dato CodaPriorità (1/2) 2 Tipo di dato CodaPriorità (2/2) 3 Tre implementazioni d-heap: generalizzazione degli heap binari visti per l ordinamento heap

Dettagli

La programmazione con vincoli in breve. La programmazione con vincoli in breve

La programmazione con vincoli in breve. La programmazione con vincoli in breve Obbiettivi Introdurre la nozione di equivalenza di CSP. Dare una introduzione intuitiva dei metodi generali per la programmazione con vincoli. Introdurre il framework di base per la programmazione con

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it 18 marzo 2011 Problema basato su 10.5 del libro di testo La CINA (Compagnia Italiana per il Noleggio di Automobili) dispone di

Dettagli

b i 1,1,1 1,1,1 0,1,2 0,3,4

b i 1,1,1 1,1,1 0,1,2 0,3,4 V o Appello // RICERCA OPERATIVA - Corso A (a.a. 9/) Nome Cognome: Corso di Laurea: L C6 LS LM Matricola: ) Si consideri il problema di flusso di costo minimo in figura. Si verifichi se il flusso ammissibile

Dettagli

Il problema del massimo flusso. Preflow-push e augmenting path: un approccio unificante

Il problema del massimo flusso. Preflow-push e augmenting path: un approccio unificante Introduzione Il problema del massimo flusso. Preflow-push e augmenting path: un approccio unificante Il problema del massimo flusso è uno dei fondamentali problemi nell ottimizzazione su rete. Esso è presente

Dettagli

1. Classificazione delle risorse

1. Classificazione delle risorse 1. Classificazione delle risorse Classificazione delle risorse in base alla disponibilità. - Risorse rinnovabili Sono risorse utilizzate per l esecuzione di una attività per tutta la sua durata, ma sono

Dettagli

Approcci esatti per il job shop

Approcci esatti per il job shop Approcci esatti per il job shop Riferimenti lezione: Carlier, J. (1982) The one-machine sequencing problem, European Journal of Operational Research, Vol. 11, No. 1, pp. 42-47 Carlier, J. & Pinson, E.

Dettagli

PROVA FINALE V. AULETTA G. PERSIANO ALGORITMI II - -MAGIS INFO

PROVA FINALE V. AULETTA G. PERSIANO ALGORITMI II - -MAGIS INFO PROVA FINALE V. AULETTA G. PERSIANO ALGORITMI II - -MAGIS INFO 1. Load Balancing Un istanza del problema del load balancing consiste di una sequenza p 1,..., p n di interi positivi (pesi dei job) e un

Dettagli

Programma di Paradigmi e possibili domande. Capitolo 1

Programma di Paradigmi e possibili domande. Capitolo 1 Definizione di macchina astratta Programma di Paradigmi e possibili domande Capitolo 1 Una macchina astratta per il linguaggio L detta ML, è un qualsiasi insieme di algoritmi e strutture dati che permettono

Dettagli

Programmazione dinamica

Programmazione 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)

Dettagli

Corso di Tecniche di Programmazione

Corso di Tecniche di Programmazione Corso di Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica Anno Accedemico 003/004 Proff. Giuseppe De Giacomo, Luca Iocchi, Domenico Lembo Dispensa : Algoritmi di Ordinamento

Dettagli

TECNICHE DI COMPRESSIONE DATI

TECNICHE DI COMPRESSIONE DATI TECNICHE DI COMPRESSIONE DATI COMPRESSIONE DATI La compressione produce una rappresentazione più compatta delle informazioni è come se si usassero meno parole per dire la stessa cosa in modo diverso. Esistono

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

Introduzione ai problemi NP-completi

Introduzione ai problemi NP-completi Corso di Algoritmi e Strutture Dati Introduzione ai problemi NP-completi Nuova versione del capitolo 13 delle dispense (basata sui modelli non deterministici) Anno accademico 2007/2008 Corso di laurea

Dettagli

GESTIONE INFORMATICA DEI DATI AZIENDALI

GESTIONE INFORMATICA DEI DATI AZIENDALI GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy zanoni@volterra.uniroma2.it Rudimenti di programmazione Programming

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla http://www.moreno.marzolla.name/ Ultimo Aggiornamento: 25 giugno 2014 Copyright Copyright 2012, 2013, 2014 Moreno Marzolla. Quest'opera è stata rilasciata

Dettagli

A i è un aperto in E. i=1

A i è un aperto in E. i=1 Proposizione 1. A è aperto se e solo se A c è chiuso. Dimostrazione. = : se x o A c, allora x o A = A o e quindi esiste r > 0 tale che B(x o, r) A; allora x o non può essere di accumulazione per A c. Dunque

Dettagli

Algoritmi. Maurizio Palesi. Maurizio Palesi 1

Algoritmi. Maurizio Palesi. Maurizio Palesi 1 Algoritmi Maurizio Palesi Maurizio Palesi 1 Cos è Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Un algoritmo è un metodo per la soluzione

Dettagli

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca

Dettagli

Complessità Computazionale

Complessità Computazionale Complessità Computazionale Analisi Algoritmi e pseudocodice Cosa significa analizzare un algoritmo Modello di calcolo Analisi del caso peggiore e del caso medio Esempio di algoritmo in pseudocodice INSERTION

Dettagli

5. Problemi di Ottimizzazione e Programmazione Matematica

5. Problemi di Ottimizzazione e Programmazione Matematica Dispense del corso di Ottimizzazione Combinatoria (IN440) 5. Problemi di Ottimizzazione e Programmazione Matematica Marco Liverani Università degli Studi Roma Tre Dipartimento di Matematica e Fisica Corso

Dettagli

Corso di Calcolo Numerico

Corso 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

Dettagli

40 Algoritmi sui Grafi

40 Algoritmi sui Grafi Università degli Studi di Napoli Parthenope Corso di Laurea in Informatica A.A 2014/15 PROGETTO PROGRAMMAZIONE III 40 Algoritmi sui Grafi Relatore: Prof. Raffaele Montella Studente: Diego Parlato Matricola:

Dettagli

La struttura dati ad albero binario

La struttura dati ad albero binario La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,

Dettagli

2 Formulazione dello shortest path come problema di flusso

2 Formulazione dello shortest path come problema di flusso Strumenti della Teoria dei Giochi per l Informatica A.A. 2009/10 Lecture 20: 28 Maggio 2010 Cycle Monotonicity Docente: Vincenzo Auletta Note redatte da: Annibale Panichella Abstract In questa lezione

Dettagli

Algoritmi enumerativi

Algoritmi enumerativi Capitolo 7 Algoritmi enumerativi Come abbiamo visto, né gli algoritmi greedy né quelli basati sulla ricerca locale sono in grado, in molti casi, di garantire l ottimalità della soluzione trovata. Nel caso

Dettagli

Appunti di Algoritmi e Strutture Dati. Alberto Carraro

Appunti di Algoritmi e Strutture Dati. Alberto Carraro Appunti di Algoritmi e Strutture Dati Alberto Carraro 2 Contents 1 Introduzione informale agli algoritmi 7 1.1 I numeri di Fibonacci...................................... 7 1.1.1 Algoritmo numerico...................................

Dettagli

3. Gli algoritmi di ottimizzazione.

3. Gli algoritmi di ottimizzazione. Marcello Salmeri - Progettazione Automatica di Circuiti e Sistemi Elettronici Capitolo 3-3. Gli algoritmi di ottimizzazione. I grafi. La teoria dei grafi è un comodo strumento per la definizione e la formalizzazione

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Alberi Binari di Ricerca (BST) Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Alberi Binari di Ricerca (Binary Search Trees BST)

Dettagli

Linguaggi formali e compilazione

Linguaggi formali e compilazione Linguaggi formali e compilazione Corso di Laurea in Informatica A.A. 2015/2016 Linguaggi formali e compilazione Elementi generali Un parser generico di tipo procede operando una sequenza di riduzioni a

Dettagli