Materia: #técnicas_y_diseños_de_algoritmos

Tags: Estructura

Grafos

Un grafo G=(V,X) es un par de conjuntos, donde V es un conjuntos de puntos o nodos o vértices y X es un subconjunto del conjunto de pares no ordenados de elementos distintos de V. Los elementos de X se llaman aristas o ejes.

Si no aclaramos lo contrario, por lo general, en el curso llamaremos nG=|V| y mG=|X|. Cuando esté claro a qué grafo nos referimos, evitaremos el subíndice.

Dados v y wV , si e=(v,w)X se dice que v y w son adyacentes y que e es incidente a v y w. La vecindad de un vértice v, N(v), es el conjunto de los vértices adyacentes a v. Es decir:

N(v)={wV:(v,w)X}

Dibujar los grafos es sumamente útil para entender muchas de sus propiedades. Los vértices son representados mediante puntos y las aristas mediante líneas uniendo los vértices que la definen. No hay una única forma de dibujar un grafo, las posiciones relativas de los vértices son irrelevantes, como así también la de las aristas.

graph LR

id1((1))
id2((2))
id3((3))
id4((4))
id5((5))
id6((6))
id7((7))

id1 --- id2
id2 --- id3
id3 --- id4
id4 --- id1
id1 --- id5
id6 --- id7

En el ejemplo del dibujo, esta representado el grafo G=(V,X), donde

V={v1,v2,v3,v4,v5,v6,v7}X={(v1,v2),(v2,v3),(v3,v4),(v1,v4),(v1,v5),(v6,v7)}
En el dibujo ingresamos números en los nodos para simplificar la notación, pero podría dibujarse un nodo sin distinción entre los nodos (aunque no tendría mucha utilidad).


Multígrafos y pseudografos

Un multígrafo es un grafo en el que puede haber varias aristas entre el mismo par de vértices distintos.

Un pseudografo es un grafo en el que puede haber varias aristas entre cada par de vértices y también puede haber aristas (loops) que unan a un vértice con sí mismo.

En la materia, si no aclaramos lo contrario, cuando nos referimos al término grafo, asumimos que no hay aristas múltiples ni loops.

X pasa a ser un multiconjunto de aristas.

flowchart LR

id1((1))
id2((2))
id3((3))
id4((4))
id5((5))
id6((6))

id1 --- id1
id1 --- id2
id2 --- id3
id2 --- id3
id2 --- id6
id3 --- id6
id3 --- id5
id3 --- id4
id4 --- id6
id4 --- id5
id4 --- id5
id4 --- id5
id6 --- id6

En el dibujo se ve representado un multipseudografo.


Grado de los vértices

El grado de un vértice v en el grafo G, dG(v) es la cantidad de aristas incidentes a v en G. Llamaremos Δ(G) al máximo grado de los vértices de G, y δ(G) al mínimo.

Si está claro al grafo que nos referimos, lo notaremos como d(v).

Las vértices y las aristas de un grafo están relacionadas por la siguiente formula:

vVd(v)=2m

Un grafo se dice completo si todos sus vértices son adyacentes entre sí. Notaremos como Kn al grafo completo de n vértices. Un grafo completo de n vértices, siguiendo la formula de antes, tiene exactamente mKn=n(n1)2 artistas.

flowchart LR

id1((1))
id2((2))
id3((3))
id4((4))

id1 --- id2
id2 --- id3
id3 --- id4
id4 --- id1
id1 --- id3
id2 --- id4

En el dibujo se puede ver un ejemplo de grafo completo.

Dado un grafo G=(V,X), su grafo complemento, que notaremos G¯=(V,X¯), tiene el mismo conjunto de vértices y un par de vértices son adyacente en G¯ si, y solo si, no son adyacentes en G. También puede ser notado como Gc.

flowchart LR

id1((1))
id2((2))
id3((3))
id4((4))
id5((5))

id1 --- id2
id1 --- id3
id2 --- id3
id2 --- id4
id3 --- id5
id4 --- id5
flowchart LR

id1((1))
id2((2))
id3((3))
id4((4))
id5((5))

id1 --- id5
id2 --- id5
id3 --- id4
id1 --- id4

En los dibujos podemos ver dos grafos, cada uno siendo el complemento del otro.

Dado un grafo G de n vértices y m aristas, decimos que G¯ tiene mG¯=n(n1)2m aristas.


Subgrafos y subgrafos inducidos

Dado un grafo G=(VG,XG), un subgrafo de G es un grafo H=(VH,XH) tal que VHVG y XH(XG(VH×VG)). Lo notamos como HG.

Si HG y HG, entonces H es subgrafo propio de G, hecho que notamos HG.

H es un subgrafo generador de G si HG y VG=VH.

Un subgrafo H=(VH,XH) de G=(VG,XG), es un subgrafo inducido si todo par u,vVH con (u,v)XG entonces también (u,v)XH. Un subgrafo inducido de G=(VG,XG) por un conjunto de vértices VVG, se denota como G[V].

flowchart LR

name(Grafo G)
id1((1))
id2((2))
id3((3))
id4((4))
id5((5))

id1 --- id2
id1 --- id3
id2 --- id4
id3 --- id5
id3 --- id4
id4 --- id5
flowchart LR

name(Grafo H)
id1((1))
id2((2))
id3((3))
id4((4))
id5((5))

id1 --- id2
id2 --- id4
id3 --- id5
id4 --- id5
flowchart LR

name(Grafo I)
id1((1))
id2((2))
id3((3))
id5((5))

id1 --- id2
id1 --- id3
id3 --- id5

Analizando los dibujos, podemos decir que H es un subgrafo no inducido de G. Por otro lado, I es un subgrafo inducido de G por {v1,v2,v3,v5}.


Moverse por el grafo

Existen muchas formas de moverse a través de un grafo dado. En particular, vamos a utilizar los siguientes conceptos:

flowchart LR

id1((1))
id2((2))
id3((3))
id4((4))
id5((5))

id1 --- id2
id1 --- id3
id2 --- id3
id2 --- id4
id2 --- id5
id3 --- id5
id4 --- id5
P1=v2v3v1v2v4 es recorrido pero no caminoP2=v1v2v5v4 es caminoC1=v1v3v2v4v5v2v1 es circuito pero no cicloC2=v2v3v5v4v2 es ciclo

Dado un recorrido P, su longitud, l(P) es la cantidad de aristas que tiene. Por otro lado, la distancia entre dos vértices v y w, d(v,w), se define como la longitud del recorrido más corto entre v y w. En caso de no existir un recorrido entre v y w se dice que d(v,w)=. Para todo vértice v se cumple que d(v,v)=0.

La función distancia cumple las siguientes propiedades para todo u, v y w pertenecientes a V:


Grafos conexos

Un grafo G se dice conexo si existe un camino entre todo par de vértices. Por otro lado, llamamos componente conexa de G a un subgrafo conexo maximal (no esta incluido estrictamente en otro subgrafo conexo) de G.

flowchart LR

id1((1))
id2((2))
id3((3))
id4((4))
id5((5))
id6((6))
id7((7))
id8((8))
id9((9))
id10((10))

id1 --- id2
id3 --- id4
id4 --- id1
id1 --- id5
id5 --- id3
id6 --- id7
id8 --- id9
id9 --- id10
id10 --- id8

En este dibujo podemos ver un grafo no conexo con 3 componentes conexas.

flowchart LR

id1((1))
id2((2))
id3((3))
id4((4))
id5((5))

id1 --- id2
id2 --- id3
id4 --- id1
id1 --- id5

Por otro lado, en esta otra imagen se puede ver un grafo conexo.