Clase Grafos 2

170
GRAFOS

description

Explicación de grafos

Transcript of Clase Grafos 2

GRAFOS

Representación matricial

Representación matricial

GRAFOS PLANOS

En un mapa de carreteras, las líneas que indican las carreteras y autopistas se intersecan por lo general solamente en puntos de confluencia o en poblaciones. Pero hay ocasiones en que las carreteras parecen intersecarse cuando una se localiza sobre otra, en este caso, las carreteras están en diferentes niveles o planos.

Definición Un grafo (o multigrafo) G es plano si podemos dibujar G en el plano de modo que sus aristas se intersequen sólo en los vértices de G. Este dibujo de G se conoce como una inmersión de G en el plano.

EJEMPLO Los grafos de la figura son planos. El primero es un grafo 3-regular, ya que cada vértice tiene grado 3 ; es plano pues ningún par de aristas se intersecan, excepto en los vértices. El grafo b) parece un grafo no plano; las aristas {x, z} y {w, y} se cruzan en un punto distinto de un vértice. Sin embargo, podemos trazar nuevamente este grafo, como se muestra en la parte c) de la figura. En consecuencia K4 es plano.

Grafos planos. Un grafo plano es aquél que se puede dibujar en un solo plano y cuyas aristas no se cruzan entre sí. Ejemplo:

f

db

a

e

c

Euler establece que la ecuación R = L – V +2 es válida para un grafo plano y conexo. En donde R: Numero de regiones (áreas), L: Número de lados (arcos) y V: Número de vértices (nodos).

f

db

a

e

c

1 2

34 5

6

A = L – V +26 = 10 – 6 +2

Observar cómo la parte que rodea al grafo también se cuenta como área.

Ejemplo

Las áreas que permanecen conexas cuando las aristas son eliminadas se denominan regiones. Todo grafo plano tiene exactamente una única región no acotada llamada la región exterior. Los vértices y aristas incidentes con una región R se denominan la frontera de R.

Región Exterior

G tiene 5 Regiones.

Observación: V = 8 L= 11 R =5

V+R-L=2

Teorema: (Formula de Euler). Si G es un grafo conexo plano con V vértices, L aristas y R regiones, entonces

V - L+ R = 2

Procedemos por inducción.

Si L=0. Entonces G= K1 por lo que R =1, V = 1, L = 0 y 1+1-0 = 2 se cumple.

Suponemos que se cumple para L = k-1. Sea G un grafo de tamaño V con R regiones y se cumple que V+ R - k-1 = 2

Lo probamos para un grafo G de k aristas con V vértices y R regiones.Si G es un árbol se tiene que L = V - 1 y R = 1. Entonces V+1- V+1=2 y se cumple.Si G no es un árbol entonces tiene un ciclo. Eliminamos una arista de ese ciclo con lo que G-e tiene orden V, tamaño k-1 y R-1 regiones. Entonces como L=k-1 sabemos que es cierto y se tiene que:

V+R-1 – (k-1)=2 o lo que es lo mismoV+R- k = 2 que es lo que queríamos probar.

Definición: Un grafo plano se dice maximal si para cualquier par de vértices u,vno adyacentes de G, el grafo G+uv no es planar.

Teorema: Si G es planar maximal (V,L) con V ≥ 3. Entonces L=3V-6.

Si dibujamos G de forma que sea plano con R regiones entonces cada región es un triangulo. Si no:

Si sumamos todas las aristas de todos los triángulos de forma independiente, tendríamos 3R. Como cada arista toca dos regiones, este numero seria 2L.Es decir 3R =2L o R=2L/3. Por el teorema de Euler:V – L + R = 2 => V = L – R + 2 => V = L – 2L/3 + 2 => V = L/3 + 2

=> L = 3V - 6

Consecuencia: Si G es planar (V, L) con V ≥ 3. Entonces L ≤ 3V - 6.

Si G es maximal, entonces por el teorema anterior L = 3V - 6.

Si no es maximal, añadimos aristas hasta que sea maximal planar (V’,L’). Entonces V=V’ L < L’. Con lo que L < L’ = 3V’ – 6 = 3V - 6.

Teorema: Todo grafo planar tiene un vértice de grado 5 o menos

Sea G un grafo planar con V ≥ 7 ya que de otra forma todos los vértices tendrían grado 5 o menos.Por la consecuencia anterior L ≤ 3V - 6 o lo que es lo mismo 2L ≤ 6V - 12 Como ∑ v i =2L ≤ 6V - 12 . Entonces no todos los vértices pueden tener grado 6 ya que sino seria mayor que 6V - 12.

Definición: Un grafo que puede ser dibujado en el plano sin que sus aristas se intersecten se denomina planar. Un grafo que es dibujado en el plano sin que ninguna de sus aristas se intersecten se denomina plano.

Grafo planar Grafo plano

Teorema: Los grafos K5 y K3,3 son no planares.

K5 tiene orden 5 y L=10. Entonces 3V - 6 = 9 < L.Entonces vimos anteriormente que no puede ser planar

En este caso se cumple la formula. Se necesita una forma diferente. (reducción al absurdo)Supongamos que fuese planar. Entonces se debería cumplir la formula de Euler. Por tanto, 6 – 9 + R = 2 implica que R = 5.Como es bipartito cada región debería tener 4 aristas. Si sumamos el numero de aristas de las regiones tenemos que N ≥ 4R.Por otro lado, como K3,3 no tiene puentes toda arista esta en 2 regiones. Entonces N = 2L = 18 => 4R ≤ 18 o lo que es lo mismo R menor que 3,5. Lo cual es absurdo y por tanto planar.

Tanto K5 como K3,3 se utilizan como patrones para demostrar que otros grafos más grandes no son planos.

Definición: Una subdivisión de un grafo G es un grafo obtenido insertando vértices de grado 2 en las aristas de G.

