1. MLM 2070 - Teor´ıa de Grafos
Luis A. Dissett
Clase 12
1
2. Dos conjeturas
Conjetura (Ringel, 1964). Si T es un ´arbol dado con m aristas,
entonces K2m+1 se descompone en 2m + 1 copias de T.
Definici´on. Sea G un grafo con m aristas. Una coloraci´on
graciosa (o un etiquetado gracioso) de G es una funci´on inyectiva
f : V (G) → {0, . . . , m}
tal que
{|f(u) − f(v)|} = {1, . . . , m} .
Un grafo se dice gracioso si tiene una coloraci´on graciosa.
Conjetura (del ´arbol gracioso—Kotzil y Ringel, 1964).
Todo ´arbol es gracioso.
2
3. Relaci´on entre las dos conjeturas
La conjetura del ´arbol gracioso implica la conjetura de Ringel. De
hecho, tenemos:
Teorema (Rosa, 1967). Si T es un ´arbol con m aristas que tiene
una coloraci´on graciosa, entonces K2m+1 se descompone en 2m + 1
copias de T.
Demostraci´on. Numeremos los v´ertices de T de acuerdo a la
coloraci´on graciosa. As´ı, V (T) = {0, . . . , m}, y no hay dos aristas
con la misma diferencia entre extremos.
Consideramos el conjunto de v´ertices V (K2m+1) como Z2m+1, y
definimos ´arboles Tk (0 ≤ k ≤ 2m) de modo que:
• V (Tk) = {k, . . . , k + m} (mod2m + 1), y
• k + i ↔ k + j en Tk si y s´olo si i ↔ j en T.
3
4. Familias graciosas de ´arboles
Definici´on. Una oruga es un ´arbol en que existe un camino
incidente a todas las aristas (equivalentemente, un camino que est´a
a distancia < 2 de todos los v´ertices).
Teorema. Un ´arbol es una oruga si y s´olo si no contienen al
siguiente ´arbol Y .
Proposici´on. Toda oruga es graciosa.
Corolario. Toda estrella y todo camino son graciosos.
4
5. Grafos con peso
Definici´on. Un grafo con peso (o grafo con costo) es un grafo G
m´as una funci´on de peso o costo
f : E(G) → R.
En general, salvo menci´on expresa en contrario, consideramos s´olo
grafos con pesos no negativos en las aristas.
Definici´on. Sea G un grafo con peso, y sea H un subgrafo de G.
El costo total o peso total de H es
w(H) =
e∈H
w(e).
5
6. ´Arboles de cobertura m´ınimos
En particular, estamos interesados en el caso en que H = T es un
´arbol de cobertura de G. Ya que G es finito, la funci´on w(T)
alcanza su m´ınimo en alg´un ´arbol T. Nos interesa hallar alg´un
´arbol T que minimice el costo total; dicho grafo no tiene por qu´e
ser ´unico.
6
7. El algoritmo de Kruskal
Entrada: Un grafo G con costos, conexo.
Idea: Mantener un subgrafo ac´ıclico cobertor H, de modo que en
cada paso exista al menos un ´arbol de cobertura de costo m´ınimo T
tal que H sea subgrafo de T. C´onsiderense las aristas de G
ordenadas por costo en forma no decreciente, los empates se
rompen arbitrariamente.
Inicializaci´on: E(H) = ∅.
Iteraci´on: Si la siguiente arista e de G (en el orden dado) une dos
componentes de H entonces agregamos e a E(H). Si no, la
ignoramos.
Terminaci´on: Term´ınese el algoritmo cuando H sea conexo o
cuando se acaben las aristas de G.
7
8. Correcci´on del algoritmo de Kruskal
Teorema (Kruskal, 1956). Si G es un grafo conexo con costos,
entonces el algoritmo de Kruskal termina con H un ´arbol de
cobertura de costo m´ınimo.
Demostraci´on. Claramente, el algoritmo termina.
Probemos ahora que el grafo H que resulta del algoritmo es conexo.
Si no lo es, sea e una arista de G que una dos componentes de H.
Dicha arista debe haber sido considerada en alg´un momento; si fue
rechazada es porque no un´ıa dos componentes de H en ese
momento. Pero esto es imposible (el n´umero de componentes no
crece en cada iteraci´on).
An´alogamente, podemos probar que H es ac´ıclico (nunca se elige
una arista que cree un ciclo) y que cubre G (y por lo tanto es un
´arbol de cobertura).
8
9. Optimalidad del ´arbol generado
Sea ahora T el ´arbol de cobertura de G producido por el algoritmo
de Kruskal. Probaremos que su costo es el m´ınimo posible.
Supongamos que no, y sea T cualquier ´arbol de cobertura de G de
costo m´ınimo. Si T = T , no hay nada que probar. Si no, sea e la
primera arista de T elegida por el algoritmo tal que e /∈ E(T ).
Ya que e /∈ E(T ), T + e contiene un ciclo C, y (por un teorema
anterior), existe e ∈ E(T ) − E(T) tal que T + e − e es un ´arbol
de cobertura.
Si w(e ) < w(e), al momento de escoger e el algoritmo ya habr´ıa
considerado e . Como T contiene e y todas las aristas escogidas
antes de e, e no habr´ıa producido un ciclo, y por lo tanto habr´ıa
sido escogida por el algoritmo. Por lo tanto, w(e ) ≥ w(e).
9
10. Optimalidad del ´arbol generado (cont.)
As´ı, el costo de T + e − e es a lo m´as igual al de T (y por lo tanto
´optimo), y tiene m´as aristas en com´un con T que T .
Aplicando reiteradamente este procedimiento, podemos terminar
hallando un ´arbol de cobertura ´optimo T∗
que tenga todas las
aristas en co om´un con T, o sea, T∗
= T. O sea, T es ´optimo.
10
11. Complejidad del algoritmo de Kruskal
El algoritmo requiere que las |E| aristas est´en ordenadas
previamente. Esto toma O(|E| log(|E|) operaciones.
El proceso de examinar las |E| aristas toma a lo m´as O(|E|)
iteraciones; de ellas, n − 1 requieren actualizar la lista de
componentes a las que pertenecen los n v´ertices. Esto puede ser
hecho en un total de O(n log2 n) operaciones, o incluso en forma
m´as astuta en O(nα(n)), donde
α(n) ≤ min
i : log2(log2(. . . (log2(n)) . . . ))
i veces
= 1.
11
12. Rutas m´as cortas
Definici´on. En un grafo con pesos, la distancia entre dos v´ertices
es
d(u, v) = min {w(P) : P es un camino que une u y v} .
Note que en particular, esto coincide con la definici´on usual de
distancia, si consideramos la funci´on de peso w donde w(e) = 1
para todo e ∈ E(G).
Nos interesa hallar la distancia m´as corta entre dos v´ertices dados
u y v, o bien hallar todas las distancias m´as cortas entre un v´ertice
dado u y todos los otros v´ertices de G.
En general, no es mucho m´as eficiente hallar la ruta m´as corta
entre u y v que hallar todas las rutas m´as cortas entre u y los otros
v´ertices. Para esto usamos el algoritmo de Dijkstra.
12
13. El algoritmo de Dijkstra
Entrada: Un grafo (o digrafo) G con pesos no negativos, y un
v´ertice de partida u. El peso de una arista xy es w(xy); si xy no es
una arista diremos que w(xy) = ∞.
Idea: Mantener un conjunto S de v´ertices a los que conocemos la
distancia m´as corta desde u, junto con el predecesor de cada v´ertice
de S en dicha ruta. Para lograr esto, mantenemos una distancia
tentativa t(z) desde u a cada z ∈ V (G). Si z /∈ S, t(z) es la
distancia m´as corta encontrada hasta ahora entre u y z. Si z ∈ S,
t(z) es la distancia m´as corta entre u y z. En cualquier caso,
pred[z] es el predecesor de z la ruta u − z en cuesti´on.
Inicializaci´on: S = {u} , t(u) = 0, t(z) = w(uz) y pred[z] = u para
z = u.
13
14. El algoritmo de Dijkstra (cont.)
Iteraci´on: Sea v ∈ V (G) − S tal que
t(z) = min {t(v) : v ∈ V (G) − S}.
Agr´eguese v a S.
Para z ∈ V (G) − S, actual´ıcese t(z) a min {t(z), t(v) + w(vz)}.
Si cambia t(z), c´ambiese pred[z] a v.
Terminaci´on: Term´ınese el algoritmo cuando S = V (G) o cuando
t(z) = ∞ para todo z ∈ V (G) − S.
Al terminar, la distancia m´as corta entre u y v est´a dada por
d(u, v) = t(v).
14