Salta al contenuto
Note per Studenti Grafi - definizioni e proprietà

Grafi - definizioni e proprietà

In questa pagina 5

Definizione (grafo). Un grafo G=(V,E)G = (V, E) ha un insieme VV di vertici (o nodi) e una collezione EE di archi (coppie di vertici). È diretto se ogni arco (u,v)(u, v) è una coppia ordinata (u→vu \to v), non diretto se la coppia è non ordinata (u−vu - v). EE è 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 (u,u)(u, u). 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 V={1,2,3}V=\{1,2,3\} e E={(1,2),(2,3)}E=\{(1,2),(2,3)\} ha n=3n=3 vertici e m=2m=2 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 nn e quello degli archi con mm. 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, n−1n-1 per i nodi, in accordo con m=n−1m=n-1 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 e=(u,v)e = (u, v) è incidente su uu e vv, che sono adiacenti; i vicini di vv sono i vertici uu con (v,u)∈E(v, u) \in E.
  • Il grado degree(v)\text{degree}(v) è il numero di archi incidenti su vv. Un vertice di grado 00 è isolato.
  • Un cammino è una sequenza di vertici u1,…,uku_1, \dots, u_k con (ui,ui+1)∈E(u_i, u_{i+1}) \in E; la lunghezza è il numero di archi, k−1k - 1 (nei grafi pesati, la somma dei pesi). Un ciclo è un cammino con uk=u1u_k = u_1; è semplice se i vertici sono tutti distinti (a parte primo e ultimo).
  • Un sottografo G′=(V′,E′)G' = (V', E') ha V′⊆VV' \subseteq V, E′⊆EE' \subseteq E e gli archi di E′E' incidono solo su V′V'. È di copertura (spanning) se V′=VV' = V.
  • GG è connesso se per ogni coppia u,vu, v esiste un cammino da uu a vv; altrimenti è disconnesso.
  • Le componenti connesse sono una partizione di GG in sottografi G1,…,GkG_1, \dots, G_k (Gi=(Vi,Ei)G_i = (V_i, E_i)) con: ogni GiG_i connesso; V=V1∪⋯∪VkV = V_1 \cup \dots \cup V_k e E=E1∪⋯∪EkE = E_1 \cup \dots \cup E_k (partizioni); nessun arco tra ViV_i e VjV_j per i≠ji \ne j. Sono i sottografi connessi massimali; la partizione è unica; GG connesso ⇔\Leftrightarrow k=1k = 1. Esempio: vertici u,v,w,x,y,zu, v, w, x, y, z con archi uvuv, xyxy, ywyw, wxwx hanno tre componenti: {u,v}\{u, v\} con 1 arco, {x,y,w}\{x, y, w\} con 3 archi, {z}\{z\} senza archi. Gradi: u,vu,v hanno grado 11; x,y,wx,y,w hanno grado 22 ciascuno (ognuno è su due archi del triangolo x,y,wx,y,w); zz ha grado 00. Somma dei gradi 1+1+2+2+2+0=8=2⋅41+1+2+2+2+0=8=2\cdot4, con m=4m=4 archi.

Esempio. Con V={1,2,3,4}V=\{1,2,3,4\} e archi (1,2),(2,3)(1,2),(2,3): degree(2)=2\text{degree}(2)=2, il vertice 44 è isolato e il grafo ha 22 componenti connesse, {1,2,3}\{1,2,3\} e {4}\{4\}.

Alberi, foreste, spanning tree

Proprietà

Sia GG non diretto e semplice con nn vertici e mm archi.

Proprietà (gradi, numero di archi e alberi). P1. ∑v∈Vdegree(v)=2m\sum_{v \in V} \text{degree}(v) = 2m. Dimostrazione: ogni arco è contato esattamente due volte, una per estremo (nella somma ∑vdegree(v)\sum_v\text{degree}(v) l'arco (u,v)(u,v) compare una volta nel grado di uu e una volta in quello di vv). 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. m≤(n2)=n(n−1)2m \le \binom{n}{2} = \frac{n(n-1)}{2}, quindi m∈O(n2)m \in O(n^2). Dimostrazione: GG è semplice, perciò EE è un sottoinsieme delle coppie non ordinate di vertici distinti. Tali coppie sono (n2)=n(n−1)2\binom n2=\frac{n(n-1)}{2}: si scelgono 22 vertici su nn 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 n−1n-1 altri, e ogni coppia è stata contata due volte, da cui il fattore 12\frac12. Con n=5n=5 sono 1010, con n=6n=6 sono 1515 (grafi completi K5K_5, K6K_6).

P3. Se GG è un albero, m=n−1m = n - 1. Dimostrazione: si vede GG come albero radicato; EE coincide con le relazioni padre-figlio, che sono n−1n - 1 (ogni vertice non radice ha un solo padre).

P4. Se GG è connesso, m≥n−1m \ge n - 1. Dimostrazione: finché esiste un ciclo si elimina un suo arco: GG 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 m′=n−1≤mm' = n - 1 \le m archi.

P5. Se GG è una foresta, m≤n−1m \le n - 1. Dimostrazione: finché GG non è connesso si aggiunge un arco tra due componenti diverse G1,G2G_1, G_2: non può creare cicli, perché un ciclo che passasse per il nuovo arco (a,b)(a,b) richiederebbe un altro cammino da aa a bb, ma aa e bb stanno in componenti diverse e quindi non ce n'è nessuno. Alla fine GG è un albero con m′=n−1≥mm' = n - 1 \ge m archi.

Esempio. Con n=5n=5 vertici si ha m≤5⋅4/2=10m\le5\cdot4/2=10; un albero libero ha m=4m=4 archi e la somma dei gradi è 2m=82m=8.

Il grafico riassume le proprietà P2, P3 e P4: un grafo semplice e connesso con nn vertici ha un numero di archi tra n−1n-1 (alberi) e n(n−1)2\frac{n(n-1)}{2} (grafo completo). Un grafo è sparso se mm è vicino a nn e denso se è vicino a n2n^2: 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 kk componenti connesse di n1,…,nkn_1, \dots, n_k vertici ha spanning forest con ∑(ni−1)=n−k\sum (n_i - 1) = n - k archi (ogni componente contribuisce con uno spanning tree di ni−1n_i - 1 archi, per P3). Esempio d'esame: n1=5n_1 = 5, m1=10m_1 = 10; n2=6n_2 = 6, m2=15m_2 = 15; n3=8n_3 = 8, m3=8m_3 = 8: il numero massimo di archi in una spanning forest è (5−1)+(6−1)+(8−1)=16(5-1) + (6-1) + (8-1) = 16, indipendentemente dai valori mim_i (le prime due componenti sono grafi completi K5K_5 e K6K_6, la terza ha 88 archi su 88 vertici e quindi contiene almeno un ciclo). Ogni spanning forest che non si può più estendere ha esattamente n−kn - k archi.

Esempio. Con componenti di 55, 66 e 88 vertici lo spanning forest ha (5−1)+(6−1)+(8−1)=16=19−3(5-1)+(6-1)+(8-1)=16=19-3 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 m=n−1m = n - 1 a un grafo connesso qualsiasi: è vero solo per gli alberi; per i connessi vale m≥n−1m \ge n - 1.
  • Contare n−1n - 1 archi nella spanning forest di un grafo non connesso: sono n−kn - k con kk componenti.
  • Dimenticare che un grafo con un vertice isolato è disconnesso (se n≥2n \ge 2).
  • Confondere lunghezza del cammino (archi) con numero di vertici (kk).

Versione ripasso

Esercizi su questo argomento

Teoria collegata