Teorema de Kuratowski: Un grafo es planar si y solo si no contiene un subgrafo isomorfo a K5 o a K3,3 o a una subdivisión de K5 o a K3,3 .

Algoritmo para ver si un grafo es planar:

1.- Encontrar un ciclo que contenga todos los vértices del grafo2.- Dibujar las aristas que no han sido usadas dentro y fuera del grafo sin que se intersecten.

Ejemplo:a

e

b

f g

c d

h

Ejemplo:a

e

b

f g

c d

h

a f c h

dgbe

Ejemplo:a

e

b

f g

c d

h

a f c h

dgbe

Ejemplo 2:

Planar

No Planar

Solución

Por más que se trate de dibujar el grafo en forma plana no va a ser posible, ya que tiene dentro de él un grafo no plano K3,3.

7

5

6

4

1

3

8

2

9

De esta forma si se eliminan las aristas punteadas, los vértices de

valencia dos y los nodos que queden desconectados se descubrirá un grafo K3,3.

Dibujar en forma plana el siguiente grafo, o bien demostrar que no es plano encontrando dentro de él un grafo K3,3 o K5. En caso de ser plano probar que se cumple la ecuación de Euler R=L-V+2.

7

5

6

4

1

3

8

2

9

10

Ejemplo

Dibujar en forma plana el siguiente grafo o bien demostrar que no es plano encontrando dentro de él un grafo K3,3 o K5. En caso de ser plano probar que se cumple la ecuación de Euler R=L-V+2.

Tampoco este grafo es plano ya que dentro de él se puede encontrar:

7

56

4

1

3

8

2

9

Eliminando los lados de línea punteada y los vértices {1, 3, 5, 8, 10 y 11} se encuentra que hay un grafo K5 y que por lo tanto este grafo no es plano.

7

56

4

1

3

8

2

91011

Ejemplo

Dibujar en forma plana el siguiente grafo o bien demostrar que no es plano encontrando dentro de él un grafo K3,3 o K5. En caso de ser plano probar que se cumple la ecuación de Euler R=L-V+2.

Solución

En este caso se trata de un grafo plano como se muestra:

En éste se cumple la Ecuación de Euler:

R = L – V + 2

11 = 19 – 10 + 2

7

5 64

13

8

2

9

10

11

7

5

6 4

13

8

2

9 10

11

Ejemplo

Sea G(V,A) un grafo y sea C un conjunto de colores. La coloración de los vértices V del grafo usando un color del conjunto C se encuentra dada por la función.

Coloración

f: VC Si v1,v2 V adyacente entonces f(v1) ≠ f(v2)

Esto implica que cuando se lleva a cabo la coloración en vértices de un grafo, cada par de vértices adyacentes v1 y v2 del grafo deberán estar iluminados con un color diferente.

Número cromático

Es el número mínimo de colores con que se puede colorear un grafo G cuidando que los vértices adyacentes no tengan el mismo color. El número cromático se indica de la siguiente manera: (G)

La coloración de grafos es un problema NP-Computable, esto significa que no hay procedimientos eficientes para llevar a cabo esta tarea, sin embargo existen métodos aproximados que pueden dar buenos resultados. Uno de ellos es:

Seleccionar el vértice de mayor valencia v e iluminarlo con un color cualquiera del conjunto C.

Colorear los vértices adyacentes al vértice v verificando que no existan vértices adyacentes del mismo color. En caso de ser necesario llevar a cabo intercambio de colores con la finalidad de usar la menor cantidad de ellos. Si ya están coloreados todos los vértices del grafo finalizar, en caso contrario continuar con el paso 3.

Seleccionar el vértice v de mayor valencia que ya esté coloreado y que todavía tenga vértices adyacentes sin colorear. Regresar a paso 2.

1)

2)

3)

Se recomienda colorear del mismo color tantos vértices como sea posible e iluminar al mismo tiempo los vértices que compartan nodos vecinos.

Coloración

Encontrar el número cromático del siguiente grafo G.

Ejemplo

e

f

G

d

b

a

c

g

h

i

j

f

G

d

b

a

e

c

g

h,1

i

j

Paso 1:

e

f,3

G

d,3

b

a

c,2

g,2

h,1

i

j,2

Paso 2:

Paso 3:

f,3

G

d,3

b

a

c,2

g,2

h,1

i

j,2

Vértice seleccionado

e

f,3

G

d,3

b,3

a,1

c,2

g,2

h,1

i

j,2

Paso 2:e

(G) = 3

El número cromático es por lo tanto:

Vértice seleccionado

Ejemplo

f,3

G

d,3

b,3

a,1

c,2

g,2

h,1

i

j,2

Paso 3:e

f,3

G

d,3

b,3

a,1

c,2

g,2

h,1

i

j,2

Paso 2:e

Características del número cromático

Un grafo G tiene número cromático (G) = 1 si y sólo si no tiene aristas.

c,1

Ya que un vértice sólo puede iluminarse de un solo color

1)

El número cromático para un camino o un ciclo de longitud 2 es (G) = 2 ya que siempre se podrán alternar los colores.

2)

c,1 d,2

(G) = 2

b,2a,1 c,1

León

HurónConejo

Hámster

Tigre

León Tigre

Hámster

ConejoHurón

Coloración

Definición: • Un conjunto de vértices S en un grafo se dice independiente si ningún par de

vértices de S son adyacentes. • Un conjunto independiente S se dice independiente maximal si S no es un

subconjunto de algún otro conjunto independiente de vértices de S.

Conjunto Independiente

Conjunto Independiente maximal

Definición: El número de vértices del mayor conjunto independiente maximal de S se denomina el numero de independencia de G y se representa por β(G)

β(G)= 4

Definiciòn: Un conjunto S de vértices de un grafo G se dice que es un conjunto dominador si todo vértice que no esta en S es adyacente a algún vértice de S.El número de dominación σ(G) es el numero de vértices del conjunto dominador mas pequeño.

σ(G)=2

