Arno Formella
La página incial del curso es:
http://formella.webs.uvigo.es/doc/tc03
Estos apuntes se acompaņa con ilustraciones en pizarra dónde se explica las notaciones y algunos de los algoritmos.
El texto es meramente una brevísima introducción (5 horas) a la teoría de grafos.
El curso de doctorado ya tiene en su título Desarrollo de Software, por eso se ha pensado como tareas:
Se pide una breve analisis por lo menos según los siguientes criterios: completitud, complejidad, entorno de uso, algoritmos disponibles, filosofía de diseņo, simplicidad de uso, aplicaciones, documentación y recursos disponibles...
Para los que están más interesados en la parte de algoritmia, también hay dos opciones:
Es decir, un grafo es el concepto abstracto detrás de la representación de relaciones (aristas) entre entidades (vértices).
Problemas que se quiere resolver:
Notaciones:
V | conjunto de vértices o nodos |
[V]r | conjunto de todos los subconjuntos de V de tamaño r |
E [V]2 | conjunto de aristas |
v V | vértice |
e = {x, y} E | arista |
{x, y} : xy | xy es arista |
G = (V, E) | grafo |
V(G) | vértices del grafo G |
E(G) | aristas del grafo G |
v G : v V(G) | v es vértice del grafo G |
e G : e E(G) | e es arista del grafo G |
| V| = : n | número de vértices |
| V| = | V(G)| = | G| | notaciones equivalentes |
| E| = : m | número de aristas |
| E| = | E(G)| = | G| | notaciones equivalentes |
Vocabulario:
trivial | si | G| = 0 o | G| = 1, el grafo es trivial |
sobre | si G = (V, E), G es un grafo sobre V |
incidente | un vértice v es incidente a una arista e, si v e |
una arista e es incidente a un vértice v, si v e | |
adyacente | dos vértices v y w son adyacentes, si {v, w} E |
conecta | una arista conecta sus vértices |
X - Y-arista | si x X V e y Y V, xy es X - Y-arista |
Notaciones:
E(X, Y) | conjunto de X - Y-aristas |
E(v) : = E(v, V {v}) | conjunto de aristas incidentes a v |
N(v) | conjunto de vértices adyacentes a v, vecinos |
d (v) : = | E(v)| = | N(v)| | grado del vértice v |
dG(v) | grado del vértice v G |
(G) | grado mínima de los vértices en G |
(G) | grado máxima de los vértices en G |
(G) : = | E|/| V| | grado medio de los vértices en G |
Notaciones:
G e | grafo (V, E {e}) |
G v | grafo (V {v}, E E(v)) |
G E | grafo (V, E E) |
G V | grafo (V V, E E(V)) |
Vocabulario:
vecino | v es vecino de w, si vw E(v), |
es decir, si v y w son adyacentes | |
vecina | e es vecina de f, si e f |
es decir, e y f son incidentes al mismo vértice | |
independiente | vértices (o aristas) no adyacentes son independientes; |
un conjunto de vértices (o aristas) que mutuamente son | |
independientes es un conjunto independiente | |
completo | un grafo es completo, si todos sus vértices son vecinos |
partición | el conjunto de conjuntos {V0,..., Vr - 1} es una partición de V, |
si V = Vi, Vi , y i j : ViVj = |
Notaciones:
(G) | cardinalidad del conjunto de vértices independientes más grande del grafo G |
Vocabulario:
digrafo | las aristas están dirigidos, es decir, |
en vez de conjuntos {v, w} se habla de parejas (v, w) o (w, v) | |
es decir, E V×V | |
multigrafo | se permite más de una arista entre vértices |
pseudografos | se permite bucles en vértices |
Se puede visualizar un grafo pintando sus vértices como puntos y sus aristas como lineas entre los puntos correspondientes.
¿Cuáles son las operaciones que se quiere realizar con un grafo (y sus componentes)?
Se puede almacenar un grafo con
¿Cuáles son las principales ventajas y desventajas de cada uno de los métodos?
Sean G = (V, E) y G = (V, E) dos grafos.
Si existe una bijección : V V entre los vértices de los grafos de tal manera que xy E (x)(y) E (es decir, si x e y son vecinos en G, lo son también (x) y (y) en G), entonces G es isomorfo de G, G G o también G = G, es decir, el grafo G.
Una función f sobre grafos con f (G) = f (G) si G G se llama invariante. Por ejemplo, invarientes son:
No se conoce ninguna invariante sobre grafos que se puede calcular en tiempo polinomial que decida que dos grafos son isomorfos, pero tampoco se ha comprobado hasta hoy que el problema de isomorfismo entre grafos sea NP-completo.
Sean G = (V, E) y G = (V, E) dos grafos.
Notaciones:
G G : = (V V, E E) | unión de grafos |
G G : = (V V, E E) | intersección de grafos |
Vocabulario:
grafo parcial | G es grafo parcial de G, V V y E E |
subgrafo | G es subgrafo de G, si G G = G, |
es decir, G es un grafo parcial de G que contiene todas | |
las aristas de G cuyos vértices incidentes están en V. | |
inducido | si V V, el grafo (V, E(V, V)) es el subgrafo G de G inducido por V |
Notaciones:
G G | G es grafo parcial de G |
G[V] | subgrafo de G sobre V asumiendo V V |
G[G] | subgrafo de G sobre V(G) asumiendo G G |
Vocabulario:
r-partido | un grafo es r-partido, si existe una partición de V |
en r conjuntos independientes | |
bipartido | 2-partido |
grafos k-regulares: d (G) = (G) = k (= (G) = (G))
grafos completos Kr: G = (V,[V]2),| V| = r
caminos: Pk: G = ({v0,..., vk},{v0v1, v1v2,...vk - 1vk})
ciclos Ck: G = ({v0,..., vk},{v0v1, v1v2,...vk - 1v0})
se puede describir un camino o ciclo por su secuencia de vértices
Vocabulario:
longitud | número de aristas de un camino o ciclo |
cíclico | un grafo que contiene un ciclo es cíclico |
acíclico | un grafo que no contiene ningún ciclo es acíclico |
cintura | un ciclo mínimo que un grafo contiene |
circumferencia | ciclo máximo que un grafo contiene |
Notaciones:
g(G) | longitud de la cintura de G, ( g(G) = si G acíclico) |
D(G) | longitud de la circumferencia de G (D(G) = 0 si G acíclico) |
grafos bipartidos B
grafos bipartidos completos Kn1, n2
hipercubos Qk
Propiedades (con excepciones para Q0 y Q1):
Vocabulario:
componentes conexas | conjunto de subgrafos conexos maximales |
Notaciones:
d (v, w) | distancia entre dos vértices siendo la longitud del camino más corto entre v y w |
dG(v, w) | distancia entre v y w en G |
La distancia define una métrica, es decir,
Vocabulario:
conexo | v y w son conexos, si d (v, w) < ; |
G es conexo, si todas las parejas v, w V son conexos | |
disconexo | G es disconexo si no es conexo |
puente | arista e G es un puente, G conexo, tal que G e es disconexo |
vértice de corte | vértice v G, G conexo, tal que G v es disconexo |
Notaciones:
c(G) | número de componentes conexas de G |
(G) | cardinalidad mínima de un subconjunto de vértices de G |
tal que G V sea disconexo | |
(G) | cardinalidad mínima de un subconjunto de aristas de G |
tal que G E sea disconexo |
Vocabulario:
k-conexo | G es k-conexo, si (G) k |
biconexo | 2-conexo |
k-aristoconexo | G es k-aristoconexo, si (G) k |
bloque | subgrafo máximo biconexo |
Teorema:
las siguientes propiedades son equivalentes:
Vocabulario:
árbol con raíz | un árbol con un vértice marcado como raíz |
árbol libre | un árbol sin marca en ningún vértice |
árbol generador | T es árbol generador de un grafo G, |
si T G y V(T) = V(G) |
Teorema:
cada grafo G contiene un bosque generador, y si G es conexo, contiene un árbol generador (cuya raíz puede ser cualquier vértice)
Vocabulario:
recorrido euleriano | viaje entre dos vértices |
que no pasa varias veces por la misma arista | |
grafo euleriano | grafo con recorrido euleriano con todas sus aristas |
grafo hamiltoniano | grafo con camino por todos sus vértices |
Teorema (Euler):
d (v) = 2m
Teorema:
cada grafo tiene un número par de vértices con grado impar
Teorema:
cada grafo G contiene un camino P con | P| (G), y cada grafo G con (G) 2 contiene un ciclo C con | C| > (G)
Teorema:
si G no trivial: (G) (G) (G)
Teorema:
cada grafo G con | E| > 1 contiene un subgrafo H con (H) > (H) (G)
Teorema:
G es bipartido con | V0| | V1| G no es hamiltoniano
Teorema:
v, w V, vwE : d (v) + d (w) n G es hamiltoniano
Teorema:
G es hamiltoniano S V : c(G S) | S|
Teorema:
decidir si un grafo G es hamiltoniano es NP-completo
Teorema:
G es bipartido G no contiene ciclos impares
¿Algoritmo que decide que G es bipartido?
Teorema:
G es euleriano G es conexo y v V : d (v) es par
¿Algoritmo que calcule un recorrido euleriano?
Teorema:
G k-conexo | E| kn/2
Teorema (Whitney):
G es 2-conexo (| G| > 2) v, w VvPw, vQw : P Q =
Es decir, existen dos caminos que no se intersectan entre todas las posibles parejas de vértices en G.
Teorema (Mader):
cada grafo G con (G) 4k contiene un grafo k-conexo como grafo parcial
Exploración en profundidad (otros dicen recorrido en profundidad, o depth first search, DFS)
Ejemplo del Algoritmo, se obtiene un árbol con raíz T y aristas de retroceso no pertenecientes a T
Teorema:
Sea T un árbol DFS de un grafo G conexo y v su raíz
v es vértice de corte v tiene más de un hijo en T
Teorema:
Sea T un árbol DFS de un grafo G conexo y v no sea la raíz
v es vértice de corte no existe una arista de retroceso desde el subárbol debajo de v hacia un antecesor de v en T
DFS tiene complejidad (n + m) (asumiendo listas de adyacencias)
Exploración en anchura (otros dicen recorrido en anchura, o breadth first search, BFS)
Ejemplo del Algoritmo, se obtiene un árbol con raíz T, aristas de retroceso no pertenecientes a T, y aristas de cruce
BFS tiene complejidad (n + m) (asumiendo listas de adyacencias)
Sea G un grafo y un grafo dirigido.
Vocabulario:
fuertemente conexo | es fuertemente conexo, si existe un recorrido |
entre cada pareja de vértices de G | |
orientable | G es orientable, si existe un grafo G |
que es fuertemente conexo | |
componente fuertemente conexa | conjunto máximo de vértices de |
cuyo subgrafo inducido es fuertemente conexo |
Notaciones:
di(v) | grado entrante |
do(v) | grado saliente |
Teorema (Robbins):
G orientable G es conexo y no contiene puentes
¿Algoritmo que calcule una orientación?
(¿Qué se entiendo bajo una orientación óptima? Depende: minimizar el promedio de las distancias, minimizar el máximo de las distancias, minimizar el máximo de las diferencias entre las distancias en G y en correspondientes.)
se puede explorar también un digrafo en anchura (BFS) o en profundidad (DFS)
a parte de las aristas del árbol y las aristas de retroceso, DFS produce aristas de progreso y aristas de cruce.
DFS se usa para producir una ordenación topológica de un digrafo acíclico, es decir, en el orden aparece un vértice v antes de un vértice w, si existe un camino desde v a w.
DFS se usa para determinar los componentes fuertemente conexos
¿Algoritmo que calcule los componentes fuertemente conexos?
se puede seguir también recorridos eulerianos:
Teorema:
es euleriano es conexo y v V : di(v) = do(v)
¿Algoritmo que calcule un camino euleriano en un digrafo?
Notaciones:
(G, W) | grafo ponderado con W : E(G) |
w(G) | peso de grafo G, w(G) = w(e) |
w(P) | peso de camino P, w(P) = e Pw(e) |
d (v, w) | distancia entre dos vértices, d (v, w) = {w(vPw)} |
dt(v) = d (v, w) | distancia total de un vértice |
si w(e) = 1e E se reproduce la distancia de arriba
Notaciones:
e(v) | excentricidad, e(v) = {d (v, w)} |
rad(G) | radio del grafo G, rad(G) = {e(v)} |
diam(G) | diámetro del grafo G, diam(G) = {e(v)} |
Vocabulario:
centro | el centro del grafo G es el subgrafo de G inducido |
por los vértices con excentricidad mínima | |
mediana | la mediana del grafo G es el subgrafo de G inducido |
por los vértices con distancia total mínima |
Teorema:
G conexo rad(G) diam(G) 2 . rad(G)
Teorema:
todo grafo es centro de un grafo
Teorema:
el centro de un árbol consiste en uno o dos vértices
¿Algoritmo que calcule el centro de un árbol?
dado un grafo G (o un digrafo ) ponderado
preguntas interesantes:
hacia cada vértice u G existe un camino desde s con distancia mínima
las distancias a todos los vértices en uno de estos caminos a su vez son caminos mínimos
si G es conexo, se puede construir un árbol con raíz s G que determina todos los caminos mínimos hacia todos los vértices de G
¿Algoritmo que calcule un bosque mínino de un grafo G?
Algoritmo de KRUSKAL, complejidad O(m log n)
Algoritmo de PRIM, complejidad O(m log n)
¿Algoritmo que calcule un árbol mínimo desde un vértice s en ?
Algoritmo de DIJKSTRA, complejidad O(n2)
el algoritmo funciona igual con grafos como con digrafos
¿Se puede permitir pesos negativos?
pueden existir ciclos negativos, es decir, ciclos con pesos negativos
¿Algoritmo que calcule un árbol mínimo desde un vértice s en G si G contiene pesos negativos?
Algoritmo de BELLMANN-FORD, complejidad O(mn)
detecta la existencia de ciclos negativos en que caso termina sin solución
¿Algoritmo que calcule los caminos mínimos entre todas las parejas de vértices incluyendo el caso de pesos negativos?
Algoritmo de FLOYD-WARSHALL, complejidad O(n3)
detecta la existencia de ciclos negativos en que caso termina sin solución
Mejoras:
si se tiene más información sobre los grafos y sus pesos se puede mejorar los algoritmos:
contracción de arista
minor
minor topológico
se puede realizar preguntas interesantes como ciertas propiedades de grafos están relacionados con el tamaño del grafo (normalmente número de aristas)
Vocabulario:
planar | un grafo es planar cuando se puede pintar sus vértices y sus aristas |
en un plano de tal manera que ninguna pareja de aristas se intersecta | |
región | una región es un área del plano donde se ha pintado un |
grafo planar que esté confinada por aristas | |
grafo triangular | un grafo es triangular, si en su representación planar |
en el plano toda región está confinado por tres aristas del grafo |
Teorema(Euler):
G planar y conexo con n 1, m y l n - m + l = 2
Teorema:
G planar con n 3 m 3n - 6
Teorema:
G maximal planar si es un grafo triangular (y contiene 3n - 6 aristas)
Teorema(Kuratowski):
G es planar no contiene un K5 o un K3, 3 como minor (o minor topológico)
Teorema:
G planar los vértices de G son colorables con 4 colores
G planar que no contiene ningún triángulo los vértices de G son colorables con 3 colores
Notaciones:
(G) | número mínimo de colores que se necesita para |
colorar los vértices de un grafo | |
(G) | número mínimo de colores que se necesita para |
colorar las aristas de un grafo |
Teorema(Brooks):
G conexo G Cimpar y G Kn (G) (G)
Teorema(Koenig):
G bipartido (G) = (G)
Teorema:
teorema del matrimonio
breve glosario de términos en español y inglés.
árbol | tree |
árbol generador | spanning tree |
arista de cruce | cross edge |
arista de progreso | forward edge |
arista de retroceso | back edge |
arista | edge |
articulación | articulation |
bipartido | bipartite |
bloque | block |
bosque | forest |
camino | path |
ciclo | cycle |
cintura | girth |
cliqué | clique |
componente | component |
conexo | connected |
diámetro | diameter |
distancia | distance |
dirigido | directed |
flujo | flow |
grado | degree |
grafo | graph |
hipercubo | hypercube |
emparejamiento | matching |
nodo | node |
peso | weight |
ponderado | weighted |
puente | bridge |
radio | radius |
recorrido | walk |
vértice de corte | cutvertex |
articulación--vértice de corte |
vértice de corte--articulación |
nodo--vértice--punto |
vértice--punto--nodo |
punto--nodo--vértice |
articulation | articulación |
back edge | arista de retroceso |
bipartite | bipartido |
block | bloque |
bridge | puente |
clique | cliqué |
component | componente |
connected | conexo |
cross edge | arista de cruce |
cutvertex | vértice de corte |
cycle | ciclo |
degree | grado |
diameter | diámetro |
directed | dirigido |
distance | distancia |
edge | arista |
flow | flujo |
forest | bosque |
forward edge | arista de progreso |
girth | cintura |
graph | grafo |
hypercube | hipercubo |
matching | emparejamiento |
node | nodo |
path | camino |
radius | radio |
spanning tree | árbol generador |
tree | árbol |
walk | recorrido |
weighted | ponderado |
weight | peso |