Grafo III Euler

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 31

.

Unidad 5: 1

CONTENEDORES no LINEALES
Tema: GRAFO

Algoritmos: Parte III

CicloEuler(G)

(Apuntes de apoyo a clases teóricas)


Bibliografía:
2

1. Hibbard, Thomas N y Yazlle, Jorge F. EUNSA. (2015) Matemática Discreta.

2. Grimaldi. Addison Wesley (1989), Matemática discreta y combinatoria.

3. Aho, Hopcroft y Ullman. Addison Wesley. (1988). Estructuras de Datos y


Algoritmos.

4. Brassard, Gilles; Bratley, Paul. PRENTICE HALL (1997). Fundamentos de Algoritmia..

5. Kolman - Ross-Wrigth , Estructuras de Matemática Discreta para la


Computación. Cap 4 y 6.
Objetivos de la clase:
3

Seguimos mostrando distintos algoritmos sobre Grafos, independientemente de


la estructura de datos elegida para su representación en memoria.

1. Encontrar un ciclo que recorra todas las aristas de G exactamente una


sola vez.

2. Determinar un camino (que a su vez puede ser un ciclo) que


recorra todas las aristas de G exactamente una sola vez.
Grafos: Ciclo de Euler
4

Leonhard Euler: (1707-1783) (Suiza) Fundador de la teoría de Grafos

En 1736, surge la formulación del problema de los puentes de Königsberg (Rusia) ,


propagándose a modo de juego y de trivia matemática entre los intelectuales de la época.

Dado el mapa de Königsberg, con el río Pregel dividiendo


el plano en cuatro regiones distintas, unidas a través de los
siete puentes, ¿es posible dar un paseo comenzando
desde cualquiera de las regiones, pasando por todos los
puentes, recorriendo sólo una vez cada uno, y
regresando al mismo punto de partida?

Si las regiones son


los nodos, los El grafo:
puentes son las
aristas…
Cuál es la respuesta
al problema?
Grafos: Ciclo de Euler
5

Ciclo de Euler:
Es un camino cuyo recorrido empieza y termina en el mismo nodo y
todas las aristas del Grafo aparecen una y solo una vez.
Consideraciones:
1) Vamos a partir de un nodo, recorremos todas las aristas del grafo exactamente
una sola vez y volvemos al nodo de partida.
2) Vamos a seleccionar las aristas de modo tal que el Grafo resultante no quede
disconexo.
3) Definimos arista puente:
Una arista (u, v) es un puente en un grafo conexo G,
si al eliminar esa arista se genera un grafo resultante disconexo.
Por ejemplo:
La arista b = (w, x) es una
arista puente en este grafo:
Su eliminación crea el siguiente
grafo disconexo:
Grafos: Ciclo de Euler
6

Busquemos un ciclo de Euler, teniendo en cuenta las consideraciones anteriores:


- Partimos del nodo w, elijo una arista (no puente) y la borramos para no volver a
usarla:
No elijo ‘d’, es
arista puente,
Elijo ‘a’ Elijo ‘b’ Elijo ‘e’ elijo ‘f’ Elijo ‘g’

Hemos usado todas las aristas


Elijo ‘h’ Elijo ‘d’ Elijo ‘c’ de G y regresamos a w

El camino (a, b, e, f, g, h, d, c ) es un ciclo de Euler


Grafos:
Ciclo de Euler
7

Lema de Euler:
Dado un ciclo de G  cada nodo de su recorrido tiene grado par.

En el ejemplo, el ciclo (a, b, e, f, g, h, d, c ) cuyo recorrido es : w, x, w, y, x, z, y, v, w.


Se ve que:

Grad(w) = 4
Grad(x) = 4
Grad(v) = 2
Grad(y) = 4
Grad(z) = 2

Cada nodo del ciclo tiene grado par


Grafos:
Ciclo de Euler
8

Teorema de Euler:
Un grafo sin nodos aislados tiene ciclo de Euler  es conexo y
todos sus nodos tienen grado par.

Demostración:
)
Un grafo G sin nodos aislados tiene ciclo de Euler  es conexo y todos sus nodos
tienen grado par.

)
Si G es conexo y todos sus nodos tienen grado par  G tiene Ciclo de Euler.
Grafos:
Ciclo de Euler (Teorema)
9

) Un grafo G sin nodos aislados tiene ciclo de Euler  es conexo y


todos sus nodos tienen grado par.
H) G tiene ciclo de Euler, no tiene nodos aislados
T) G es conexo y todos sus nodos tienen grado par