Caminos y circuitos

En un grafo se puede recorrer la información de diferente manera, lo que implica seguir distintas rutas para llegar de un nodo del grafo a otro.

Camino. Es una sucesión de lados que van de un vértice x a un vértice w (dichos lados se pueden repetir).

Circuito (Ciclo). Es un camino del vértice w al vértice w. Esto es, un camino que regresa al mismo vértice de donde salió.

Camino simple de longitud n. Es una sucesión de lados que van de un vértice x a un vértice w, en donde los lados que componen dicho camino son distintos e iguales a n.

Circuito simple de longitud n. Es aquél camino del vértice w al vértice w que solamente tiene un ciclo en la ruta que sigue.

f

h g

db

a

e

c

Ejemplo

Recorrido Camino Camino simple Circuito Circuito simple

{a,c,d,f}

{c,b,a,h,a}

{b,c,d,e,e,c,b}

{c,e,d,c}

{e,e}

{a,c,e,e,g,e,d,c,a}

{h,a,c,e,d,b}

En la tabla siguiente se muestran distintos recorridos del grafo que se encuentra al lado.

f

h g

db

a

e

c

Ejemplo

Recorrido Camino Camino simple Circuito Circuito simple

{a,c,d,f} * *

{c,b,a,h,a} *

{b,c,d,e,e,c,b} * *

{c,e,d,c} * * *

{e,e} * * *

{a,c,e,e,g,e,d,c,a} * *

{h,a,c,e,d,b} * *

En la tabla siguiente se muestran distintos recorridos del grafo que se encuentra al lado.

f

h

g

db

a

e

c

Camino de Euler. Es el camino que recorre todos los vértices pasando por todas las ramas solamente una vez.

Una característica del camino de Euler es que el recorrido sale de un vértice de valencia impar y termina también en un vértice de valencia impar.

Camino de Euler es {a, b, e, h, g, e, d, a, c, f, d, g, f, h}

Circuito de Euler. Es aquel ciclo que recorre todos los vértices pasando por todos los lados solamente una vez.

“La firma del diablo” es un juego que consiste en dibujar una figura sin levantar el lápiz del papel, partiendo de un punto y regresando nuevamente a él, sin pasar dos veces por una misma arista. Este problema se puede resolver por medio del circuito de Euler.

El algoritmo Fleury permite determinar un circuito de Euler

Si todos los vértices del grafo ya están desconectados, ya se tiene el circuito de Euler y finalizar. De otra manera continuar con el paso 3.

Verificar que el grafo sea conexo y que todos los vértices tengan valencia par. Si no cumple con estas condiciones entonces el grafo no tiene circuito de Euler y finalizar.

Si cumple con la condición anterior seleccionar un vértice arbitrario para iniciar el recorrido.

Escoger una arista a partir del vértice actual. Esa arista seleccionada no debe ser Lado puente* a menos que no exista otra alternativa.

Desconectar los vértices que están unidos por la arista seleccionada.

1)

2)

3)

4)

5)

Ejemplo

A partir del siguiente grafo, determinar un circuito de Euler

h gf

d

ba

ec

Usando el algoritmo de Fleury

Se observa que es conexo y todos los vértices tienen valencia par, por lo tanto tiene circuito de Euler.

1)

Seleccionar un vértice arbitrario, por ejemplo {b} y llamarlo vértice actual.

2)

Escoger una arista que no sea puente a partir del vértice actual. (Arista punteada {b,d})

3)

Eliminar la arista seleccionada. El vértice actual ahora es (d).

4)

h gf

d

ba

ec

Si todos los vértices del grafo ya fueron eliminados, ya se tiene el circuito de Euler, en caso contrario regresar al paso 3.

5)

Escoger una arista que no sea puente a partir del vértice actual. {b,d,e)

3.1)

f

ba

h g

d ec

Eliminar la arista seleccionada. El vértice actual ahora es (e)

4.1)

h gf

d

ba

ec

h gf

d

ba

ec

Escoger una arista que no sea puente a partir del vértice actual. {b,d,e,b)

3.2)

ba

fh g

d ec

Eliminar la arista seleccionada. El vértice actual ahora es (b).

4.2)

ba

fh g

d ec

Escoger una arista que no sea puente a partir del vértice actual. {b,d,e,b,c)

3.3)

ba

fh g

d ec

Eliminar la arista seleccionada. El vértice actual ahora es (c).

4.3)

h f

ba

g

d ec

Escoger una arista que no sea puente a partir del vértice actual. {b,d,e,b,c,h). Observar cómo en este caso no puede ser la arista (c,a) ya que es puente y el grafo ya no sería conexo.

3.4)

f

ba

h g

d ec

Eliminar la arista seleccionada. El vértice actual ahora es (h).

4.4)

f

ba

h g

d ec

Continuar hasta que todos los vértices estén desconectados para obtener el circuito de Euler.

Ejemplo

Definición: Un circuito es un recorrido con el mismo origen y final.Un circuito euleriano de un multi - grafo conexo G es un circuito que contiene todas las aristas de G.Un grafo G con un circuito euleriano se denomina un grafo euleriano.

u2

u9

u6

u4

u3

u5

u7

u1

u8

u1– u2–u8-u9-u2-u3-u4-u2-u7-u4-u5-u6-u7-u1

Otra posibilidad:u1-u2-u7-u4-u2-u8-u9-u2-u3-u4-u5-u6-u7-u1

u1 u2

u5u7 u6

u8 u9 u2 u3 u4

u4 u7 u2

Definición: Un recorrido es una cadena sin aristas repetidas (se pueden repetir vértices). Un recorrido euleriano de un multi - grafo conexo G es un recorrido que contiene todas las aristas de G.

v1

v2

v6

v5

v3

v4

v1–v2-v4-v3-v2-v6-v5-v4

Otra opción:v1-v2-v3-v4-v2-v6-v5-v4

