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

Anuncio
Álgebra y Matemática Discreta Sesión de Prácticas 4
Álgebra y Matemática Discreta
Sesión de Prácticas 4
(c) 2013 Leandro Marı́n, Francisco J. Vera, Gema M. Dı́az
7 Oct 2013 - 13 Oct 2013
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Familias de Grafos
Grafos Completos Kn
Podemos definir G = graphs.CompleteGraph(5) para obtener:
0
4
1
2
3
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Familias de Grafos
Grafos Bipartidos Completos Kr ,s
Podemos definir G = graphs.CompleteBipartiteGraph(3,3)
para obtener:
0
1
2
3
4
5
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Familias de Grafos
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()
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Eulerianos y Hamiltonianos
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()
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Eulerianos y Hamiltonianos
Escribamos el siguiente código:
G = graphs . PetersenGraph ()
G . is_connected ()
G . degree ()
G . is_eulerian ()
Obtendremos True, [3, 3, 3, 3, 3, 3, 3, 3, 3, 3], False.
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Eulerianos y Hamiltonianos
El grafo de Petersen es el siguiente:
0
5
4
1
9
6
7
2
8
3
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Eulerianos y Hamiltonianos
Vamos ahora a introducir uno que sı́ es euleriano:
G = Graph ()
G . add_vertices ( range ( 6 ) )
G . add_edges ( [ (0 , 2 ) ,(0 , 1 ) ,(1 , 2 ) ,(1 , 3 ) ,(1 , 4 ) ,(2 , 3 ) ,(2 , 4 )
,(3 , 4 ) ,(3 , 5 ) ,(4 , 5 ) ] )
G . is_connected ()
G . degree ()
G . is_eulerian ()
Obtendremos True, [2, 4, 4, 4, 4, 2], True.
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Eulerianos y Hamiltonianos
Este grafo es el mismo que hemos visto en clase:
0
2
4
1
3
5
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Eulerianos y Hamiltonianos
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.
sage nos 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 ()
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Eulerianos y Hamiltonianos
Nos proporciona la orientación del grafo que nos indica el sentido
de recorrido:
3
2
0
5
4
1
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Eulerianos y Hamiltonianos
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()
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Eulerianos y Hamiltonianos
Escribamos el siguiente código:
G = graphs . CubeGraph ( 3 )
G . is_hamiltonian ()
Este es el cubo tridimensional, que nos dirá que sı́ es hamiltoniano
y si le pedimos el ciclo hamiltoniano
G . hamiltonian_cycle ( algorithm = ’ backtrack ’)
nos devolverá que efectivamente lo ha encontrado y cual es el ciclo
que ha encontrado:
( True , [ ’ 110 ’ , ’ 111 ’ , ’ 101 ’ , ’ 001 ’ , ’ 011 ’ , ’ 010 ’ , ’ 000
’ , ’ 100 ’] )
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Eulerianos y Hamiltonianos
La representación gráfica que nos hace sage con
G.plot(layout = ’spring’) es
001
011
000
010
111
101
110
100
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Coloraciones
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()
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Coloraciones
Para calcular el número cromático del Grafo de Petersen harı́amos
lo siguiente:
G = graphs . PetersenGraph ()
G . chromatic_number ()
Nos dirá que es 3. Si queremos una coloración concreta de los
vértices, tenemos que importar el siguiente paquete:
from sage . graphs . graph_coloring import vertex_coloring
vertex_coloring ( G )
que nos devolverá la coloración [[0, 2, 8, 9], [3, 6, 7], [1, 4, 5]].
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Coloraciones
También podemos calcular todas las coloraciones posibles de un
cierto número de colores:
from sage . graphs . graph_coloring import
all_graph_colorings
G = graphs . PetersenGraph ()
for C in all_graph_colorings (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:
{0:
{0:
{0:
{0:
{0:
...
[0,
[0,
[0,
[0,
[0,
2,
2,
2,
2,
2,
6], 1:
8, 9],
8], 1:
8, 9],
8, 9],
[1, 3,
1: [1,
[1, 3,
1: [1,
1: [1,
5,
3,
5,
3,
4,
9],
5],
9],
7],
5],
2:
2:
2:
2:
2:
[4,
[4,
[4,
[4,
[3,
7,
7,
7,
5,
7,
8]}
6]}
6]}
6]}
6]}
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Coloraciones
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()
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Coloraciones
Introduzcamos el siguiente ejemplo:
B = BipartiteGraph ( { 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)
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Coloraciones
La representación gráfica de B se hace en lugar de en vertical, en
horizontal:
0
4
1
5
2
3
6
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Coloraciones
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 = BipartiteGraph (G , [ [0 ,1 , 2 ] ,[3 ,4 , 5 ] ] )
B . plot ()
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Coloraciones
Nos darı́a el siguiente dibujo:
0
3
1
4
2
5
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Planos
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 poniendo
G.is_planar()
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Planos
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 . PetersenGraph ()
G . is_planar ()
Nos dirá que el grafo de Petersen no es plano. El siguiente
comando nos devolverá el subgrafo que buscamos:
G . is_planar ( kuratowski = True ) [ 1 ]
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Planos
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 . CubeGraph ( 3 )
G . plot ( layout = ’ planar ’)
Álgebra y Matemática Discreta Sesión de Prácticas 4
Grafos
Grafos Planos
Nos darı́a el siguiente dibujo:
100
111
110
010
011
101
000
001
Descargar