D) Si G tiene ciclo de Euler, sea c ese ciclo.


Tomemos un nodo cualquiera del ciclo c; sea v ese nodo de G.
1. Si v no es el primer nodo del ciclo c  Cada vez que el ciclo pase por v entrará y saldrá
por 2 aristas distintas de la vez anterior.
 Contribuye con 2 al grado de v

2. Si v es el primer nodo del ciclo c  El ciclo c contribuye con 2 al grado de v en cada


una de las visitas que se realicen a v, salvo la
primera y la última vez, en la que se agrega 1
arista cada vez
 Por 1 y 2, cada nodo de G tiene grado par 

3. Dados dos nodos cualesquiera de G, digamos u y v, la parte del ciclo que comienza en u y
termina en v es un camino que une a u con v  G es conexo y el teorema está demostrado.
Grafos:
Ciclo de Euler…
10

) Si G es conexo y todos sus nodos tienen grado par  G tiene Ciclo de Euler.
H) G =(N, A, P), G es conexo y todos sus nodos tienen grado par
T) G tiene ciclo de Euler (al que llamaremos ‘c’)
D) Por inducción en el n° de nodos.
Sea |N| = n° nodos de G y G que cumple con la Hipótesis:
Si |N| = 1: u Grad(u) = 0, 0 es par c= , había 0 aristas, se usó 0 aristas,
o sea todas y c es un ciclo
a   ciclo de Euler 
u Grad(u) = 2, 2 es par  c=(a) ó el recorrido {u, u}, c es un ciclo,
 se usó la única arista a
 se usaron todas las aristas de G
Si |N| = 2   ciclo de Euler 

a
u v Grad(u) = 2
 c=(a, b) ó el recorrido {u,v,u}, que es un ciclo
Grad(v) = 2
b  se usaron todas las aristas de G
  ciclo de Euler 
Grafos:
Ciclo de Euler
11

… ) Si G es conexo y todos sus nodos tienen grado par  G tiene Ciclo de Euler.
Si |N| > 2

Sean u y v: nodos adyacentes de G


Por H) todos los nodos de G tienen grado par   un ciclo d1, por Lema de Euler,
que contiene a la arista {u,v}

 d1 = (P1.., u, v, …,P1)

Sea G’, el grafo que resulta al eliminar de G las aristas que están en d1, G’ = (N’, A’, P’)
donde N’ = N,
A’ = A – {aristas  d1}
G’ tiene todos sus nodos de grado par, ya que en d1 cada nodo habrá aportado 2 aristas y en G todos sus
nodos eran de grado par

Si A’ =  (se han usado todas las aristas)   c = d1 = (P1.., u, v, …,P1)


es el ciclo de Euler que buscamos
Sino …
Grafos:
Ciclo de Euler
12

…) Si G es conexo y todos sus nodos tienen grado par  G tiene Ciclo de Euler.

Sino A’  : continuamos el proceso porque quedan aristas sin recorrer en G’

- Elegimos cualquier nodo de d1, digamos u’


- Tomamos un nodo adyacente a u’, digamos v’, eligiendo una arista de A’ , NO puente

  un ciclo d2, por Lema de Euler, (N’ tiene


nodos pares), que contiene a la arista {u’, v’}

 d2 = (u’, v’, …,P2,.., u’)

Sea G’’, el grafo que resulta al eliminar de G’ las aristas que están en d2, G’’ = (N’’, A’’, P’’)
donde N’’ = N’= N,
A’’ = A’ – {aristas de d2}

- G’’ tiene todos sus nodos de grado par, ya que en d2 cada nodo habrá aportado 2 aristas y en G’ todos sus
nodos eran de grado par

Si A’’ =  (se han usado todas las aristas)  insertamos d2 en d1: (P1.., u, v,…, u’, v’,…,P2,..,u’,…P1)
  c’ = (P1.., u, v,…, u’, v’,…,P2,..,u’,…P1)
Sino …  es el ciclo de Euler que buscamos
Grafos:
Ciclo de Euler
13

…) Si G es conexo y todos sus nodos tienen grado par  G tiene Ciclo de Euler.

Sino Si A’’ : insertamos d2 en d1, obteniendo c’ = (P1.., u, v,…, u’, v’,…,P2,..,u’,…P1) y continuamos el
proceso porque quedan aristas sin recorrer en G’’.
Como existe un n° finito de aristas, en algún momento se usarán todas (Ak’ = ):

 un ciclo dk, por Lema de Euler (N’’= nodos pares)


 dk = (u’’, v’’, …,P3.., u’’), con u’’  c’ (al ciclo etapa anterior)