Teorema: Un multigrafo conexo G es euleriano si y solo si el grado de cada vérticees par.

Si G es euleriano entonces todos los vértices tienen grado par.

si todos los vértices tienen grado par entonces G es euleriano.

Entonces contiene un circuito euleriano que empieza y acaba en un vértice v. Cada vez que aparece un vértice u ≠ v en el circuito , se añade dos a su grado. Yaque por una arista se accede y por otra se sale.Lo mismo ocurre con v, excepto para la primera y ultima aparición que añaden 1.

Suponemos que todos los vértices tienen grado par y construimos el circuito euleriano T.Elegimos un vértice v y empezamos un recorrido hasta que llegamos a un vértice que ya no tiene aristas que no hayamos usado. Entonces cuando esto pasa, este vértice esv. ¿Por qué?

Antes de llegar a w por ultima vez, cada vez que hemos pasado por el hemos restado dos grados: el de la arista de entra y el de la arista de salida. Cuando accedemos a wpor ultima vez, hemos usado un numero impar de aristas. Si este vértice w no fuese v debería tener otra arista que no hemos usado porque si no tendría grado impar. Esto contradeciría la hipótesis de que no tiene mas aristas que no han sido usadas.Entonces, T es un circuito.

Si T ha usado todas las aristas es un circuito euleriano.

Si no se han usado todas las aristas y como G es conexo, existe algún vértice v de Tque tiene aristas que no han sido usadas. (Si no el resto de los vértices no usados no estarían conectados a los de T)

Sea H el grafo que se obtiene de G eliminando las aristas del circuito T. Por el mismo razonamiento anterior, podemos encontrar un circuito T’ que comience en v. Este circuito se puede insertar en T de forma que tengamos un circuito T1 quecontiene las aristas de ambos circuitos.

Si este circuito ha usado todas las aristas de G seria un circuito euleriano.Si no vamos repitiendo el proceso hasta que en algún momento se hayan usado todas las aristas.

v1

v6

v4

v3v5

v2

Ejemplo1:

-Es conexo.-Todos los vértices tienen grado par.Entonces existe un circuito euleriano.

v1

v6

v4

v3v5

v2

Ejemplo1:

v1-v2

v1

v6

v4

v3v5

v2

Ejemplo1:

v1-v2-v3

v1

v6

v4

v3v5

v2

Ejemplo1:

v1-v2-v3-v4

v1

v6

v4

v3v5

v2

Ejemplo1:

v1-v2-v3-v4-v5

v1

v6

v4

v3v5

v2

Ejemplo1:

v1-v2-v3-v4-v5-v6

v1

v6

v4

v3v5

v2

Ejemplo1:

v1-v2-v3-v4-v5

v1

v6

v4

v3v5

v2

Ejemplo1:

v1-v2-v3-v4-v5

v3-v5

v1

v6

v4

v3v5

v2

Ejemplo1:

v1-v2-v3-v4-v5-v6

v3-v5-v6

v1

v6

v4

v3v5

v2

Ejemplo1:

v1-v2-v3-v4-v5-v6

v3-v5-v6-v3

v1-v2-v3-v5-v6-v3-v4-v5

Ejemplo2:-Es conexo.-Todos los vértices tienen grado par.Entonces existe un circuito euleriano.

v2 v6

v5

v4

v7

v1

v3

Ejemplo2:

v2 v6

v5

v4

v7

v1

v3

v1-v4-v6-v2-v5-v1

Ejemplo2:

v2 v6

v5

v4

v7

v1

v3

v1-v4-v6-v2-v5-v1

Ejemplo2:

v2 v6

v5

v4

v7

v1

v3

v1-v4-v6-v2-v5-v1

v2-v7-v6-v5-v7-v3-v4-v2

v1-v4-v6-v2-v7-v6-v5-v7-v3-v4-v2- v5-v1

Teorema: Sea G un multigrafo conexo no trivial. Entonces G contiene un recorrido euleriano si y solo si tiene dos vértices de grado impar. Además, el recorrido empieza en uno de ellos y acaba en el otro.

Sea G un grafo con únicamente dos vértices impares u y v. Sea H el grafo que se obtiene añadiendo un vértice z que no pertenece a G y las aristas uz y vz. Entonces como H es conexo y todos los vértices tienen grado par existe un circuito euleriano:

u1 u2 u3 u z v un-1 un

u1 u2 u3 u v un-1 un

Entonces:

Es un recorrido euleriano.

6.2 Euler Graphs 59

ANIMACION DEL GUARDIA DE SEGURIDAD

N

C

F

D EBA

M

KJ

I

L

HG

Drats!I’m Stuck

Employee Parking LotStart

N

C

F

D EBA

M

KJ

I

L

HG

Darn!I got all the doors, but…

StartEmployee Parking Lot

In floor plans the vertices are

The

room

s

The

doors

50%50%

1. The rooms

2. The doors

N

C

F

D EBA

M

KJ

I

L

HG

All Clear!!

Employee Parking Lot

Start

Caminos y ciclos Hamiltonianos

En 1859, el matemático irlandés Sir William Rowan Hamilton (1805-1865) desarolló un juego que vendió a un fabricante de juguetes de Dublín. El juego era un dodecaedro regular de madera con 20 esquinas (vértices) en las que aparecían inscritos los nombres de las ciudades más importantes. El objetivo del juego era encontrar un ciclo alrededor de las aristas del sólido, de modo que cada ciudad estuviera en el ciclo (exactamente) una vez.

Definición: Un grafo G se dice que es Hamiltoniano si tiene un ciclo recubridor. Es decir, un ciclo que pasa por cada vértice una sola vez.

Grafos Hamiltonianos

h

Circuito de Hamilton. Es un problema similar al circuito de Euler, pero en lugar de pasar por todos los lados del grafo solamente una vez como lo hace el circuito de Euler, en el circuito de Hamilton se pasa por cada vértice solamente una vez.

