Grafi - definizioni e proprietà
In questa pagina 5
Definizione (grafo). Un grafo ha un insieme di vertici (o nodi) e una collezione di archi (coppie di vertici). È diretto se ogni arco è una coppia ordinata (), non diretto se la coppia è non ordinata (). è una collezione e non un insieme (Insiemi e insieme delle partiCome si descrive un insieme, sottoinsiemi, uguaglianza, insieme delle parti e insiemi finiti e infiniti.Insiemi e insieme delle parti →, Operazioni tra insiemiUnione, intersezione, differenza, complementare e prodotto cartesiano, con le leggi di De Morgan e il legame con la logica.Operazioni tra insiemi →) perché si ammettono archi multipli tra due vertici; un self loop è un arco . Un grafo semplice non ha archi multipli né self loop; un grafo pesato associa pesi a archi e/o vertici.
Esempio. Il grafo non diretto con e ha vertici e archi.
In questo corso si studiano grafi semplici e non diretti (i grafi diretti sono in Grafi diretti e ordinamento topologicoGrafi diretti (archi orientati, grado entrante e uscente, cammini e cicli diretti), visite su grafi diretti e tipi di archi; DAG; ordinamento topologico con l'algoritmo basato sui gradi entranti e con la DFS (reverse postorder), correttezza e costo Theta(n+m); esempio svolto.Grafi diretti e ordinamento topologico →). Esempi: reti sociali, reti stradali, reti di comunicazione (Internet, P2P), web graph, reti biologiche (interazioni tra proteine), molecole, reti di sensori. Il numero di vertici si indica con e quello degli archi con . Gli stessi oggetti compaiono in altre materie: il grafo di un circuito elettrico ha come vertici i nodi e come archi i bipoli (Grafo di una rete ed equazioni indipendentiIl grafo di una rete tiene solo i collegamenti (nodi e lati). Scelto un albero (n−1 lati, connesso, senza maglie), ogni lato di coalbero dà una LKT indipendente e ogni lato d'albero una LKC indipendente: in totale ℓ − n + 1 LKT e n − 1 LKC, che con le ℓ equazioni dei bipoli fanno 2ℓ equazioni per 2ℓ incognite.Grafo di una rete ed equazioni indipendenti →; lì un albero di copertura serve a contare le equazioni di Kirchhoff indipendenti, per i nodi, in accordo con degli alberi più sotto), e la rete Internet è un grafo di router e collegamenti (Tipi di rete e topologieLe reti si classificano per estensione (BAN, WLAN, LAN, MAN, WAN, WSN), per mezzo trasmissivo (aria, fibra, rame, luce visibile) e per topologia: bus (mezzo condiviso, collisioni), stella (nodo centrale, collo di bottiglia), anello (ogni nodo inoltra al successivo), maglia (collegamento diretto tra ogni coppia: $n(n-1)/2$ collegamenti). La scelta dipende da affidabilità, scalabilità, protocollo e mezzo fisico.Tipi di rete e topologie →, Instradamento e inoltroL'inoltro (forwarding) mette il pacchetto sulla strada verso la destinazione, un salto alla volta (hop by hop). Se la destinazione è nella stessa rete del mittente l'inoltro è diretto (si usa l'ARP per il MAC del destinatario), altrimenti è indiretto: il pacchetto va al router successivo (next hop) indicato dalla tabella di instradamento, o al default gateway. Con le netmask: l'inoltro è diretto attraverso l'interfaccia $x$ se $\text{IP(dst)}\ \text{AND}\ \text{NM}(x)=\text{IP}(x)\ \text{AND}\ \text{NM}(x)$; altrimenti si scorre la tabella dalla maschera più lunga (longest prefix match) e si usa il primo match. La riga con rete $0.0.0.0$ e maschera $0.0.0.0$ (default route) corrisponde sempre. L'aggregazione di rotte (route aggregation) riduce la tabella, e nell'inoltro con etichette (MPLS) la tabella si consulta per indice.Instradamento e inoltro →).
Terminologia
Definizione (grado, cammino e componenti connesse)
- Un arco è incidente su e , che sono adiacenti; i vicini di sono i vertici con .
- Il grado è il numero di archi incidenti su . Un vertice di grado è isolato.
- Un cammino è una sequenza di vertici con ; la lunghezza è il numero di archi, (nei grafi pesati, la somma dei pesi). Un ciclo è un cammino con ; è semplice se i vertici sono tutti distinti (a parte primo e ultimo).
- Un sottografo ha , e gli archi di incidono solo su . È di copertura (spanning) se .
- è connesso se per ogni coppia esiste un cammino da a ; altrimenti è disconnesso.
- Le componenti connesse sono una partizione di in sottografi () con: ogni connesso; e (partizioni); nessun arco tra e per . Sono i sottografi connessi massimali; la partizione è unica; connesso . Esempio: vertici con archi , , , hanno tre componenti: con 1 arco, con 3 archi, senza archi. Gradi: hanno grado ; hanno grado ciascuno (ognuno è su due archi del triangolo ); ha grado . Somma dei gradi , con archi.
Esempio. Con e archi : , il vertice è isolato e il grafo ha componenti connesse, e .
Alberi, foreste, spanning tree
- Un albero radicato è un grafo con un vertice radice , un unico padre per ogni , e radice raggiungibile risalendo da ogni vertice (vedi AlberiAlbero radicato (definizione per padre e ricorsiva), terminologia (antenati, discendenti, nodi interni ed esterni, sottoalbero, albero ordinato), profondità, livello, altezza; altezza = massima profondità delle foglie; algoritmi depth e height con costo; somma dei figli = n-1; esempio di algoritmo Omega(n^2) (heightBad).Alberi →).
- Un albero libero è un grafo connesso e senza cicli semplici. Ogni albero radicato è un albero libero; ogni albero libero diventa radicato scegliendo una radice e orientando i legami padre-figlio di conseguenza.
- Una foresta è un grafo senza cicli: un insieme di alberi liberi disgiunti.
- Uno spanning tree di è un sottografo di copertura connesso e senza cicli (un albero libero); esiste solo se è connesso. Una spanning forest è un sottografo di copertura senza cicli: ha un albero per ogni componente connessa.
Proprietà
Sia non diretto e semplice con vertici e archi.
Proprietà (gradi, numero di archi e alberi). P1. . Dimostrazione: ogni arco è contato esattamente due volte, una per estremo (nella somma l'arco compare una volta nel grado di e una volta in quello di ). Conseguenza: la somma dei gradi è pari, quindi il numero di vertici di grado dispari è pari (se ne avessi un numero dispari la somma sarebbe dispari).
P2. , quindi . Dimostrazione: è semplice, perciò è un sottoinsieme delle coppie non ordinate di vertici distinti. Tali coppie sono : si scelgono vertici su senza badare all'ordine (Fattoriale e coefficienti binomialiFattoriale, permutazioni, disposizioni, combinazioni e coefficiente binomiale n su k, con il triangolo di Tartaglia.Fattoriale e coefficienti binomiali →); equivalentemente, ogni vertice può essere unito a altri, e ogni coppia è stata contata due volte, da cui il fattore . Con sono , con sono (grafi completi , ).
P3. Se è un albero, . Dimostrazione: si vede come albero radicato; coincide con le relazioni padre-figlio, che sono (ogni vertice non radice ha un solo padre).
P4. Se è connesso, . Dimostrazione: finché esiste un ciclo si elimina un suo arco: resta connesso, perché ogni cammino che usava quell'arco si può rifare percorrendo il resto del ciclo (il ciclo offre un percorso alternativo tra gli estremi dell'arco). Alla fine è connesso e senza cicli, cioè un albero libero con archi.
P5. Se è una foresta, . Dimostrazione: finché non è connesso si aggiunge un arco tra due componenti diverse : non può creare cicli, perché un ciclo che passasse per il nuovo arco richiederebbe un altro cammino da a , ma e stanno in componenti diverse e quindi non ce n'è nessuno. Alla fine è un albero con archi.
Esempio. Con vertici si ha ; un albero libero ha archi e la somma dei gradi è .
Il grafico riassume le proprietà P2, P3 e P4: un grafo semplice e connesso con vertici ha un numero di archi tra (alberi) e (grafo completo). Un grafo è sparso se è vicino a e denso se è vicino a : la distinzione guida la scelta della rappresentazione (Rappresentazione dei grafiStrutture di base (lista dei vertici LV, lista degli archi LE), liste di adiacenza, matrice di adiacenza; operazioni incidentEdges, opposite, areAdjacent; spazio e tempi a confronto; esempio con un grafo di 5 vertici.Rappresentazione dei grafi →).
Grafico interattivo: Numero di archi di un grafo semplice connesso con n vertici: da n − 1 (albero) a n(n−1)/2 (grafo completo); a n = 20 sono 19 contro 190
Corollario (spanning forest). Un grafo con componenti connesse di vertici ha spanning forest con archi (ogni componente contribuisce con uno spanning tree di archi, per P3). Esempio d'esame: , ; , ; , : il numero massimo di archi in una spanning forest è , indipendentemente dai valori (le prime due componenti sono grafi completi e , la terza ha archi su vertici e quindi contiene almeno un ciclo). Ogni spanning forest che non si può più estendere ha esattamente archi.
Esempio. Con componenti di , e vertici lo spanning forest ha archi.
Problemi tipici su grafi
Visita (traversal) e crawling, connettività, componenti connesse, cammini minimi (navigatore), minimum spanning tree (broadcast efficiente), stima di distanza media/massima (social network). Vedi Visite di grafi - BFS e DFSVisite in ampiezza (BFS) e in profondità (DFS) come design pattern; etichette discovery, cross e back edge; BFS tree e distanze; complessità Theta(n+m) con liste di adiacenza; applicazioni (connettività, componenti, spanning tree, cammini minimi non pesati, cicli, vertici a distanza al più d); esempio svolto su un grafo di 7 vertici.Visite di grafi - BFS e DFS →, Cammini minimi e algoritmo di DijkstraGrafi pesati, lunghezza di un cammino e distanza; sottocammini di un cammino minimo; problema SSSP; algoritmo di Dijkstra con cloud e priority queue, rilassamento degli archi, esempio svolto; correttezza (due lemmi) e complessità O(min(n^2, (n+m) log n)) con lista non ordinata o heap; pesi non negativi.Cammini minimi e algoritmo di Dijkstra → e Minimum spanning treeMinimum spanning tree di un grafo pesato connesso; proprietà del taglio (cut property) con dimostrazione; algoritmo di Kruskal con partizioni (union-find) e algoritmo di Prim con coda con priorità; esempio svolto sullo stesso grafo di Dijkstra; complessità O(m log n).Minimum spanning tree →.
Errori comuni
- Applicare a un grafo connesso qualsiasi: è vero solo per gli alberi; per i connessi vale .
- Contare archi nella spanning forest di un grafo non connesso: sono con componenti.
- Dimenticare che un grafo con un vertice isolato è disconnesso (se ).
- Confondere lunghezza del cammino (archi) con numero di vertici ().
Versione ripasso
- Grafo : diretto (coppie ordinate) o non diretto. è una collezione perché ammette archi multipli; un self loop è un arco . Semplice = niente archi multipli né self loop. Qui si studiano grafi semplici non diretti, con e (per i diretti vedi Grafi diretti e ordinamento topologicoGrafi diretti (archi orientati, grado entrante e uscente, cammini e cicli diretti), visite su grafi diretti e tipi di archi; DAG; ordinamento topologico con l'algoritmo basato sui gradi entranti e con la DFS (reverse postorder), correttezza e costo Theta(n+m); esempio svolto.Grafi diretti e ordinamento topologico →).
- Termini: arco incidente su ; adiacenti; grado = numero di archi incidenti; vertice isolato = grado . Cammino , di lunghezza (somma dei pesi nei grafi pesati); ciclo con , semplice se i vertici sono distinti.
- Sottografo con ed ; di copertura se . è connesso se ogni coppia di vertici è collegata da un cammino.
- Componenti connesse: partizione unica in sottografi connessi massimali, senza archi tra componenti diverse. connesso .
- Esempio: archi , , , e vertice isolato: componenti, ( arco), ( archi), (). Gradi , somma .
- Alberi: albero libero = connesso e senza cicli semplici; ogni albero radicato lo è, e ogni albero libero diventa radicato scegliendo una radice (vedi AlberiAlbero radicato (definizione per padre e ricorsiva), terminologia (antenati, discendenti, nodi interni ed esterni, sottoalbero, albero ordinato), profondità, livello, altezza; altezza = massima profondità delle foglie; algoritmi depth e height con costo; somma dei figli = n-1; esempio di algoritmo Omega(n^2) (heightBad).Alberi →). Foresta = grafo senza cicli, cioè insieme di alberi liberi disgiunti.
- Spanning tree: sottografo di copertura connesso e senza cicli; esiste solo se è connesso. Spanning forest: sottografo di copertura senza cicli, con un albero per componente.
- P1 : ogni arco è contato due volte; quindi il numero di vertici di grado dispari è pari.
- P2 , quindi : le coppie di vertici distinti sono (con sono , con sono ).
- P3 albero: , perché ogni vertice non radice ha un solo padre.
- P4 connesso: : si tolgono archi dai cicli finché non ce ne sono più, e si ottiene un albero con archi.
- P5 foresta: : si aggiungono archi tra componenti diverse senza creare cicli, fino a ottenere un albero.
- Corollario (spanning forest): con componenti di vertici, la spanning forest ha archi. Esempio : , indipendentemente dagli archi delle componenti.
- Densi e sparsi: vicino a oppure a ; questa distinzione guida la scelta della rappresentazione (vedi Rappresentazione dei grafiStrutture di base (lista dei vertici LV, lista degli archi LE), liste di adiacenza, matrice di adiacenza; operazioni incidentEdges, opposite, areAdjacent; spazio e tempi a confronto; esempio con un grafo di 5 vertici.Rappresentazione dei grafi →).
- Problemi tipici: visita, connettività, componenti, cammini minimi, minimum spanning tree (vedi Visite di grafi - BFS e DFSVisite in ampiezza (BFS) e in profondità (DFS) come design pattern; etichette discovery, cross e back edge; BFS tree e distanze; complessità Theta(n+m) con liste di adiacenza; applicazioni (connettività, componenti, spanning tree, cammini minimi non pesati, cicli, vertici a distanza al più d); esempio svolto su un grafo di 7 vertici.Visite di grafi - BFS e DFS →, Cammini minimi e algoritmo di DijkstraGrafi pesati, lunghezza di un cammino e distanza; sottocammini di un cammino minimo; problema SSSP; algoritmo di Dijkstra con cloud e priority queue, rilassamento degli archi, esempio svolto; correttezza (due lemmi) e complessità O(min(n^2, (n+m) log n)) con lista non ordinata o heap; pesi non negativi.Cammini minimi e algoritmo di Dijkstra →, Minimum spanning treeMinimum spanning tree di un grafo pesato connesso; proprietà del taglio (cut property) con dimostrazione; algoritmo di Kruskal con partizioni (union-find) e algoritmo di Prim con coda con priorità; esempio svolto sullo stesso grafo di Dijkstra; complessità O(m log n).Minimum spanning tree →).
- Errori tipici: per ogni grafo connesso (vale solo per gli alberi); archi per la spanning forest di un grafo sconnesso (sono con componenti); un vertice isolato rende disconnesso il grafo con ; lunghezza del cammino contata in vertici.
Esercizi su questo argomento
- Esercizio - Traduzione da ER a relazionale - dodici casi (esercizi di traduzione del corso)
- Esercizio 21 · visita BFS e spanning forest
- Esercizio 23 · escursioni e componenti connesse
- Esercizio - Accoppiamento perfetto con la matrice di Edmonds e Schwartz-Zippel
- Esercizio - Concentrazione del numero cromatico di un grafo casuale con le differenze limitate (lezioni MIT)
- Esercizio - Insiemi indipendenti con alterazione e lemma locale di Lovász per k-SAT
- Esercizio - Passeggiata aleatoria su un grafo con triangolo e coda - stazionaria, raggiungimento e copertura
- Esercizio - Taglio grande e derandomizzazione sul grafo di Petersen
- Esercizio - Teorema di Turán dal limite di Caro-Wei (lezioni MIT)
- Esercizio - triangoli, vertici isolati e cricche in un grafo casuale
Teoria collegata
- Ricerca nello spazio degli stati - formulazione dei problemi e ricerca non informata
- Relazioni ricorsive, cardinalità e vincoli di integrità nel modello ER
- Alberi
- Alberi binari
- Grafi diretti e ordinamento topologico
- Minimum spanning tree
- Rappresentazione dei grafi
- Visite di grafi - BFS e DFS
- Algoritmi di instradamento - link state e distance vector
- Protocolli di instradamento - RIP, OSPF e BGP
- RIP in Katharà
- Tipi di rete e topologie
- Metodo probabilistico - valore atteso, alterazioni e derandomizzazione
- Passeggiate aleatorie - rovina del giocatore, 2-SAT e grafi
- Taglio minimo randomizzato - algoritmo di Karger
- Union bound e verifica randomizzata - identità polinomiali e prodotti di matrici
- Deadlock - condizioni, prevenzione, evitamento e rilevamento