Insertamos dk en c’, obteniendo c’ = (P1.., u, v,…, u’, v’,…,P2,…, u’’, v’’, …,P3.., u’’,.,u’,…P1)
 Se va aumentando el n° de aristas del ciclo así construído, siendo este el ciclo de Euler que buscamos. 

Esta demostración, nos dá una idea del algoritmo de cicloEuler c’ que presentamos a continuación:
Al inicio, el cicloEuler sobre el que vamos a ir insertando subciclos, está vacío.
Luego, ciclamos sobre el nodo w, encontrando a d1 = (a, b) subciclo.
Insertamos d1 en el cicloEuler vacío (c´), dando como resultado c´ = (a, b)
Luego ciclamos sobre el nodo w encontrando a d2 = (e, f, g, h, d, c) subciclo.
Insertamos d2 en el cicloEuler c’, dando (a, b, (e, f, g, h, d, c)), luego de la arista b.
Como ya no quedan aristas por recorrer, cicloEuler c’ formado = (a, b, e, f, g, h, d, c).
Grafos:
Ciclo de Euler : Algoritmo.
14

cicloEuler(G = (N, A, P) ) = extender({ }, A)

Donde:
extender(c, A) = Si (A = ) luego c
sino sea r = recorrido del camino c
u = un nodo del recorrido del camino c
i = la posición de u en el recorrido del camino c
v = un nodo adyacente a u / v  al recorrido r
a  A, P(a) = {u,v} (arista no puente)
(d, A’) = ciclo({a}, u, v, A - {a})
c’ = insertar(d, c, i) {insertar: inserta el subciclo d en ciclo c, en la posición i}
extender(c’ , A’)

ciclo(c, u’, v’, A’) = si (u’ = v’) luego (c, A’)


sino
Sea a  A’/ P(a) = {v’, s} para algún nodo s
ciclo( c  a, u’, s, A’ – {a})
Prueba del algoritmo:
cicloEuler(G = (N, A, P) ) = extender({ }, A)
extender({ }, {a,b,c,d,e,f,g,h}): c = { }, A= {a,b,c,d,e,f,g,h}, (A  ) => r = {w} ; u = w; i = 1; v = x; arista no puente = {w, x} = a;
(d, A’) = ciclo({a}, w, x, {b,c,d,e,f,g,h}) = (1)({a, b}, {c, d, e, f, g h})
c’ = insertar(d, { }, 1) = insertar({a, b}, { }, 1) = {a, b}
extender(c’, A’) = extender({a, b}, {c,d,e,f,g,h}) (2) sig. diapo.
(1) ciclo({a}, w, x, {b,c,d,e,f,g,h}): c = {a}, u’= w, v’ = x, A’ = {b,c,d,e,f,g,h}
(u’ ≠ v’)  a arista /P(a) = {x, s} / s nodo; s = w  a arista = b
ciclo({a}  {b} , w, w, { c,d,e,f,g,h}) (3) = ({a, b}, {c, d, e, f, g h})

(3) ciclo({a,b}, w, w, {c,d,e,f,g,h}) : c = {a, b}, u’= w, v’ = w, A’ = {c,d,e,f,g,h}


(u’ = v’)  Devolver: ({a, b}, {c, d, e, f, g h})
15
Prueba …
(2) extender({a, b}, {c,d,e,f,g,h}): c = {a, b}, A= {c,d,e,f,g,h}; (A  ) => (d, A’) = ciclo({e}, w, y, {c,d,f,g,h}) = (4)
c’ = insertar(d, {a,b}, 3)
extender(c’, A’)

(4) ciclo({e}, w, y, {c,d,f,g,h}) : c = {e}, u’= w, v’ = y, A’ = {c,d,f,g,h}


(u’ ≠´v’)  a arista /P(a) = {y, s} / s nodo; s = x  a arista = f
ciclo({e}  {f} , w, x, { c,d,g,h}) (5) =

16 (5) ciclo({e,f}, w, x, {c,d, g,h})= c = {e, f}, u’= w, v’ = x, A’ = {c,d,g,h}


(u’ ≠´v’)  a arista /P(a) = {x, s} / s nodo; s = z  a arista = g
ciclo({e, f}  {g} , w, z, { c,d,h}) (6); siguiente diapo.
Prueba …
(6) ciclo({e,f,g}, w, z, {c,d,h}) = c = {e, f, g}, u’= w, v’ = z, A’ = {c,d,h}
(u’ ≠´v’)  a arista /P(a) = {z, s} / s nodo; s = y  a arista = h
ciclo({e,f,g}  {h} , w, y, {c,d}) (7) = ({e, f, g, h, d, c}, { } ) y retorna a …(4)