En un grafo se sabe de antemano que tiene un circuito de Euler, si es conexo y todos sus vértices tienen valencia par, pero no hay forma de saber con anticipación si tiene o no un circuito de Hamilton.

Encontrar (si es posible) un circuito de Hamilton en el siguiente grafo.

j

i

f

h

g

d

b

a

ec

Ejemplo:

j

i

f

g

d

b

a

ec

RespuestaObservar como no es necesario que se pase por todas las aristas.

Circuito de Hamilton: {a,b,h,g,e,j,i,f,d,c,a}

Ejemplo

• El número de vértices se denomina el orden p de un grafo.

• El número de aristas es el tamaño q del grafo.

X

Y

Z

U

W

V Orden=6Tamaño=5

Observación: q es menor o igual a p (p-1)/2.

Ningún grafo conexo con vértices de corte es Hamiltoniano:

Teorema. Si un Grafo G es Hamiltoniano, entoncesK (G-S) ≤ | S |

Para todo subconjunto propio no vacío S de V (G).

Sea G un grafo Hamiltoniano y sea C un ciclo Hamiltoniano. Sea n el numerode componentes de G-S: G1, G2, … , G n. Sea ui el ultimo vértice de Gi i sea vi el vértice que inmediatamente sigue a ui en C. Entonces vi pertenece a S y hay tantosvértices en S como componentes en G-S.

Observar que este teorema sirve para probar que un grafo es no Hamiltoniano. PeroPodría habar algunos grafos no Hamiltonianos que tienen esta propiedad.!!!!!!!!

El Grafo de Petersen.

Definición: Un camino Hamiltoniano de un grafo G es un camino recubridor de G

Dado un grafo con un ciclo hamiltoniano, la eliminación de cualquier arista en el ciclo produce un camino hamiltoniano. Sin embargo, es posible que un grafo tenga un camino hamiltoniano sin que tenga un ciclo hamiltoniano.

Definición Si G = (V, E) es un grafo o multigrafo tal que |V| 3, decimos que G tiene un ciclo Hamiltoniano si existe un ciclo en G que contenga cada vértice de V. Un camino Hamiltoniano es un camino simple (y no un ciclo) de G que contiene todos los vértices.

Podría parecer que la existencia de un ciclo (camino) Hamiltoniano y la existencia de un circuito (recorrido) Euleriano para un grafo son problemas similares.

El ciclo (camino) Hamiltoniano tiene como objetivo pasar por cada vértice de un grafo una sola vez; el circuito (recorrido) recorre el grafo pasando por cada arista exactamente una vez.

Por desgracia, no existe una relación útil entre las dos ideas y, a diferencia de los circuitos (recorridos) Eulerianos, no existen condiciones necesarias y suficientes en un grafo G que garanticen la existencia de un ciclo (camino) Hamiltoniano.

EJEMPLO Si G es el grafo de la figura, las aristas {a,b}, {b,c}, {c,f}, {f,e}, {e,d}, {d,g}, {g,h}, {h,i} forman un camino hamiltoniano para G. Pero ¿tiene G un ciclo Hamiltoniano?.

Como G tiene nueve vértices, si existe un ciclo Hamiltoniano en G, éste debe contener nueve aristas. Comencemos en un vértice b y tratemos de construir un ciclo Hamiltoniano.

Con las aristas {c, f} y {f, i} en el ciclo, no podemos tener la arista {e, f} en el ciclo. Una vez en e, ya no podemos continuar. Por lo tanto, este grafo no tiene un ciclo Hamiltoniano.

Sugerencias útiles para tratar de encontrar un ciclo Hamiltoniano en un grafo G = (V, E).

1) Si G tiene un ciclo Hamiltoniano, entonces para vV, grad(v) 2.

2) Si aV y grad(a) = 2, entonces las dos aristas incidentes con el vértice a deben aparecer en cualquier ciclo Hamiltoniano de G.

3) Si aV y grad(a) 2, cuando tratamos de construir un ciclo Hamiltoniano, una vez que hemos pasado por el vértice a, dejamos de tener en cuenta las aristas no utilizadas incidentes con a.

4) Al construir un ciclo Hamiltoniano para G, no podemos obtener un ciclo para un subgrafo de G a menos que contenga todos los vértices de G.

EJEMPLO En la figura tenemos un grafo conexo G y queremos saber si G contiene un camino Hamiltoniano. La parte b) de la figura proporciona el mismo grafo con un conjunto de etiquetas x, y.

Ahora, como , si G tuviera un ciclo Hamiltoniano debería haber una sucesión alternativa de 5 letras x y 5 letras y. Solamente tenemos 4 vértices etiquetados con x. De ahí que G no tenga un camino (o ciclo) Hamiltoniano.

10V

¿Porqué funciona este argumento? En la figura se ha vuelto a dibujar el mismo grafo y vemos que es bipartito. Un grafo bipartito no puede tener un ciclo de longitud impar. También es cierto que si el grafo no tiene un ciclo simple de longitud impar, entonces es bipartito. En consecuencia cuando un grafo conexo no tiene ciclo de longitud impar (y es bipartito), el método descrito anteriormente puede ser útil para determinar si el grafo no tiene un camino Hamiltoniano.

EJEMPLO En el campamento que el profesor Alfredo ha organizado con su grupo de antropología, 17 estudiantes comen juntos en una mesa circular. Como intentan conocerse mejor, tratan cada tarde de sentarse con dos compañeros distintos. ¿Durante cuántas tardes pueden hacer esto? ¿Cómo pueden hacerlo?.

Para resolver este problema, consideremos el grafo Kn, donde n 3 y n es impar. Este grafo tiene n vértices (uno para cada estudiante) y aristas.

Un ciclo Hamiltoniano corresponde a una disposición de lugares. Cada uno de estos ciclos tiene n aristas, por lo que se tiene como máximo ciclos Hamiltonianos sin que dos

de ellos tengan una arista en común.

2/12

