• No se han encontrado resultados

Índice Familias de Grafos Grafos Eulerianos y Hamiltonianos Coloraciones Grafos Planos. Álgebra y Matemática Discreta Sesión de Prácticas 4

N/A
N/A
Protected

Academic year: 2021

Share "Índice Familias de Grafos Grafos Eulerianos y Hamiltonianos Coloraciones Grafos Planos. Álgebra y Matemática Discreta Sesión de Prácticas 4"

Copied!
47
0
0

Texto completo

(1)

Álgebra y Matemática Discreta - 2012 Sesión de Prácticas 4

Leandro Marín

Dpto. de Matemática Aplicada Facultad de Informática

(2)

1 Familias de Grafos

2 Grafos Eulerianos y Hamiltonianos

3 Coloraciones

(3)

Grafos Completos K

n

Podemos definir G = graphs.CompleteGraph(5)para obtener:

0

1

2 3

(4)

Grafos Bipartidos Completos K

r,s

Podemos definir G = graphs.CompleteBipartiteGraph(3,3)

para obtener:

0 1 2

(5)

Sólidos Platónicos

(6)

Sólidos Platónicos

El tetraedro G = graphs.TetrahedralGraph

(7)

Sólidos Platónicos

El tetraedro G = graphs.TetrahedralGraph

El octaedro G = graphs.OctahedralGraph

(8)

Sólidos Platónicos

El tetraedro G = graphs.TetrahedralGraph

El octaedro G = graphs.OctahedralGraph

El hexaedro G = graphs.HexahedralGraph

(9)

Sólidos Platónicos

El tetraedro G = graphs.TetrahedralGraph El octaedro G = graphs.OctahedralGraph El hexaedro G = graphs.HexahedralGraph El dodecaedro G = graphs.DodecahedralGraph El icosaedro G = graphs.IcosahedralGraph

(10)

Grafos Eulerianos

Un grafo G es euleriano si y solo si tiene un camino cerrado euleriano.

(11)

Grafos Eulerianos

Un grafo G es euleriano si y solo si tiene un camino cerrado euleriano.

Es decir, un camino cerrado que pase por todas las aristas sin repetir ninguna.

(12)

Grafos Eulerianos

Un grafo G es euleriano si y solo si tiene un camino cerrado euleriano.

Es decir, un camino cerrado que pase por todas las aristas sin repetir ninguna.

Para comprobar si un grafo es euleriano, basta con ver que es conexo y todos sus vértices son de grado par.

(13)

Grafos Eulerianos

Un grafo G es euleriano si y solo si tiene un camino cerrado euleriano.

Es decir, un camino cerrado que pase por todas las aristas sin repetir ninguna.

Para comprobar si un grafo es euleriano, basta con ver que es conexo y todos sus vértices son de grado par.

Podemos verlo directamente con el comando G.is_eulerian()

(14)

Escribamos el siguiente código:

G = graphs . P e t e r s e n G r a p h () G . i s _ c o n n e c t e d ()

G . degree () G . i s _ e u l e r i a n ()

(15)

El grafo de Petersen es el siguiente: 0 1 2 3 4 5 6 7 8 9

(16)

Vamos ahora a introducir uno que sí es euleriano: G = Graph () G . a d d _ v e r t i c e s (range( 6 ) ) G . a d d _ e d g e s ([(0 , 2 ) ,(0 , 1 ) ,(1 , 2 ) ,(1 , 3 ) ,(1 , 4 ) ,(2 , 3 ) ,(2 , 4 ) ,(3 , 4 ) ,(3 , 5 ) ,(4 , 5 )]) G . i s _ c o n n e c t e d () G . degree () G . i s _ e u l e r i a n ()

(17)

Este grafo es el mismo que hemos visto en clase: 0 1 2 3 4 5

(18)

Caminos Eulerianos

Pueden existir multitud de caminos eulerianos cuando el grafo es euleriano.

(19)

Caminos Eulerianos

Pueden existir multitud de caminos eulerianos cuando el grafo es euleriano.

Lo importante es saber saber los sentidos de recorrido que tenemos que hacer, pero luego podemos recorrer cada ciclo por separado.

(20)

Caminos Eulerianos

Pueden existir multitud de caminos eulerianos cuando el grafo es euleriano.

Lo importante es saber saber los sentidos de recorrido que tenemos que hacer, pero luego podemos recorrer cada ciclo por separado.

sagenos calcula las soluciones dándonos la orientación del recorrido, que es un grafo dirigido:

E = G . e u l e r i a n _ o r i e n t a t i o n () E . show ()

(21)

