13.07.2015 Views

Sinossi

Sinossi

Sinossi

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

nodi di G i , che sono gli unici nodi a ricevere un’etichetta maggiore di quella di v i ,è un predecessore di v i .• Nelle pieghe della dimostrazione del Teorema 1 è annidato un algoritmo per individuareuna numerazione topologica (se esiste) dei nodi di un dato grafo orientato.Questo algoritmo è “codificato” nella seguente procedura Acyclic.La procedura utilizza una rappresentazione del grafo basata su liste di adiacenza.In particolare, adj + (v) è la lista dei successori di v. Per una breve introduzione alleliste si veda [4].Nel vettore indegree viene invece memorizzato (e aggiornato di volta in volta) ilgrado d’ingresso di ogni nodo.Infine, L è una lista inizialmente vuota, in cui di volta in volta memorizziamo i nodiche hanno grado d’ingresso 0. Per la gestione di L utilizziamo alcune procedure,che supponiamo predefinite e con costo costante O(1). La procedura T oplist(L)restituisce il nodo corrispondente al primo elemento della lista L; la proceduraDelT op(L) elimina dalla lista L il primo elemento (aggiornando opportunamentei puntatori); la procedura AddT op(L, v) aggiunge in testa alla lista un elementocorrispondente al nodo v (aggiornando opportunamente i puntatori).Procedure: Acyclic (Input: grafo orientato G(V, E); Output: una numerazionetopologica dei nodi, se esiste.)BeginFor each v ∈ V do indegree[v] = 0For each v ∈ V do/**calcolo del grado d’ingresso del nodo v**/For each u ∈ adj + (v) do indegree[u] = indegree[u] + 1For each v ∈ V doIf indegree[v] = 0 then AddT op(L, v)index = 1While L ≠ ∅ dou = T opList(L)DelT op(L)f(u) = indexindex = index + 1For each v ∈ adj + (u) doindegree[v] = indegree[v] − 1If indegree[v] = 0 then append v to LIf index < n then print “there is a directed cycle”Else Return fEnd/**aggiornamento del grado d’ingresso dei successori di u**/2


Begindist[u] = 0; V 1 = ∅; V 2 = ∅For each vertex v ∈ V \ u do dist[v] = ∞AddT op(L, u)While L ≠ ∅ dox = T opList(L)DelT op(L)For each z ∈ adj(x) doIf dist[z] = ∞ then doAddBottom(L, z)dist[z] = dist[x] + 1For each vertex v ∈ V doFor each x ∈ adj(v) doif (dist[x] = dist[v]) then doPrint “there is an odd cycle”StopFor each vertex v ∈ V doif dist[v] is odd then V 1 = V 1 ∪ {v}if dist[v] is even then V 2 = V 2 ∪ {v}Return (V 1 , V 2 )EndAnalizziamo la complessità della procedura. Sia m = |E(G)|. Abbiamo 3 operazionielementari con costo O(1). Il primo ciclo for ha complessivamente costo O(n).Segue l’operazione AddT op(L, u) che abbiamo assunto avere costo O(1). Per quantoriguarda il ciclo while, possiamo ragionare esattamente come abbiamo ragionatoper il ciclo while nella Procedure Acyclic e concludere analogamente che esso hacomplessivamente costo O(m). Lo stesso vale per il successivo ciclo for. L’ultimociclo for ha invece costo O(n). Abbiamo infine una operazione elementare. Il costodella procedura è quindi O(1) + O(n) + O(1) + O(m) + O(m) + O(n) + O(1) = O(m)(assumendo m ≥ n).Osserviamo nuovamente che la complessità O(m) non sarebbe stata possibile seavessimo utilizzato la matrice di adiacenza per memorizzare il grafo, poiché in quelcaso la sola lettura di tutta la matrice, e.g. per verificare che non ci fossero spigolitra vertici alla stessa distanza da v, avrebbe avuto costo O(n 2 ).• La procedura Bipartite ci permette di osservare quanto segue: un grafo bipartitoammette una sola colorazione (a meno di permutare i due colori) se e solo se e’connesso. Infatti, una volta scelto il colore di un generico vertice v, il colore di ogni6


Teorema 3. Sia G un grafo qualsiasi. Allora vale sempre χ(G) ≤ ∆(G) + 1, e seG ≠ ciclo dispari o grafo completo, χ(G) ≤ ∆(G), dove ∆(G) = max v∈V (G) deg(v).Ci limitiamo a dimostrare la prima affermazione. Consideriamo un qualunqueordinamento v 1 , v 2 , . . . , v n dei vertici e, procedendo da v 1 a v n , scegliamo il colore⋃c(v i ) come il numero più piccolo presente nell’insieme {1, 2, . . . , ∆(G) + 1} \1≤j≤i−1:v j ∈N(v i ) c(v j): si osservi che questo insieme non è vuoto poiché |N(v i )| ≤∆(G).• Osserviamo che il bound offerto dal precedente teorema in generale non è aderente.Infatti, se consideriamo un albero in cui un vertice è adiacente a tutti o vertici,abbiamo che ∆(G) = |V (G)| − 1, mentre χ(G) = 2.0.4 Edge coloring• Per un grafo G un edge coloring è una funzione c : E ↦→ {1, 2, . . . , |E(G)|} tale che,se due spigoli e e f sono adiacenti (ovvero incidono su uno stesso vertice), allorac(e) ≠ c(f). Il numero minimo di colori utilizzati da una edge-coloring di G si indicacon χ ′ (G): si noti che χ ′ (G) ≥ ∆(G) := max v∈V (G) deg(v).• Dimostriamo che per il grafo completo con n vertici K n vale quanto segue: χ ′ (K n ) =n, se n è dispari; χ ′ (K n ) = n−1 se n è pari. Si osservi che questa proprietà è quellache garantisce che, per un torneo con n squadre in cui ogni squadra deve giocarecontro ogni altra squadra (e.g. il girone di andata del campionato di calcio), sonosufficienti n “giornate” se n − 1 è pari, e n giornate se n − 1 è dispari: è sufficienteconsiderare ciascuna giornata come un colore, e l’assegnamento di una giornata aun incontro tra due squadre i e j come una colorazione dello spigolo ij nel grafocompleto i cui vertici sono le n squadre.Iniziamo con l’osservare che dobbiamo colorare |E(K n )| = n(n−1) spigoli e che il2massimo numero di spigoli che può ricevere uno stesso colore è : n−1 , se n è dispari;2n, se n è pari. Quindi, se n è dispari, 2 χ′ (K n ) ≥ n; se n è pari, χ ′ (K n ) ≥ n − 1.Ora dimostriamo che possiamo colorare gli spigoli di K n con n colori quando n èdispari. Avendo appena osservato che, in questo caso, χ ′ (K n ) ≥ n, seguirà cheχ ′ (K n ) = n. Contiamo modulo n; ricordiamo che (i + j) mod n = i + j se i + j ≤ n,mentre (i + j) mod n = (i + j) − n se i + j > n. Vale il seguente fatto elementare:(*) siano i, j e j ′ tre interi compresi tra 1 e n, allora(i + j) mod n = (i + j ′ ) mod n se e solo se j = j ′ .Consideriamo quindi il seguente edge coloring. Numeriamo i vertici di K n connumeri da 1 a n, e per ogni spigolo ij assegniamo il colore (i + j) mod n. Dobbiamodimostrare che questa colorazione, che usa n colori, è ammissibile, ovvero assegna8

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!