nn

n

2/12

/1

n

nn

Consideremos el círculo de la figura a) y el subgrafo de Kn que consta de n vértices y n aristas {1,2}, {2,3}, ... , {n–1, n}, {n, 1}. Mantenemos los vértices en la circunferencia fijos y rotamos este ciclo Hamiltoniano en el sentido de las manecillas del reloj, hasta el ángulo [1/(n–1)](2). Esto produce el ciclo Hamiltoniano (ver b)) formado por las aristas {1,3}, {3,5},{5,2},{2,7}, ... , { n, n–3},{n–3, n–1}, {n–1, 1}. Este ciclo Hamiltoniano no tiene aristas en común con el primer ciclo.

Si n 7 y seguimos rotando de esta manera el ciclo de la figura a), hasta los ángulos [k/(n–1)]( 2), donde 2 k (n–3)/2 obtenemos un total de (n–1)/2 ciclos Hamiltonianos, sin que haya dos aristas en común.

Por lo tanto, los 17 estudiantes que participan en el campamento pueden comer durante [(17-1)/2] = 8 días antes de que tengan que sentarse junto a otro estudiante por segunda vez. Usando la figura a) con n=17, podemos obtener ocho de estas posibles disposiciones.

Algoritmos sobre grafos

Algoritmos de Grafos No Dirigidos• Algoritmos de árboles abarcadores de costo mínimo:

– Algoritmo de Prim.– Algoritmo de Kruskal.

• Algoritmos de determinación de los caminos más cortos:– Algoritmo del camino más corto.

• Algoritmos de recorrido o búsqueda:– Algoritmo de búsqueda en anchura.– Algoritmo de búsqueda en profundidad.– Bosques abarcadores.

81

Árboles de expansión: Algoritmo de Prim

• Un árbol de expansión de un grafo no dirigido G=(V,A) y conexo, es un subgrafo G’=(V,A’) no dirigido, conexo y sin ciclos. Importante: contiene todos los vértices de G.

• El algoritmo de Prim intenta encontrar un árbol de expansión de un grafo, cuyas aristas sumen el peso mínimo.

Algoritmos de Grafos No Dirigidos – Árboles Abarcadores de Costo Mínimo

• Sea G = (V,A) un grafo conexo en donde cada arista (u,v) de A tiene un costo asociado c(u,v).

• Un árbol abarcador de G es un árbol libre que conecta todos los vértices de V, su costo es la suma de los costos de las aristas del árbol.– Se quiere obtener el árbol abarcador de costo mínimo para G.

• Una aplicación típica de los árboles abarcadores de costo mínimo tiene lugar en el diseño de redes de comunicación.– Un árbol abarcador de costo mínimo representa una red que

comunica todas las ciudades a un costo minimal.

• Hay diferentes maneras de construir un árbol abarcador de costo mínimo.

• Muchos métodos utilizan la propiedad AAM.– Sea G = (V,A) un grafo conexo con una función de costo

definida en las aristas.– Sea U algún subconjunto propio del conjunto de vértices V.– Si (u,v) es una arista de costo mínimo tal que u U y v V-

U, existe un árbol abarcador de costo mínimo que incluye (u,v) entre sus aristas.

• El algoritmo de Prim es un algoritmo de la teoría de los grafos para encontrar un árbol abarcador de costo mínimo en un grafo conexo, no dirigido y cuyas aristas están etiquetadas.

• En otras palabras, el algoritmo encuentra un subconjunto de aristas que forman un árbol con todos los vértices, donde el peso total de todas las aristas en el árbol es el mínimo posible.

• Si el grafo no es conexo, entonces el algoritmo encontrará el árbol abarcador de costo mínimo para uno de los componentes conexos que forman dicho grafo no conexo.

• El algoritmo fue diseñado en 1930 por el matemático Vojtech Jarnik y luego de manera independiente por el científico computacional Robert C. Prim en 1957 y redescubierto por Dijkstra en 1959.

• Por esta razón, el algoritmo es también conocido como algoritmo DJP o algoritmo de Jarnik.

86

• El algoritmo comienza cuando se asigna a un conjunto U un valor inicial (un vértice del grafo), en el cual “crece” un árbol abarcador, arista por arista.

• En cada paso localiza la arista más corta (u,v) que conecta los vértices, y después agrega u en U. Este paso se repite hasta que U = V.

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

• Ejemplo:– Encontrar el árbol abarcador de costo mínimo del

siguiente grafo no dirigido utilizando el algoritmo de Prim.

624

663

255

46551

356

516

6

5

4

3

2

1654321

T v V U V-U

--- {1,2,3,4,5,6} {1} {2,3,4,5,6}

624

663

255

46551

356

516

6

5

4

3

2

1654321

T v V U V-U

--- {1,2,3,4,5,6} {1} {2,3,4,5,6}

{(1,3)} 3 {1,2,3,4,5,6} {1,3} {2,4,5,6}

624

663

255

46551

356

516

6

5

4

3

2

1654321

T v V U V-U

--- {1,2,3,4,5,6} {1} {2,3,4,5,6}

{(1,3)} 3 {1,2,3,4,5,6} {1,3} {2,4,5,6}

{(1,3),(3,6)} 6 {1,2,3,4,5,6} {1,3,6} {2,4,5}

624

663

255

46551

356

516

6

5

4

3

2

1654321

T v V U V-U

--- {1,2,3,4,5,6} {1} {2,3,4,5,6}

{(1,3)} 3 {1,2,3,4,5,6} {1,3} {2,4,5,6}

{(1,3),(3,6)} 6 {1,2,3,4,5,6} {1,3,6} {2,4,5}

{(1,3),(3,6),(6,4)} 4 {1,2,3,4,5,6} {1,3,4,6} {2,5}

102

624

663

255

46551

356

516

6

5

4

3

2

1654321

T v V U V-U

--- {1,2,3,4,5,6} {1} {2,3,4,5,6}