(7) ciclo({e,f,g,h}, w, y, {c,d}) = c = {e, f, g, h}, u’= w, v’ = y, A’ = {c,d}


(u’ ≠´v’)  a arista /P(a) = {y, s} / s nodo; s =v  a arista = d
ciclo({e, f, g,h}  {d} , w, v, {d}) (8) = ({e, f, g, h, d, c}, { } )

(8) ciclo({e,f,g,h,d}, w, v, {c}) = c = {e, f, g, h,d}, u’= w, v’ = v, A’ = {c}


(u’ ≠´v’)  a arista /P(a) = {v, s} / s nodo; s = w  a arista = c
ciclo({e, f, g, h, d}  {c} , w, w, { } ) (9) = ({e, f, g, h, d, c}, { } )
17
(9) ciclo({e, f, g, h, d}  {c} , w, w, { } ) = (u’ = v’) => devolver({e, f, g, h, d, c}, { } )
Prueba … Retornamos a las invocaciones de diapositiva 39:

(2) extender({a, b}, {c,d,e,f,g,h}): c = {a, b}, A= {c,d,e,f,g,h}; (A  ) =>

(d, A’) = ciclo({e}, w, y, {c,d,f,g,h}) = (4) = ({e, f, g, h, d, c}, { } ) resultado diapo anterior

c’ = insertar(d, {a,b}, 3) = insertar({e, f, g, h, d, c}, {a,b}, 3) = {a, b, e, f, g, h, d, c}

extender(c’, A’) = extender({a, b, e, f, g, h, d, c}, { }) = (10) {a, b, e, f, g, h, d, c } que es el cicloEuler !

(10) extender({a, b, e, f, g, h, d, c}, { }) : c = {a, b, e, f, g, h, d, c }, A =  => Devolver c: {a, b, e, f, g, h, d, c }


Próximo tema: Camino de Euler

19
.

Unidad 5: 20

CONTENEDORES no LINEALES
Tema: GRAFO

Algoritmos: Parte III

Camino de Euler

(Apuntes de apoyo a clases teóricas)


Grafos: Camino de Euler
21

Es un camino (no necesariamente un ciclo) que pasa por todos los nodos de G, recorriendo todas las
aristas exactamente una vez.
b Observar este G:
4
a Los nodos de grado impar son: 1, 3
1 3
d Si parto del nodo 1 ¿el camino de Euler es? (a,b,d,c)
c Si parto del nodo 3 ¿el camino de Euler es: ? (b,d,c,a)
2
Si parto del nodo 2 ó del nodo 4 ¿existe camino de Euler
que comience en cualquiera de esos dos nodos? Por qué?
O sea que G tiene camino de Euler y para recorrerlo, comienzo por el nodo 1 o 3, que son de grado impar!!!

4 Observar este G:
a b
1 3 Los nodos de grado impar: Ninguno
d
c Si parto del nodo 1 ¿el camino de Euler es? (a,b,d,c,e)
e 2
Si parto del nodo 4 ¿el camino de Euler es ? (d,c,e,a,b)
Estos caminos son ciclos de Euler ?
Conclusión 1:

✓ Todo Ciclo de Euler es Camino de Euler


✓ Pero un Camino de Euler NO ES NECESARIAMENTE UN Ciclo de Euler
Grafos: Camino de Euler
22

Analicemos grafos G tales que tengan:


✓ 0 nodos de grado impar:
1 1 Si  G
G con un solo nodo, y éste que no sea de grado impar:

G con dos nodos, y ninguno de ellos de grado impar: 1 2 Si  G

G con tres nodos, y ninguno de ellos de grado impar: 1 2 Si  G

Es posible construir un grafo que tenga 0 nodos de grado impar? Si es posible.

En estos Grafos, existe camino de Euler?

Conclusión:
Si, si G tiene 0 nodos de grado impar, tiene camino de Euler
Grafos: Camino de Euler
23

Analicemos grafos G tales que tengan:


✓ 1 nodo de grado impar:
1 ? No  G
G con un solo nodo, y éste de grado impar:

G con dos nodos, y uno de ellos de grado impar: 1 2 ? No  G

G con tres nodos, y uno de ellos de grado impar: 1 2 ? No  G

Es posible construir un grafo que tenga 1 nodo de grado impar? No es posible


Grafos: Camino de Euler
24

Analicemos grafos G tales que tengan:

✓ 2 nodos de grado impar:


1 2 Si  G
G con dos nodos, y éstos de grado impar:

G con tres nodos, y dos de ellos de grado impar:


1 2 Si  G

G con cuatro nodos, y dos de ellos de grado impar:


1 2 Si  G

3 4

Es posible construir un grafo que tenga 2 nodos de grado impar? Si es posible

En estos Grafos, existe camino de Euler?

Conclusión:
Si, si G tiene 2 nodos de grado impar, tiene camino de Euler
Grafos: Camino de Euler
25

Analicemos grafos G tales que tengan:

✓ 3 nodos de grado impar:

G con tres nodos, y los tres de grado impar: 1 2 No  G

G con cuatro nodos, y tres de ellos de grado impar:


1 2 No  G

3 4

Es posible construir un grafo que tenga 3 nodos de grado impar? No es posible


Grafos: Camino de Euler
26

Analicemos grafos G tales que tengan:

✓ 4 nodos de grado impar:

G con cuatro nodos, y todos de grado impar:


1 2 Si  G

3 4

G con cinco nodos, y cuatro de ellos de grado impar:


1 2 5 Si  G

3 4

Es posible construir un grafo que tenga 4 nodos de grado impar? Si es posible


En estos Grafos, existe camino de Euler?

Conclusión:
Se usarán todas las aristas pero por lo menos una se atravesará 2 veces, entonces
si G tiene 4 nodos de grado impar, NO tiene camino de Euler
Camino de Euler:
27

Analizados estos casos,


y relacionando la cantidad de nodos de grado impar de G (ni) y la posible
existencia de Camino de Euler , podemos concluir que:

Si ni = 0 ó ni = 2 el Grafo tiene camino de Euler

ni = 0

ni = 2
Grafos:
Camino de Euler
28

Teorema:
En G, un grafo conexo,
el N° de nodos de grado impar es 2 o 0  existe Camino de Euler

Demostración:
) En G, un grafo conexo,
Si el N° de nodos de grado impar es 2 ó 0   Camino de Euler

) Si existe Camino de Euler  En G, un grafo conexo, el N° de nodos de grado


impar es 2 ó 0
Grafos:
Camino de Euler
29

) En G, un grafo conexo,
Si el N° de nodos de grado impar es 2 ó 0   Camino de Euler
H) G es conexo, ni = 2 ó ni = 0 (ni = n° de nodos de grado impar)
T)  Camino de Euler
D)
Si ni = 0  Por Teorema de Euler, G tiene ciclo de Euler, ya que todos los nodos
tienen grado par.
 Ese ciclo será el Camino de Euler. ⧫
Si ni = 2  Sean N1 y N2 esos nodos de grado impar.

Agreguemos una arista a’ / a’ = {N1, N2}.

Tomemos un recorrido ‘r’ que recorra todas las aristas de G, salvo a’ :


r = {N1, i, j, N2} tenemos un camino y es un Camino de Euler ⧫
Grafos:
Camino de Euler
30

) Si Camino de Euler  el N° de nodos de grado impar es 2 ó 0

H)  Camino de Euler
T) El N° de nodos impares, ni = 0 ó ni = 2
D)
Si G tiene camino de Euler  Sea r su recorrido , r ={ N1, i, j, … , N2}
Si N1 = N2  r ={ N1, i, j, … , N1}, es un ciclo de Euler
Si r es un ciclo de Euler  tiene todos sus nodos de grado par
 Tiene 0 nodos de grado impar  ni = 0 ⧫

Si N1  N2  r ={ N1, i, j,…, N2}, sea a’ ,arista que une N1 con N2, formando un ciclo
 Todos los nodos tendrían grado par, o sea que antes de a’,
N1 y N2 tenían grado impar
 Tiene 2 nodos de grado impar  ni = 2 ⧫
Hasta aquí vimos:
31

1) Ciclo de Euler:
Es un camino cuyo recorrido empieza y termina en el mismo nodo y
todas las aristas del Grafo aparecen en el ciclo una y solo una vez.
2) Lema de Euler:
Dado un ciclo de G  cada nodo de su recorrido tiene grado par.

3) Teorema de Euler:
Un grafo sin nodos aislados tiene ciclo de Euler 
es conexo y todos sus nodos tienen grado par.
4) Camino de Euler:
Es un camino que pasa por todos los nodos de G, recorriendo todas las
aristas exactamente una vez.
5) Teorema existencia de camino de Euler:
En G, un grafo conexo, el N° de nodos de grado impar es 2 o 0
 existe Camino de Euler
6) Algoritmo: Ciclo de Euler

También podría gustarte