Grafi. V = {a, b, c, d} E = {(a, b), (a, c), (c, a), (d, d), (b, d)}
|
|
|
- Dante Quaranta
- 7 anni fa
- Visualizzazioni
Transcript
1 Grafi Grafo orientato (o diretto) = (V,E) V = nodi o vertici - E = archi (edges) V = {a, b, c, d} E = {(a, b), (a, c), (c, a), (d, d), (b, d)} archi uscenti da un nodo x: (x, y) archi incidenti su un nodo x: (y, x) nodi adiacenti a un nodo x o successori di x: {y : (x, y) E}. Se y è adiacente a x: x y predecessori di un nodo x: {y : (y, x) E} grado di ingresso di un nodo x: numero di archi incidenti su x. grado di uscita di un nodo x: numero di archi uscenti da x. sorgente nodo senza predecessori (grado di ingresso 0) pozzo nodo senza successssori (grado di uscita 0) IX-1
2 Cammino da un nodo X a un nodo Y Sequenza di nodi (a 0,..., a n ) tale che: 1. a 0 = X 2. a n = Y 3. per ogni i = 0,..., n 1: (a i, a i+1 ) E. Lunghezza del cammino n (numero degli archi). Y è raggiungibile da X se esiste un p cammino da X a Y: X p Y Cammino semplice: tutti i vertici sono distinti. Esempio G = (V,E); Cammini da 1 a 6: V = {1,2,3,4,5,6,7}; 1, 2, 6 1, 4, 6 E = {(1,2),(1,3),(1,4),(2,6),(3,5),(4,6),(6,5),(6,7),(5,4)} 1, 3, 5, 4, 6 1, 4, 6, 5, 4, 6 IX-2
3 Semicammino da X a Y Sequenza di nodi (a 0,..., a n ) tale che 1. a 0 = X 2. a n = Y 3. per ogni i = 0,..., n 1: (a i, a i+1 ) E oppure (a i+1, a i ) E. Semicammino da 1 a 6: 1, 3, 5, 6 Un grafo è fortemente connesso sse per ogni X, Y V esiste un cammino da X a Y ; debolmente connesso sse per ogni X, Y V esiste un semicammino da X a Y fortemente connesso debolmente connesso debolmente connesso IX-3
4 Cicli Cammino di lunghezza 1 (almeno un arco) che inizia e termina in uno stesso nodo b a c Sequenza di nodi (a 0,...,a n ) tale che 1. a 0 = a n 2. n 1 3. per ogni i = 0,..., n 1: (a i, a i+1 ) E. Due cammini (a 0,..., a i,..., a n ) e (a i,...,a n, a 0,..., a i 1 ) formano lo stesso ciclo Ciclo semplice (a 0,...,a n ): a 1,..., a n sono tutti distinti. Cappio ciclo di lunghezza 1 Grafo semplice senza cappi Grafo aciclico senza cicli IX-4
5 Grafi non orientati L insieme degli archi rappresenta una relazione R simmetrica: R(x, y) R(y, x) L insieme E degli archi è costituito da coppie non ordinate di vertici: {x, y}, con x, y E e x y In un grafo non orientato i cappi sono proibiti Usiamo ugualmente la notazione (x, y), con la convenzione che (x, y) e (y, x) denotano lo stesso arco. Cammini e cicli in un grafo non orientato La relazione di raggiungibilità mediante un cammino è una relazione di equivalenza (riflessiva, simmetrica e transitiva) Ciclo: cammino (a 0,..., a n ) tale che n 3; la lunghezza del cammino (numero di archi) è 3; a 0 = a n ; a 1,..., a n sono tutti distinti. Quindi n n, n n, m, n non sono cicli Componenti connesse Grafo connesso: ogni coppia di vertici è connessa da un cammino. Componente connessa di un grafo: classe di equivalenza dei nodi rispetto alla relazione di raggiungibilità. IX-5
6 Rappresentazione dei grafi mediante liste di adiacenza Un array Adj di lunghezza length[adj] = V Per u V : Adj[v] è una lista con tutti i vertici u tali che (v, u) E È un modo compatto per la rappresentazione di grafi sparsi: E << V 2 Somma delle lunghezze di tutte le liste di adiacenza: E grafi orientati; 2 E grafi non orientati Memoria necessaria: O(V + E) IX-6
7 Rappresentazione dei grafi mediante matrice di adiacenza Rappresentazione preferita per grafi densi: E V 2 oppure quando si vuole essere in grado di dire rapidamente se esiste un arco che collega due nodi Matrice A = (a ij ) di dimensione V V Riga i: successori del nodo i Memoria necessaria: Θ( V 2 ) a ij = 1 se (i, j) E 0 altrimenti Tuttavia in un grafo non orientato la matrice di adiacenza è simmetrica. In alcune applicazioni può convenire memorizzare soltanto i dati che compaiono solo sopra la diagonale principale. IX-7
8 Grafi pesati Ad ogni arco è associato un peso w : E IR Rappresentazione liste di adicenza il peso w(u, v) dell arco (u, v) è memorizzato insieme al nodo v nella lista di adiacenza di u IX-8
9 Grafi pesati (II) matrice di adiacenza il peso w(u, v) dell arco (u, v) è memorizzato in posizione a uv (riga u, colonna v della matrice di adiacenza), al posto di IX-9
10 Algoritmi di visita A partire da un dato nodo iniziale, analizzare tutti i nodi raggiungibili dal nodo dato Attenzione ai cicli Visita in ampiezza : Breadth First Search (BFS): se il nodo di partenza start non è già stato visitato allora si analizza start, si visitano tutti i suoi successori (ricordando che start è già stato considerato), poi tutti i successori dei successori di start, e così via. - visita in ampiezza il grafo G partendo dal nodo START: - colora tutti i nodi di bianco - inserisci START nella coda e coloralo di grigio; - finche la coda non e vuota: - estrai il primo elemento X dalla coda - analizza X - metti nella coda tutti i successori bianchi di X e colorali di grigio Visita in profondità: Depth First Search (DFS): se il nodo di partenza start non è stato già visitato, si analizza start e, per ogni successore x di start, si visita, con lo stesso metodo, il grafo a partire da x, ricordando che start è già stato visitato. - visita in profondita il grafo G partendo dal nodo START: - analizza START e marcalo "scoperto" (colore grigio) - finche ci sono successori di START non ancora visitati (non grigi): - sia X il prossimo - visita in profondita G a partire da X - colora di nero START (visita completata) IX-10
11 Visita di un grafo - Esempio Bisogna ricordare i nodi già visitati per la possibile esistenza di cammini ciclici Visita in ampiezza i nodi in attesa di essere visitati vengono memorizzati in una coda Visita in profondità i successori di un nodo vengono visitati ad uno ad uno mediante chiamate ricorsive. Equivalentemente, i nodi in attesa di essere visitati vengono memorizzati in una pila Esempio La colorazione dei nodi è il meccanismo che evita di inserire uno stesso nodo più volte nella struttura pila o coda. Di conseguenza nessun nodo viene visitato più di una volta PROFONDITA nodi visitati PILA AMPIEZZA nodi visitati CODA ,3,4 1 2,3,4 1,2 6,3,4 1,2 3,4,6 1,2,6 7,5,3,4 1,2,3 4,6,5 1,2,6,7 5,3,4 1,2,3,4 6,5 1,2,6,7,5 3,4 1,2,3,4,6 5,7 1,2,6,7,5,3 4 1,2,3,4,6,5 7 1,2,6,7,5,3,4 1,2,3,4,6,5,7 IX-11
12 Implementazione mediante liste di adiacenza Operazione fondamentale: Succ(Adj,x): riporta la lista dei successori del nodo x nel grafo rappresentato dall array Adj. SUCC(Adj,x) 1. return Adj[x] Visita in ampiezza Per ricordare i nodi già inseriti nella coda e per segnalare i nodi già visitati, utilizziamo un array color, tale che: color[u] = white se u non è stato visitato né inserito nella coda gray se u è stato inserito nella coda, ma non ancora visitato black se u è stato visitato Visita in profondità Per ricordare i nodi scoperti : da cui è partita una visita in profondità e che quindi sono stati inseriti nella pila di attivazione delle chiamate ricorsive: color[u] = white se u non è stato visitato gray se da u è partita una visita in profondità black se u è stato completamente visitato (con tutti i suoi successori) IX-12
13 Visita in Ampiezza del grafo Adj a partire da s: Algoritmo s può essere un qualunque nodo del grafo -Inizializzazione di color[u]: colorare tutti i vertici di bianco eccetto s, che viene colorato di grigio -Inizializzazione della coda Q: inserimento di s -Ciclo fino a che Q non e vuota: estrarre u dalla coda per ogni vertice v adiacente a u: se v e bianco, colorarlo di grigio e inserirlo nella coda visitare u e colorarlo di nero IX-13
14 Visita in Ampiezza del grafo rappresentato come lista di adiacenza Adj: Pseudocodifica BFS(Adj,s) ;; s e il nodo di partenza 1. for ogni vertice u, eccetto s 2. do color[u] <- white 3. color[s] <- gray 4. ;; inizializzazione della coda 5. QUEUE-EMPTY(Q) 6. ENQUEUE(Q,s) 7. while NOT(QUEUE-NULL(Q)) ;; estrazione del primo elemento 8. do u <- DEQUEUE(Q) ;; inserimento dei successori di u 9. x <- FIRST(SUCC(Adj,u)) 10. while x!= NIL 11. do k <- KEY(x) 12. if color[k] = white 13. then color[k] <- gray 14. ENQUEUE(Q,k) 15. x <- NEXT(x) 16. visita u 17. color[u] <- black IX-14
15 Visita in Ampiezza del grafo rappresentato come Matrice di Adiacenza: Pseudocodifica Sia A la matrice di adiacenza che rappresenta il grafo G BFS(A,s) ;; s e il nodo di partenza 1. for ogni vertice u, eccetto s 2. do color[u] <- white 3. color[s] <- gray 4. ;; inizializzazione della coda 5. QUEUE-EMPTY(Q) 6. ENQUEUE(Q,s) 7. while NOT(QUEUE-NULL(Q)) ;; estrazione del primo elemento 8. do u <- DEQUEUE(Q) ;; inserimento dei successori di u 9. for i=1 to n 10. do if A[u,i]!=0 and color[i] = white 11. then color[i] <- gray 12. ENQUEUE(Q,i) 13. visita u 14. color[u] <- black L algoritmo di visita non cambia: cambia solo il modo in cui si esaminano i successori di u nel grafo IX-15
16 Applicazione della visita in ampiezza: calcolo dei cammini minimi Distanza di v da u minimo numero di archi in un cammino da v a u L algoritmo calcola la distanza da s (nodo sorgente) di tutti i nodi u raggiungibili da s, e memorizza i cammini minimi corrispondenti Risultati negli array d e p: d[u] distanza di u da s ( se u non è raggiungibile da s); p[u] il padre (predecessore) di u nel cammino minimo da s a u (NIL se u non è raggiungibile da s o u = s). Fissato il nodo padre si visita la lista dei suoi successori Così ci si ricorda del padre per aggiornare l array dei predecessori IX-16
17 Visita in ampiezza con calcolo delle distanze: Pseudocodifica BFS(Adj,s) 1. for ogni vertice u, eccetto s 2. do color[u] <- white 3. d[u] <- infinito 4. p[u] <- NIL 5. color[s] <- gray 6. d[s] < p[s] <- NIL 8. QUEUE-EMPTY(Q) 9. ENQUEUE(Q,s) 10. while NOT(QUEUE-NULL(Q)) 11. do u <- DEQUEUE(Q) 12. x <- FIRST(SUCC(Adj,u)) 13. while x!= NIL 14. do k <- KEY(x) 15. if color[k] = white 16. then color[k] <- gray 17. d[k] <- d[u] p[k] <- u 19. ENQUEUE(Q,k) 20. x <- NEXT(x) 21. color[u] <- black IX-17
18 Complessità della visita in ampiezza Considerazioni 1. L inizializazione degli array color, d e p (righe 1 7) richiede un tempo O(V ). L inizializzazione della coda (righe 8 e 9) richiede un tempo O(1). 2. Poiché dopo l inizializzazione nessun vertice verrà più colorato di bianco, il test della riga 15 garantisce che ogni vertice è inserito nella coda al massimo una volta, e di conseguenza che ne venga estratto al massimo una volta. Ciascun inserimento ed estrazione (righe 11 e 19) richiede tempo O(1), quindi: complessivamente il tempo dedicato alle operazioni sulla coda è O(V ). 3. La lista di adiacenza di ogni vertice viene scandita solo quando il vertice è estratto dalla coda (riga 11): al massimo una volta. Complessivamente poiché la somma delle lunghezze delle liste di adiacenza è Θ(E), il tempo speso per la scansione di tutte le liste di adiacenza è O(E). 4. Il tempo per colorare un nodo e per visitarlo (righe 16 18) è O(1). Ciascun nodo viene visitato al massimo una volta (quando è inserito nella coda). Complessivamente la visita richiede tempo O(V ). Il tempo totale di esecuzione dell algoritmo BFS è O(V + E) IX-18
19 Visita in profondità: considerazioni Di solito si utilizza associando a ciascun vertice del grafo delle informazioni temporali: tempi di inzio e fine visita dei vertici. d[u] registra il momento in cui il vertice u viene scoperto corrispnde al momento della colorazione di grigio f[u] registra il momento in cui la visita del vertice u (e di tutti i nodi raggiungibili da v) è completata corrispnde al momento della colorazione di nero le informazioni temporali sono interi compresi tra 1 e 2 V : ad ogni vertice è assegnato un tempo d inizio e uno di fine visita Per ogni vertice u si ha: d[u] < f[u] Il vertice u è: white prima di d[u] Inizialmente i vertici sono tutti bianchi gray tra d[u] e f[u] Quando un vertice u viene scoperto, diventa grigio: inizia la visita di u black dopo f[u] Quando la visita di u termina (tutti i successori sono stati visitati), u diventa nero. time è la variabile che registra i tempi IX-19
20 Visita in profondità generale: Algoritmo DFS(Adj,s) 1. for ogni vertice u 2. do color[u] <- white 3. p[u] <- NIL 4. time <-0 5. for ogni vertice u 6. do if color[u] = white 7. then DFS-visit(u) Vengono visitati tutti i nodi del grafo DFS-visit(u) 1. color[u] <- gray 2. time <- time d[u] <- time ;; visita in profondita a partire dal nodo u 4. ;; visita di tutti gli archi adiacenti a u 5. v <- FIRST(SUCC(Adj,u)) 6. while v!= NIL 7. do k <- KEY(v) 8. if color[k] = white 9. then p[v] <- u 10. DFS-visit(k) 11. v <- NEXT(v) 12. color[u] <- black 13. time <- time f[u] <- time IX-20
21 Complessità asintotica della visita in profondità assumendo che la visita di un nodo richieda tempo costante DFS: Ogni vertice è colorato di bianco esattamente una volta (inizializzazione). Complessivamente il tempo è Θ(V ). DFS-visit: Durante DFS-visit(u), il ciclo di scansione della lista dei successori di u viene eseguito Adj[u] volte. Il test alla riga 8 assicura che DFS-visit è richiamata al più una volta per ogni nodo, dato che il nodo viene subito colorato di grigio. Complessivamente la visita dei nodi richiede tempo O(V ). Poiché la somma delle lunghezze delle liste di adiacenza è Θ( E ), il costo complessivo per l esecuzione delle linee 6-11 è Θ( E ). tutte le altre istruzioni hanno costo Θ(1) Il tempo di esecuzione di DFS è O(V + E) IX-21
22 Applicazione della visita in profondità: Ordinamento topologico di grafi orientati aciclici (dag) Un ordinamento topologico di un dag G è un ordinamento lineare dei vertici tale che se (u, v) è un arco in G, allora u viene prima di v. 11/16 slip calzini 17/18 orologio 12/15 6/7 pantaloni cintura camicia 1/8 cravatta scarpe 13/14 9/10 3/4 giacca 2/5 calzini slip pantaloni scarpe orologio camicia cintura cravatta giacca 17/18 11/16 12/15 13/14 9/10 1/8 6/7 2/5 3/4 Un algoritmo di ordinamento topologico si basa sulla visita in profondità del grafo: per ciascun nodo viene registrato il tempo di inizio e fine visita. L ordinamento è per tempi decrescenti di fine visita. Non è necessariamente unico. IX-22
23 Ordinamento topologico - Pseudocodifica La lista L contiene, alla fine della visita, un ordinamento topologico del grafo Non appena finisce la visita di un nodo, esso viene inserito in L DFS(G) 1. for ogni vertice u V [G] 2. do color[u] white 3. π[u] NIL 4. time 0 5. L LIST-EMPTY() 6. for ogni vertice u V [G] 7. do if color[u] = white 8. then DFS-visit(u, L) 9. return L DFS-visit(u,L) 1. color[u] gray 2. d[u] time time for ogni vertice v adiacente a u 4. do if color[v] = white 5. then π[v] u 6. DFS-visit(v, L) 7. color[u] black 8. inserire u in testa a L 9. f[u] time time + 1 IX-23
24 Esercizi 1. Scrivere un programma che, data la rappresentazione di un grafo G e un nodo n di G, verifichi se n è un pozzo. 2. Scrivere un programma che, data la rappresentazione di un grafo G e un nodo n di G, riporti il grado di ingresso di n. 3. Scrivere un programma che, data la rappresentazione di un grafo G e due nodi s e g di G, verifichi se g è raggiungibile da s, visitando il grafo a partire da s. 4. Scrivere un programma che, data la rappresentazione di un grafo G e un nodo n di G, determini se esiste in G un ciclo su n. 5. Scrivere lo pseudo-codice per l algoritmo DFS nel caso della rappresentazione mediante matrice di adiacenza. 6. Illustrare l algoritmo di ordinamento topologico. Descrivere l algoritmo senza scrivere la pseudocodifica. Dire qual è l ordinamento che si ottiene a partire dal nodo etichettato con a (scrivendo su questo testo i tempi di visita). a i b c h l d e m f IX-24
Algoritmi e Strutture Dati
Introduzione ai grafi Grafi: Definizione e Algoritmi di visita Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2007/08 Introduzione ai
Sommario. Rappresentazione dei grafi. Ordinamento topologico. Visita in ampiezza Visita in profondità
Visite Grafi Sommario Rappresentazione dei grafi Visita in ampiezza Visita in profondità Ordinamento topologico Visita in ampiezza La visita in ampiezza breadth-first-search (BFS) di un grafo dato un vertice
Esempi. non. orientato. orientato
Definizione! Un grafo G = (V,E) è costituito da un insieme di vertici V ed un insieme di archi E ciascuno dei quali connette due vertici in V detti estremi dell arco.! Un grafo è orientato quando vi è
Visite in Grafi BFS e DFS
Visite in Grafi BFS e DFS Visita di un Grafo Obiettivo: Visitare una sola volta tutti i nodi del grafo. Es.: visitare un porzione del grafo del Web Difficoltà: Presenza di cicli: Marcare i nodi visitati
Grafi: visita generica
.. Grafi: visita generica Una presentazione alternativa (con ulteriori dettagli) Algoritmi di visita Scopo: visitare tutti i vertici di un grafo (si osservi che per poter visitare un vertice occorre prima
Algoritmi e Strutture Dati Grafi. Daniele Loiacono
lgoritmi e Strutture ati Grafi Riferimenti 2 Questo materiale è tratto dalle trasparenze del corso lgoritmi e Strutture ati del prof. lberto Montresor dell Università di Trento. (http://www.dit.unitn.it/~montreso/asd/index.shtml)
Problema del cammino minimo
Algoritmi e Strutture di Dati II Problema del cammino minimo Un viaggiatore vuole trovare la via più corta per andare da una città ad un altra. Possiamo rappresentare ogni città con un nodo e ogni collegamento
Grafi diretti. Un grafo diretto (o grafo orientato) G è una coppia (V,E) dove. V è u n i n s i e m e d i nodi (o vertici);
Algoritmi e Strutture di Dati II 2 Grafi diretti Un grafo diretto (o grafo orientato) G è una coppia (V,E) dove V è u n i n s i e m e d i nodi (o vertici); E µ V V è u n i n s i e m e d i archi. Denotiamo
Grafi: ordinamento topologico
.. Grafi: ordinamento topologico Che cosa e e come si calcola Che cosa e un ordinamento topologico F. Damiani - Alg. & Lab. 04/05 Una definizione di ordinamento topologico Definizione. Funzione σ: V {1,
Grafi: definizioni e visite
Grafi: definizioni e visite Grafi (non orientati) Grafo (non orientato): G = (V, E) V = nodi (o vertici) E = archi fra coppie di nodi distinti. Modella relazioni fra coppie di oggetti. Parametri della
GRAFI. Cosa sono Grafi non orientati Grafi orientati Grafi pesati Alberi Automi!
G R A F I 1 GRAFI Cosa sono Grafi non orientati Grafi orientati Grafi pesati Alberi Automi! 2 cip: cip: Pallogrammi Pallogrammi GRAFI: cosa sono I grafi sono una struttura matematica fondamentale: servono
Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione
Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica (IN0 Fondamenti) Grafi e alberi: introduzione Marco Liverani ([email protected])
Esercizi Union-Find e su Grafi. Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 0 07 Esercizi Union-Find e su Grafi. Ugo Vaccaro. Esercizio: Scrivere pseudocodice per Make-Set, Union, e Find-Set usando la rappresentazione attraverso liste
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Capitolo 12 Grafi e visite di grafi Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione Un grafo G=(V,E) consiste in: - un insieme V di vertici (o nodi) - un insieme
Cammini Minimi. Algoritmo di Dijkstra
Cammini Minimi Algoritmo di Dijkstra Cammino in un grafo Dato un grafo G=(V,E), un Cammino (Percorso) in G è un insieme di vertici v 1, v 2,.., v k tali che (v i, v i+1 ) E v 1 v 2 v 3 v k In un grafo
Introduzione ai grafi. Introduzione ai grafi p. 1/2
Introduzione ai grafi Introduzione ai grafi p. 1/2 Grafi Un grafo G é costituito da una coppia di insiemi (V,A) dove V é detto insieme dei nodi e A é detto insieme di archi ed é un sottinsieme di tutte
Quarto allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale
Quarto allenamento Olimpiadi Italiane di Informatica - Selezione territoriale Luca Chiodini [email protected] - [email protected] 30 marzo 2017 Programma 1. Lettura e analisi di un problema 2.
Depth-first search. Visita in profondità di un grafo Algoritmo Esempio Complessità dell algoritmo Proprietà Ordinamento topologico
Depth-first search Visita in profondità di n grafo Algoritmo Esempio Complessità dell algoritmo Proprietà Ordinamento topologico Depth-first search Dato n grafo G=(V,E) e n specifico ertice s chiamato
Terzo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale
Terzo allenamento Olimpiadi Italiane di Informatica - Selezione territoriale Luca Chiodini [email protected] - [email protected] 22 marzo 2016 Programma 1. Lettura di un problema tratto dalle
Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Grafi: visite Una breve presentazione Visite di grafi Scopo e tipi di visita Una visita (o attraversamento) di un grafo G permette di esaminare i nodi e gli archi di G in modo sistematico Problema di base
Algoritmi e Strutture Dati
Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]
Dati e Algoritmi 1: A. Pietracaprina. Grafi (II parte)
Dati e Algoritmi 1: A. Pietracaprina Grafi (II parte) 1 Breath-First Search (algoritmo iterativo) Si assume una rappresentazione tramite liste di adiacenza. L ordine con cui si visitano i vicini di un
Progettazione di algoritmi
Progettazione di algoritmi Discussione dell'esercizio [vincoli] Prima di tutto rappresentiamo il problema con un grafo G: i nodi sono le n lavorazioni L 1, L 2,, L n, e tra due nodi L h, L k c'è un arco
Note per la Lezione 22 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 0 09 Note per la Lezione Ugo Vaccaro Nella lezione scorsa abbiamo introdotto la vista in ampiezza di grafi. Essenzialmente, esso è un metodo per esplorare in
Grafi (orientati): cammini minimi
.. Grafi (orientati): cammini minimi Una presentazione alternativa (con ulteriori dettagli) Un algoritmo greedy per calcolare i cammini minimi da un vertice sorgente in un grafo orientato e pesato, senza
GRAFI. fig.1 - GRAFI (1) Si avvisa il lettore che certe definizioni che verranno date differiscono da quelle presenti in letteratura.
GRAFI 1. Definizioni, terminologia, esempi e applicazioni (1) Un grafo orientato (o diretto o di-grafo) G è una coppia (V,E) dove V è un insieme non vuoto ed E una relazione binaria su V, E V V, ossia
Esercizi svolti a lezione
Esercizi svolti a lezione Problema 1 In un corso di laurea sono previsti un certo numero di esami obbligatori. Esistono inoltre dei vincoli di propedeuticità: se un esame A è propedeutico ad un esame B
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
Problema dell albero di cammini minimi (SPT, Shortest Path Tree) o problema dei cammini minimi :
Per almeno una delle soluzioni ottime { P i, i r } del problema generalizzato, l unione dei cammini P i forma un albero di copertura per G radicato in r e orientato, ossia un albero la cui radice è r i