{(1,3)} 3 {1,2,3,4,5,6} {1,3} {2,4,5,6}

{(1,3),(3,6)} 6 {1,2,3,4,5,6} {1,3,6} {2,4,5}

{(1,3),(3,6),(6,4)} 4 {1,2,3,4,5,6} {1,3,4,6} {2,5}

{(1,3),(3,6),(6,4),(3,2)} 2 {1,2,3,4,5,6} {1,2.3,4,6} {5}

103

624

663

255

46551

356

516

6

5

4

3

2

1654321

T v V U V-U

--- {1,2,3,4,5,6} {1} {2,3,4,5,6}

{(1,3)} 3 {1,2,3,4,5,6} {1,3} {2,4,5,6}

{(1,3),(3,6)} 6 {1,2,3,4,5,6} {1,3,6} {2,4,5}

{(1,3),(3,6),(6,4)} 4 {1,2,3,4,5,6} {1,3,4,6} {2,5}

{(1,3),(3,6),(6,4),(3,2)} 2 {1,2,3,4,5,6} {1,2.3,4,6} {5}

{(1,3),(3,6),(6,4),(3,2),(2,5)} 5 {1,2,3,4,5,6} {1,2,3,4,5,6} {}

104

624

663

255

46551

356

516

6

5

4

3

2

1654321

T v V U V-U

--- {1,2,3,4,5,6} {1} {2,3,4,5,6}

{(1,3)} 3 {1,2,3,4,5,6} {1,3} {2,4,5,6}

{(1,3),(3,6)} 6 {1,2,3,4,5,6} {1,3,6} {2,4,5}

{(1,3),(3,6),(6,4)} 4 {1,2,3,4,5,6} {1,3,4,6} {2,5}

{(1,3),(3,6),(6,4),(3,2)} 2 {1,2,3,4,5,6} {1,2.3,4,6} {5}

{(1,3),(3,6),(6,4),(3,2),(2,5)} 5 {1,2,3,4,5,6} {1,2,3,4,5,6} {}

Pseudocódigo del algoritmo:

Algoritmo de Kruskal• El algoritmo de Kruskal es un algoritmo de la teoría

de grafos para encontrar un árbol abarcador de costo mínimo en un grafo conexo y ponderado.

• Es decir, busca un subconjunto de aristas que, formando un árbol, incluyen todos los vértices y donde el valor total de todas las aristas del árbol es el mínimo.

• Si el grafo no es conexo, entonces busca un bosque abarcador de costo mínimo (un árbol abarcador de costo mínimo para cada componente conexa).

• Este algoritmo fue escrito por Joseph Kruskal.

• Funciona de la siguiente manera:– Se crea un bosque B (un conjunto de árboles),

donde cada vértice del grafo es un árbol separado.– Se crea un conjunto C que contenga a todas las

aristas del grafo.– Mientras C es sea vacío:

• Eliminar una arista de peso mínimo de C.• Si esa arista conecta dos árboles diferentes se añade al

bosque, combinando los dos árboles en un solo árbol.• En caso contrario, se desecha la arista.

– Al acabar el algoritmo, el bosque tiene una sola componente, la cual forma un árbol abarcador de costo mínimo del grafo.

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

12

75

3

6

5

4 8

910

76

4

5

11

5

3

6

5

47

6

4

• Ejemplo:– Encontrar el árbol abarcador de costo mínimo del

siguiente grafo no dirigido utilizando el algoritmo de Kruskal.

Costo Aristas

1 (1,3)

2 (4,6)

3 (2,5)

4 (3,6)

5 (1,4) – (2,3) – (3,4)

6 (3,5) – (5,6)

Costo Aristas

1 (1,3)

2 (4,6)

3 (2,5)

4 (3,6)

5 (1,4) – (2,3) – (3,4)

6 (3,5) – (5,6)

Algoritmo del Camino Más Corto• Este algoritmo busca el camino más corto entre dos vértices.• Recibe como entrada el grafo no dirigido G, el vértice inicial y el

vértice final.• El algoritmo es el siguiente:

1. D[a] = 0, si x ≠ a D[x] = . Se tiene el conjunto de vértices T.2. Si z T terminar y D[z] es la distancia más corta entre a y z.3. Escoja v T donde D[v] es el valor mínimo. T = T – {v}.4. Si x T y es adyacente a v D[x] = min{D[x],D[v]+c(v,x)}.5. Pase al paso 2.

¥ ¥

¥ ¥

0s

u v

yx

10

5

1

2 39

4 67

2

10 ¥

5 ¥

0s

u v

yx

10

5

1

2 39

4 67

2

u v

8 14

5 7

0s

yx

10

5

1

2 39

4 67

2

8 13

5 7

0s

u v

yx

10

5

1

2 39

4 67

2

8 9

5 7

0

u v

yx

10

5

1

2 39

4 67

2

8 9

5 7

0

u v

yx

10

5

1

2 39

4 67

2

seleccionadosactual…. d c b aIteración

Colocar en la matriz la distancia que existe de la ciudad origen a ella misma. (Cuando se trata de encontrar la distancia de una ciudad a ella misma considerar que es 0). A todas las demás columnas se les coloca ∞ como distancia.

3.-

….∞∞∞00

seleccionadosactual…. d c b aIteración

Usar una matriz que tenga como columnas el número de iteración, una columna para cada nodo (a,b,c,d,….), la columna actual que se utilizará para indicar el vértice que se seleccione en cada iteración y una columna seleccionados para registrar a los vértices que se van seleccionado en el proceso, como se muestra en la siguiente tabla.

2.-

ALGORITMO DE DIJKSTRA

Seleccionar la ciudad origen (a).1.-

Iteración a b c d …. actual seleccionados

0 0 ∞ ∞ ∞ …. a a

