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

Grafi - definizioni e proprietà

In questa pagina 5

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

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.

Terminologia

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

Alberi, foreste, spanning tree

Proprietà

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

P1. ∑v∈Vdegree(v)=2m\sum_{v \in V} \text{degree}(v) = 2m. Dimostrazione: ogni arco è contato esattamente due volte, una per estremo.

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.

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. 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. Alla fine GG è un albero con m′=n−1≥mm' = n - 1 \ge m archi.

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.

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