GRAFI - DEFINIZIONI
Grafo orientato o diretto
- Un grafo orientato (o diretto o di-grafo) G è una coppia (V,E), dove
- V è l'insieme (finito) dei vertici
- E = {(vi, vj); vi, vj ∈ V} è l'insieme (finito) degli archi, che corrisponde ad una relazione binaria su V.
- I grafi orientati si rappresentano spesso disegnando
- I vertici sotto forma di cerchi
- Gli archi sotto forma di frecce.
Grafo non orientato
- Un grafo non orientato è ancora una coppia G=(V,E), ma l'insieme E è costituito in questo caso da coppie non ordinate di vertici.
- Nei grafi non orientati gli archi sono usualmente rappresentati con linee.
- (vi, vj)≡(vj, vi): Grafo semplice
Grado
- In un grafo non orientato il grado di un vertice è il numero di archi incidenti.
- In un grafo orientato:
- Il grado entrante è il numero di archi entranti
- Il grado uscente è il numero di archi uscenti
- Il grado è la somma del grado entrante e del grado uscente.
- Un vertice con grado 0 si dice isolato.
GRAFI - DEFINIZIONI
Grafo orientato o diretto
- Un grafo orientato (o diretto o di-grafo) G è una coppia (V,E), dove
- V è l'insieme (finito) dei vertici
- E = {(vi, vj); vi, vj ɛ V} è l'insieme (finito) degli archi, che corrisponde ad una relazione binaria su V.
- (vi, vj) ≠ (vj, vi)
- I grafi orientati si rappresentano spesso disegnando
- I vertici sotto forma di cerchi
- Gli archi sotto forma di frecce.
Grafo non orientato
- Un grafo non orientato è ancora una coppia G=(V,E), ma l'insieme E è costituito in questo caso da coppie non ordinate di vertici.
- Nei grafi non orientati gli archi sono usualmente rappresentati con linee.
- (vi, vj)=(vj, vi): Grafo semplice
Grado
- In un grafo non orientato il grado di un vertice è il numero di archi incidenti.
- In un grafo orientato:
- Il grado entrante è il numero di archi entranti
- Il grado uscente è il numero di archi uscenti
- Il grado è la somma del grado entrante e del grado uscente.
- Un vertice con grado 0 si dice isolato.
Foresta e albero
- Un grafo non orientato aciclico si dice foresta.
- Un grafo non orientato aciclico connesso si dice albero.
- Multigrafo: E è un multinsieme (gli archi possono essere di "tipo" diverso, ad es. relazioni di parentela e di amicizia nello stesso grafo)
- Pseudografo: E contiene anche coppie (vi, vi) → cappi
- Circuito in un grafo: v1,v2,...,vk(vi, vi+1) ∈ E, v1= vk
- Ciclo in un grafo: circuito con v1≠ v2 ≠ .... ≠ vk
Grafo pesato:
- Ad ogni arco ek è associato un valore reale wk
RAPPRESENTAZIONE DEI GRAFI
Rappresentazioni
Esistono due modi principali per rappresentare un grafo G=(V,E):
- Tramite liste di adiacenza
- ogni vertice è associato con la lista dei vertici adiacenti.
- Lista di adiacenza può essere una tabella o una lista concatenata
- Tramite matrici di adiacenza.
- Matrice di adiacenza:ah=1 se (vi, vj) ∈ E,ah=0 altrimenti
- Matrice di incidenza:ah=1 se vi ∈ eh, cioè se l'arco eh incide sul nodo viah=0 altrimenti
Liste di adiacenza
- Dato un grafo G=(V,E), esso può essere rappresentato tramite un vettore A, il cui elemento A[i] contiene il puntatore alla lista dei vertici adiacenti al vertice i.
Limiti
- Il principale limite della rappresentazione tramite liste di adiacenza consiste nella difficoltà nel verificare se esiste un arco tra il vertice u ed il vertice u'.
- In tal caso è infatti necessario scandire l'intera lista dei vertici adiacenti a u (o a u').
Matrice di adiacenza
- Consiste in una matrice di dimensione |V| * |V|.
- L'elemento aij vale 1 se (i,j)∈E, 0 altrimenti.
- Nel caso di grafi non orientati la matrice è simmetrica.
- Nel caso di grafi pesati l'elemento aij, qualora non sia nullo, assume il valore del peso dell'arco anziché essere “solo” 1.
Esempi
Confronto
- Rispetto alla rappresentazione tramite liste di adiacenza, quella tramite matrice di adiacenza:
- Richiede più memoria (a meno che il grafo non sia particolarmente denso)
- Permette un accesso più efficiente alla topologia del grafo.
Vantaggi e Svantaggi
- Lista di adiacenza: O(m)
- Vantaggi: permette di scorrere i nodi adiacenti a v in O(grado(v))
- Svantaggi: inserimenti e cancellazioni su liste concatenate in O(grado(v))
- Matrice di adiacenza: O(n2)
- Vantaggi: Inserimenti e cancellazioni in O(1)
- Svantaggi: permette di scorrere i nodi adiacenti a v in O(n)
ALGORITMI DI VISITA
Visita di un Grafo
- L'operazione corrispondente ad esplorare un grafo a partire da un vertice dato (denominato sorgente) toccando tutti i vertici da questo raggiungibili si definisce visita.
- Esistono due principali algoritmi di visita:
- Visita in ampiezza
- Visita in profondità
- Difficoltà:
- Presenza di cicli
- Presenza di nodi isolati
Visita in ampiezza
La visita in ampiezza (o breadth-first search, BFS) consiste nel visitare i vertici del grafo per livelli:
- l=0, SI={sorgente}
- Si visitano tutti i vertici SI+1 non ancora visitati e adiacenti ad almeno un vertice in SI
- l=l+1
- Si ripete da 2 sino a che SI è vuoto.
Visita in profondità
- La visita in profondità (Depth-First Search, o DFS) segue un approccio opposto a BFS.
- Ad ogni passo si visita un vertice adiacente all'ultimo vertice visitato.
- Quando non ne esistono, si ritorna indietro all'ultimo vertice visitato che abbia vertici adiacenti non visitati, e li si visita.
- La procedura di DFS è normalmente implementata attraverso una procedura ricorsiva.
- La visita procede di tutti gli archi uscenti da un nodo.
- Se tutti i nodi adiacenti sono stati visitati allora si torna al nodo “predecessore”.
- Una volta tornati al nodo di partenza si prosegue da un nodo qualsiasi non visitato.
- I nodi vengono rinumerati secondo l'ordine di visita.
-
Informatica - Appunti
-
Informatica - Appunti
-
Informatica - Appunti parte 1
-
Informatica generale - Appunti