Colocar en la columna actual el vértice que tenga la distancia más corta de entre todos los nodos. (Es obvio que en esta primera iteración es el nodo origen.) En la columna seleccionados registrar dicho nodo escogido para ya no volverlo a elegir. (En nuestro caso le colocamos a esta distancia en negrita y subrayado.)

4.-

Registrar en la columna de cada uno de los nodos la distancia más corta que resulta de sumar la distancia registrada en el nodo actual + distancia a los vértices adyacentes a él y seleccionar la distancia más corta cuyo nodo aún no esté seleccionado de esa fila de la matriz. Suponer que d1 > d2, por lo tanto la matriz será:

5.-

Iteración a b c d …. actual seleccionados

0 0 ∞ ∞ ∞ …. a a

1 0 d1 d2 ∞ ….

Si el nodo seleccionado tiene una distancia diferente de ∞ que es menor o igual a la que se obtiene de sumar la distancia registrada en la columna del nodo actual + la distancia de ese nodo actual a los nodos adyacentes a él dejarla tal como está, en caso contrario cambiarla por la nueva suma.

Registrar en la columna actual el vértice que tenga la distancia más corta de entre todos los nodos y que no haya sido seleccionado hasta ahora. Además de anotar en la columna seleccionados dicho nodo para ya no volverlo a elegir.

6.-

Iteración a b c d …. actual seleccionados

0 0 ∞ ∞ ∞ …. a a

1 0 d1 d2 ∞ …. c a,c

Si ya están todos los vértices seleccionados finalizar. En caso contrario regresar al paso 5.

7.-

• Ejemplo:– Encontrar los caminos más cortos entre el vértice

1 y todos los demás del siguiente grafo dirigido.

Iteración S w D[2] D[3] D[4] D[5]Inicial {1} --- 10 30 100

Iteración S w D[2] D[3] D[4] D[5]Inicial {1} --- 10 30 100

1 {1,2} 2 10 60 30 100

Iteración S w D[2] D[3] D[4] D[5]Inicial {1} --- 10 30 100

1 {1,2} 2 10 60 30 1002 {1,2,4} 4 10 50 30 90

Iteración S w D[2] D[3] D[4] D[5]Inicial {1} --- 10 30 100

1 {1,2} 2 10 60 30 1002 {1,2,4} 4 10 50 30 903 {1,2,4,3} 3 10 50 30 60

Iteración S w D[2] D[3] D[4] D[5]Inicial {1} --- 10 30 100

1 {1,2} 2 10 60 30 1002 {1,2,4} 4 10 50 30 903 {1,2,4,3} 3 10 50 30 604 {1,2,4,3,5} 5 10 50 30 60

• Ejemplo:– Encontrar el camino más corto entre los vértices a

y h.

][

][

][

][

][

][

][

0][

},,,,,,,{

hD

gD

fD

eD

dD

cD

bD

aD

hgfedcbaT

][

][

1][

][

][

][

2][

0][

},,,,,,{

hD

gD

fD

eD

dD

cD

bD

aD

hgfedcbT

1}10,min{][

2}20,min{][ a

fD

bDaAdyacente

][

6][

1][

][

4][

][

2][

0][

},,,,,{

hD

gD

fD

eD

dD

cD

bD

aD

hgedcbT

6}51,min{][

4}31,min{][ a

gD

dDfAdyacente

][

6][

1][

6][

4][

4][

2][

0][

},,,,{

hD

gD

fD

eD

dD

cD

bD

aD

hgedcT

6}42,min{][

4}22,4min{][

4}22,min{][

a

eD

dD

cD

bAdyacente

5][

6][

1][

6][

4][

4][

2][

0][

},,,{

hD

gD

fD

eD

dD

cD

bD

aD

hgedT

5}14,min{][

6}34,6min{][ a

hD

eDcAdyacente

5][

6][

1][

6][

4][

4][

2][

0][

},,{

hD

gD

fD

eD

dD

cD

bD

aD

hgeT

6}44,6min{][ a eDdAdyacente

5][

6][

1][

6][

4][

4][

2][

0][

},{

hD

gD

fD

eD

dD

cD

bD

aD

geT

6}65,6min{][ a gDhAdyacente

5][

6][

1][

6][

4][

4][

2][

0][

},{

hD

gD

fD

eD

dD

cD

bD

aD

geT

k

f

14

4

3

3

1

2

1

42

2 d

b

ae

c

g h i j

2

4

2

1

22

3

2

Encontrar la ruta más corta para ir de la ciudad origen (a) a las ciudades restantes.

Ejemplo

k

f1

4

4

3

3

1

21

42

2 d

b

ae

c

g h i j

2

4

21

223

2

Encontrar la ruta más corta para ir de la ciudad origen (a) a las ciudades restantes.

Ejemplo

Ite a b c d e f g h i j k act seleccionados

0 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ a a

1 0 4 ∞ ∞ 1 ∞ 3 ∞ ∞ ∞ ∞ e a,e

2 0 3 4 ∞ 1 5 3 3 ∞ ∞ ∞ b a,e,b

3 0 3 4 ∞ 1 5 3 3 ∞ ∞ ∞ g a,e,b,g

4 0 3 4 ∞ 1 5 3 3 ∞ ∞ ∞ h a,e,b,g,h

5 0 3 4 ∞ 1 4 3 3 5 ∞ ∞ c a,e,b,g,h,c

6 0 3 4 5 1 4 3 3 5 ∞ ∞ f a,e,b,g,h,c,f

7 0 3 4 5 1 4 3 3 5 6 ∞ d a,e,b,g,h,c,f,d

8 0 3 4 5 1 4 3 3 5 6 8 i a,e,b,g,h,c,f,d,i

9 0 3 4 5 1 4 3 3 5 6 8 j a,e,b,g,h,c,f,d,i,j

10 0 3 4 5 1 4 3 3 5 6 8 k a,e,b,g,h,c,f,d,i,j,k

Ejemplo:

Para ir de a a j la distancia mínima es 6. Para ir de a a k la distancia es 8.