Nos proporciona la orientación del grafo que nos indica el sentido de recorrido: 0 1 2 3 4 5

(22)

Grafos Hamiltonianos

(23)

Grafos Hamiltonianos

Un grafo es Hamiltoniano si tiene un ciclo hamiltoniano. Es decir, un ciclo que recorre todos los vértices pasando una única vez por cada vértice.

(24)

Grafos Hamiltonianos

Un grafo es Hamiltoniano si tiene un ciclo hamiltoniano. Es decir, un ciclo que recorre todos los vértices pasando una única vez por cada vértice.

Se puede saber si un grafo es hamiltoniano en sage con el comando G.is_hamiltonian()

(25)

Escribamos el siguiente código:

G = graphs . C u b e G r a p h ( 3 ) G . i s _ h a m i l t o n i a n ()

Este es el cubo tridimensional, que nos dirá que sí es hamiltoniano y si le pedimos el ciclo hamiltoniano

G . h a m i l t o n i a n _ c y c l e ( a l g o r i t h m=’ b a c k t r a c k ’)

nos devolverá que efectivamente lo ha encontrado y cual es el ciclo que ha encontrado:

(True, [’ 110 ’, ’ 111 ’, ’ 101 ’, ’ 001 ’, ’ 011 ’, ’ 010 ’, ’ 000 ’, ’ 100 ’])

(26)

La representación gráfica que nos hace sage con G.plot(layout =’spring’)es

000 001 010 011 100 101 110 111

(27)

Definición

Sea G = (V,E) un grafo y sea C un conjunto de colores. Una coloración es una aplicación c : V → C tal que para toda arista (u,v) ∈ E se tiene que c(u) 6= c(v ).

(28)

Definición

Sea G = (V,E) un grafo y sea C un conjunto de colores. Una coloración es una aplicación c : V → C tal que para toda arista (u,v) ∈ E se tiene que c(u) 6= c(v ).

El número mínimo de colores necesario para que exista una coloración de un grafo se denomina su número cromático.

(29)

Definición

Sea G = (V,E) un grafo y sea C un conjunto de colores. Una coloración es una aplicación c : V → C tal que para toda arista (u,v) ∈ E se tiene que c(u) 6= c(v ).

El número mínimo de colores necesario para que exista una coloración de un grafo se denomina su número cromático. Se puede calcular con el comando G.chromatic_number()

(30)

Para calcular el número cromático del Grafo de Petersen haríamos lo siguiente:

G = graphs . P e t e r s e n G r a p h () G . c h r o m a t i c _ n u m b e r ()

Nos dirá que es 3. Si queremos una coloración concreta de los vértices, tenemos que importar el siguiente paquete:

from sage . graphs . g r a p h _ c o l o r i n g import v e r t e x _ c o l o r i n g v e r t e x _ c o l o r i n g ( G )

(31)

También podemo calcular todas las coloraciones posibles de un cierto número de colores:

from sage . graphs . g r a p h _ c o l o r i n g import

a l l _ g r a p h _ c o l o r i n g s G = graphs . P e t e r s e n G r a p h ()

for C in a l l _ g r a p h _ c o l o r i n g s (G , 3 ): print C

Nos escribirá todas las coloraciones posibles del grafo de Petersen con tres colores. Son muchas, las primeras que nos salen son:

{’#00ff00’:[1,3,5,9],’#ff0000’:[0,2,6],’#0000ff’:[4,7,8]} {’#00ff00’:[1,3,5],’#ff0000’:[0,2,8,9],’#0000ff’:[4,7,6]} {’#00ff00’:[1,3,5,9],’#ff0000’:[0,2,8],’#0000ff’:[4,7,6]} {’#00ff00’:[1,3,7],’#ff0000’:[0,2,8,9],’#0000ff’:[4,5,6]} {’#00ff00’:[1,4,5],’#ff0000’:[0,2,8,9],’#0000ff’:[3,7,6]} ...

(32)

Grafos Bipartidos

Quitando el caso de grafos sin aristas, el mínimo número de colores necesario para colorear un grafo es 2.

(33)

Grafos Bipartidos

Quitando el caso de grafos sin aristas, el mínimo número de colores necesario para colorear un grafo es 2.

Los grafos que se pueden colorear con dos colores se llaman grafos bipartidos.

(34)

Grafos Bipartidos

Quitando el caso de grafos sin aristas, el mínimo número de colores necesario para colorear un grafo es 2.

Los grafos que se pueden colorear con dos colores se llaman grafos bipartidos.

(35)

Grafos Bipartidos

Quitando el caso de grafos sin aristas, el mínimo número de colores necesario para colorear un grafo es 2.

Los grafos que se pueden colorear con dos colores se llaman grafos bipartidos.

Podemos definirlos en sage con BipartiteGraph.

Si B es un grafo bipartido, los dos conjuntos que forman el grafo se denotan en sage como B.left y B.right.

(36)

Grafos Bipartidos

Quitando el caso de grafos sin aristas, el mínimo número de colores necesario para colorear un grafo es 2.

Los grafos que se pueden colorear con dos colores se llaman grafos bipartidos.

Podemos definirlos en sage con BipartiteGraph.

Si B es un grafo bipartido, los dos conjuntos que forman el grafo se denotan en sage como B.left y B.right. Para saber si un grafo ordinario es bipartido podemos usar G.is_bipartite()

(37)

Introduzcamos el siguiente ejemplo:

B = B i p a r t i t e G r a p h ({0: [4 ,5 , 6], 1: [5], 2: [4 , 6], 3: [5 , 6] })

B . left B . right

Nos dirá respectivamente los conjuntos que determinan la partición

set ([0 , 1 , 2 , 3]) set ([4 , 5 , 6])

(Un conjunto es similar a una lista, pero en la que no podemos repetir elementos)

(38)

La representación gráfica de B se hace en lugar de en vertical, en horizontal: 0 1 2 3 4 5 6

(39)

También podemos definir un grafo y luego decirle cual es la partición a partir de la cual es un grafo bipartido.

(40)

También podemos definir un grafo y luego decirle cual es la partición a partir de la cual es un grafo bipartido.

Si el grafo incluye alguna unión entre vértices del mismo lado de la partición nos dará un error.

G = Graph ({0: [3 , 4],1: [4],2: [4 , 5] }) B = B i p a r t i t e G r a p h (G ,[ [0 ,1 , 2],[3 ,4 , 5] ]) B .plot()

(41)

Nos daría el siguiente dibujo: 0 1 2 3 4 5

(42)

Teorema de Kuratowski

(43)

Teorema de Kuratowski

Un grafo es plano si existe una representación plana del mismo. El teorema de Kuratowski nos caracteriza estos grafos como aquellos que no contienen una extensión esencial de K5 o K3,3

(44)

Teorema de Kuratowski

Un grafo es plano si existe una representación plana del mismo. El teorema de Kuratowski nos caracteriza estos grafos como aquellos que no contienen una extensión esencial de K5 o K3,3

Podemos saber si un grafo es plano en sage ponendo G.is_planar()

(45)

Podemos saber cual es la extensión esencial de K5 o K3,3 que ha

encontrado pasándole el parámetro kuratowski=True

G = graphs . P e t e r s e n G r a p h () G . i s _ p l a n a r ()

Nos dirá que el grafo de Petersen no es plano. El siguiente comando nos devolverá el subgrafo que buscamos:

(46)

Representación Plana de un Grafo

Dado un grafo plano, la representación plana de un grafo se puede obtener con layout=’planar’

G = graphs . C u b e G r a p h ( 3 ) G .plot( layout=’ planar ’)

(47)

Nos daría el siguiente dibujo: 000 001 010 011 100 101 110 111

Referencias

Documento similar

Los filtros 10 entonces tienen como principal propósito asegurar la buena definición de las imágenes en escena, sobretodo en el cielo, además de aumentar el

Vértice Adyacente: Si tenemos un par de vértices de un grafo (U, V) y si tenemos una arista que los une, entonces son vértices adyacentes.. En pocas palabras un vértice

Un  cartero  ha  repartido  las  cartas  que  llevaba  en  su  saca  desde  la  central  de  correos,  O,  a  los  domicilios  A,  B,  C,  D  y  E,  que 

1. LAS GARANTÍAS CONSTITUCIONALES.—2. C) La reforma constitucional de 1994. D) Las tres etapas del amparo argentino. F) Las vías previas al amparo. H) La acción es judicial en

Aunque es posible transformar los grafos en árboles para después aplicar sobre estos últimos los algoritmos de búsqueda analizados, en ocasiones esta transformación no

Esta velocidad ha resultado dependiente en gran medida de estas caracte- rísticas estructurales, en especial de aquellos nodos con mayor grado, ya que estos cuentan con una

Actualmente existen algunas herramientas online enfocadas a la teoría de grafos, como por ejemplo Graph Online [1] centrada en los algoritmos de búsqueda de camino más corto; Rhumbl

Recu- rriendo al ejemplo de un usuario navegando por la red que está buscando información sobre un tema en una red social, el comportamiento natural es entrar en un perfil y