Post on 02-Jan-2016
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
NIVEL 17: ESTRUCTURAS NO LINEALES
Grafos, definiciones y tipos de problemas
1
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda• ¿Qué son?
• Formalismo abstracto de los grafos dirigido
• Conceptos
• Ejemplo: Red de distribución de agua
• Caminos y Ciclos
• Cadenas
• Tipos de grafos
• Del análisis al diseño
• Trabajo sobre un caso
• Implementación en Cupi2Collections
2
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
¿Qué son?
• Los grafos:
• Son estructuras de datos más generales que los árboles.
• Permiten modelar relaciones no necesariamente jerárquicas entre elementos de un conjunto.
• Se utilizan para representar mapas de rutas, organización de procesos, espacios de búsqueda para juegos, circuitos lógicos, etc.
3
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
¿Qué son?
• Ejemplos de grafos
4
Vértices: elementos del conjunto
Arcos: relaciones entre los elementos del conjunto
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda• ¿Qué son?
• Formalismo abstracto de los grafos dirigido
• Conceptos
• Ejemplo: Red de distribución de agua
• Caminos y Ciclos
• Cadenas
• Tipos de grafos
• Del análisis al diseño
• Trabajo sobre un caso
• Implementación en Cupi2Collections
5
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Formalismo abstracto de un grafo dirigido• G = ( V, A )
• V = { v1, …, vn }• V: Conjunto de vértices
• A: Conjunto de arcos
• Un arco es una tripleta de la forma:• ( vi, vk, cik )
• Establece: • Una relación entre los vértices vi y vk de V
• Un sentido de la relación (vi vk)
• Un valor o peso asociado (cik )
• Puede tener una información asociada
6
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Formalismo abstracto de un grafo dirigido
• Gráficamente, un arco es:
• A = { ( x, y, c ) | x, y V, x y, x e y están relacionados con un valor c }
7
cikVi Vk
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Formalismo abstracto de un grafo dirigido
• Ejemplo : Camión repartidor• Un camión repartidor debe visitar diferentes
puntos de la ciudad para dejar su producto.
• Ciudad = grafo• Vértices = puntos de la ciudad
• Arcos = tiempo que toma ir de un punto a otro
8
3min5min
6min
5min
10min
7min2min
1min
9min
12min
3min
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Conceptos
• Sucesor y Predecesor:
• Se dice que un vértice B es sucesor de un vértice A si existe un arco entre A y B talque A es el vértice origen y B el vértice destino. En éste mismo caso se dice que A es un predecesor de B.
9
cA B
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda• ¿Qué son?
• Formalismo abstracto de los grafos dirigido
• Conceptos
• Ejemplo: Red de distribución de agua
• Caminos y Ciclos
• Cadenas
• Tipos de grafos
• Del análisis al diseño
• Trabajo sobre un caso
• Implementación en Cupi2Collections
10
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Conceptos
• Cada vértice Vi del grafo tiene asociados dos valores:
• Identificador: lo distingue como elemento único de V.
• Información asociada con el elemento
11
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Conceptos
• Restricción en un grafo dirigido:
• No puede haber más de un arco entre cualquier par de vértices en cada uno de los dos sentidos.
12
vi vk
cik
cki
vi vk
cik
cki
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Conceptos
• Orden de un grafo:
• Número de elementos = Cardinalidad del conjunto de vértices.
• Grafo vacío:
• Grafo de orden cero.
• Fuente:
• Vértice que no tiene predecesores.
• Sumidero:
• Vértice que no tiene sucesores.
13
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda• ¿Qué son?
• Formalismo abstracto de los grafos dirigido
• Conceptos
• Ejemplo: Red de distribución de agua
• Caminos y Ciclos
• Cadenas
• Tipos de grafos
• Del análisis al diseño
• Trabajo sobre un caso
• Implementación en Cupi2Collections
14
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Ejemplo: Red de distribución de agua
• Modelar una red de distribución de agua entre N ciudades de una región.
• Cada ciudad tiene:
• Nombre
• Capacidad máxima de almacenamiento
• Estado actual
• Cada tubo tiene:
• Capacidad de transporte por minuto
15
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Ejemplo: Red de distribución de agua
Modelo del grafo
• V = { v1, …, vn | vi es una ciudad}
• A = { ( x, y, c ) | hay un tubo entre x e y, con capacidad de transporte por minuto c }
• vi = [idCiudadi, infoCiudadi]
• infoCiudadi = [nombrei, capacidadi, actuali]
16
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Ejemplo: Red de distribución de agua
• Representación Gráfica:
• El orden del grafo es 5
• No hay fuentes ni sumideros
• Los sucesores de v1
son v2 y v5 y su único predecesor es v4.
17
ciudad1100.00080.000
ciudad32.0002.000
ciudad53.0002.000
ciudad25.0001.000
ciudad4500200
v1 v2
v3v4v5
50
55
10105
3
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Ejemplo: Red de distribución de agua
• Información asociada:
• G = ( V, A )
• V = { v1, v2 , v3 , v4 , v5 }
• A = { (v1, v2 , 50 ), (v2, v3 , 5 ), (v3, v2 , 5 ), (v4, v2 , 10 ), (v4, v1 , 10 ), (v5, v4 , 3 ), (v1, v5 , 5 ) }
• V1 = [ idv1, infov1 ]
• infov1=[“ciudad1”, 100.000, 80.000]
• V2 = [ idv2, infov2 ]
• infov2=[“ciudad3”, 2.000, 2.000]
18
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Ejemplo: Red de distribución de agua
• Información asociada:
• V3 = [ idv3, infov3 ]
• infov3=[“ciudad4”, 500, 200]
• V4 = [ idv4, infov4 ]
• infov4=[“ciudad2”, 5.000, 1.000]
• V5 = [ idv5, infov5 ]
• infov5=[“ciudad5”, 3.000, 2.000]
19
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda• ¿Qué son?
• Formalismo abstracto de los grafos dirigido
• Conceptos
• Ejemplo: Red de distribución de agua
• Caminos y Ciclos
• Cadenas
• Tipos de grafos
• Del análisis al diseño
• Trabajo sobre un caso
• Implementación en Cupi2Collections
20
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Caminos y Ciclos
• Camino entre un vértice v1 y un vértice v2:
• Secuencia de vértices <x1, …, xn>, con las siguientes características:
• xi V, 1 <= i <= n
• x1 = v1, xn = v2
• xi xi+1, 1 <= i <= n
• v1 = origen
• V2 = destino
• El camino pasa por los vértices x2, …, xn-1
21
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Caminos y Ciclos
• Longitud = n-1
• Existe camino de longitud 0: parte de cualquier vértice y termina en él mismo.
• Existen caminos infinitos: repiten un ciclo indefinidamente
22
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Caminos y Ciclos
• Camino simple:
• Todos los vértices por los cuales pasa son diferentes entre sí y diferentes del origen y del destino.
• Puede comenzar y terminar en el mismo vértice, pero NO puede pasar dos veces por un mismo vértice.
23
V
c
Vértice con caminos < v, v > y < v >
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Caminos y Ciclos
• Costo de un camino C:
• Suma de los valores asociados con los arcos que lo componen.
• Si los arcos tienen un valor asociado 1:
• Costo = Longitud
• Ciclo simple:
• Camino simple, de longitud mayor o igual a 1, que comienza y termina en el mismo vértice.
24
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Caminos y Ciclos
• Ciclo:
• Camino de longitud diferente de 0, cuyo origen y destino son iguales
• Grafo acíclico:
• No contiene ciclos
25
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Caminos y Ciclos
Camino Costo Longitud
Caminos no simples
Caminos simples
Ciclos simples
Ciclos no simples
Camino más corto de v1 a v3
Camino más barato de v1 a v3
Camino simple más largo
26
• Ejemplo de caminos:4
23
7 4
6
2
5
1
7
V6 V1
V5 V4
V2
V3
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Caminos y Ciclos
Conceptos:
• Camino hamiltoniano: • Camino que pasa exactamente una vez por cada
uno de los vértices de un grafo.
• No siempre existe.
• No siempre es único.
• Ciclo hamiltoniano:• Ciclo que pasa exactamente una vez por cada uno
de los vértices de un grafo.
27
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Caminos y Ciclos
Conceptos:
• Camino de euler: • Camino que pasa exactamente una vez por cada
uno de los arcos de un grafo.
• Ciclo de euler:• Ciclo que pasa exactamente una vez por cada uno
de los arcos de un grafo.
28
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Caminos y Ciclos
• Ejemplo de camino Hamiltoniano:
• < v5, v3, v1, v2, v4>
29
v1
v5
v3v2
v4
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Caminos y Ciclos
• Ejemplo de ciclo Hamiltoniano:
• < v1, v2, v5, v4, v3, v1 >
30
v1
v5
v3v2
v4
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Caminos y Ciclos
• Ejemplo de camino de Euler:
• < v5, v3, v2, v5, v4, v3, v1, v2, v4 >
31
v1
v5
v3v2
v4
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda• ¿Qué son?
• Formalismo abstracto de los grafos dirigido
• Conceptos
• Ejemplo: Red de distribución de agua
• Caminos y Ciclos
• Cadenas
• Tipos de grafos
• Del análisis al diseño
• Trabajo sobre un caso
• Implementación en Cupi2Collections
32
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Cadenas
Conceptos:
• Vértices adyacentes:
• Existe en el grafo por lo menos un arco entre los dos, sin importar el sentido.
• Cadena:
• Secuencia < x1, …, xn > de vértices de V, tal que cualesquiera dos vértices consecutivos son adyacentes.
33
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Cadenas
• Ejemplo de cadena:
• < v1, v2, v3, v4, v5 >
34
v1
v5
v3v2
v4
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda• ¿Qué son?
• Formalismo abstracto de los grafos dirigido
• Conceptos
• Ejemplo: Red de distribución de agua
• Caminos y Ciclos
• Cadenas
• Tipos de grafos
• Del análisis al diseño
• Trabajo sobre un caso
• Implementación en Cupi2Collections
35
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Tipos de grafos
• Grafo completo:
• Dos vértices diferentes cualesquiera del conjunto V son adyacentes.
36
v1
v5
v3v2
v4
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Tipos de grafos
• Grafo conexo:
• Para cualquier par de vértices v, w del conjunto V, existe una cadena que los une.
• Grafo fuertemente conexo:
• Para cualquier par de vértices v, w del conjunto V, existe una camino que vaya de v a w.
37
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Tipos de grafos
• Ejemplos
38
v1
v5
v3v2
v4
v1
v5
v3v2
v4
Grafo NO conexo Grafo fuertemente conexo
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Tipos de grafos• Grafo planar:
• Es posible dibujarlo en un plano sin que se crucen los arcos.
• Problema típico:
• 3 casas y 3 servicios.
• Se trata de establecer si es posible llevar las tuberías de agua, gas y electricidad, sobre un mismo plano, a 3 casas vecinas.
• El problema se reduce a determinar si el grafo que representa la solución es planar.
• Vértices: casas y servicios.
• Arcos: tuberías.
39
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Tipos de grafos
• Ejemplo:
40
GAS AGUA ELECTRICIDAD
Se pueden dibujar sin cruces 8 de los arcos, pero está demostrado que es imposible poner los 9
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Tipos de grafos
• Grafos isomorfos:
• Tienen la misma estructura, aunque tengan diferentes contenidos y/o identificadores de los vértices.
41
v1
v3
v2
v4
v3 v1 v4
v2
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda• ¿Qué son?
• Formalismo abstracto de los grafos dirigido
• Conceptos
• Ejemplo: Red de distribución de agua
• Caminos y Ciclos
• Cadenas
• Tipos de grafos
• Del análisis al diseño
• Trabajo sobre un caso
• Implementación en Cupi2Collections
42
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del análisis al diseño
• Diagrama de clases del análisis
43
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del análisis al diseño
• Operaciones críticas:
• Retornar un vértice dado su id.
• Retornar un arco dados los ids de los dos vértices.
• Retornar los arcos que llevan a los sucesores de un vértice, dado su id.
• Retornar los arcos que llevan a los predecesores de un vértice, dado su id.
44
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del análisis al diseño
• Operaciones críticas:
• Agregar un vértice al grafo, dado un id y la información relacionada con el vértice.
• Eliminar un vértice del grafo, dado su id.
• Agregar arco, dados los ids de los vértices y la información relacionada con el arco.
• Eliminar arco, dado los ids de los vértices.
• Dar el orden del grafo.
45
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del análisis al diseño• Identificación de la genericidad
46
K
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del análisis al diseño• Identificación de la genericidad
47
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del análisis al diseño• Identificación de la genericidad
48
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del análisis al diseño• Identificación de la genericidad
49
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del análisis al diseño• Cálculo de complejidades:
• Retornar un vértice dado su id.
• Retornar un arco dados los ids de los dos vértices.
• Retornar los arcos que llevan a los sucesores de un vértice, dado su id.
• Retornar los arcos que llevan a los predecesores de un vértice, dado su id.
50
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del análisis al diseño• Cálculo de complejidades:
• Agregar un vértice al grafo, dado un id y la información relacionada con el vértice.
• Eliminar un vértice del grafo, dado su id.
• Agregar arco, dados los ids de los vértices y la información relacionada con el arco.
• Eliminar arco, dado los ids de los vértices.
• Dar el orden del grafo.
51
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda• ¿Qué son?
• Formalismo abstracto de los grafos dirigido
• Conceptos
• Ejemplo: Red de distribución de agua
• Caminos y Ciclos
• Cadenas
• Tipos de grafos
• Del análisis al diseño
• Trabajo sobre un caso
• Implementación en Cupi2Collections
52
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Trabajo sobre un casoEnunciado del problema:
• Se desea realizar una aplicación para el calcular los movimientos de las tropas de soldados deun ejército. El ejército tiene divididas las tropas en diferentes ciudades estratégicas, y en casode guerra o problema interno, es necesario transportar las tropas hacia una ciudad específica,en un número de días dados.
• Para poder realizar esto, es necesario tener en cuenta que las ciudades tienen una capacidadmáxima de soldados que no puede ser sobrepasada, y que los medios de conexión entreciudades son únicamente vías férreas dirigidas (solo hacia una dirección), con una capacidadmáxima de pasajeros diarios. Se puede asumir que la ciudad destino de todo el movimientotiene capacidad infinita.
• La aplicación debe recibir por medio de un archivo XML (especificado en la sección ArchivoXML de éste documento), la información de las ciudades con sus capacidades y cantidad desoldados inicial y las vías férreas entre las ciudades con su capacidad diaria de transporte, yluego debe preguntar al usuario la ciudad destino y los días que se tienen para llevar lastropas.
• Al finalizar los cálculos, la aplicación debe mostrar en pantalla el resultado del movimiento delas tropas, informando en datos consolidados la cantidad de soldados que se pudo llevar a laciudad, y un resumen detallado con el estado de cada una de las ciudades para cada día de lasimulación.
53
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Trabajo sobre un caso• Clases empleadas en la solución
54
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda• ¿Qué son?
• Formalismo abstracto de los grafos dirigido
• Conceptos
• Ejemplo: Red de distribución de agua
• Caminos y Ciclos
• Cadenas
• Tipos de grafos
• Del análisis al diseño
• Trabajo sobre un caso
• Implementación en Cupi2Collections
55
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Clase Grafo
56
Llave de tipo K Valor de tipo Vertice
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Clase Vértice• La información del vértice es un objeto de tipo V
57
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Clase Vértice• Los predecesores son un ArrayList de objetos de tipo Arco
58
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Clase Vértice• Los sucesores son un ArrayList de objetos de tipo Arco
59
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Clase Vértice• Se declara un atributo para verificar si el vértice está
marcado
60
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Clase Vértice
• Métodos empleados:• public K darId( )
• public V darInfoVertice( )
• public ArrayList<Arco<K, V, A>> darSucesores( )
• public ArrayList<Arco<K, V, A>> darPredecesores( )
• public Arco<K, V, A> darArco( K idDestino )
• public void eliminarArco( K idDestino )
• private void eliminarArcoPredecesor( Arco<K, V, A> arco )
• public void agregarArco( Arco<K, V, A> arco )
• private void agregarArcoPredecesor( Arco<K, V, A> arco )
• public void eliminarArcos( )
• public boolean esSucesor( K idDestino )
• public int darNumeroSucesores( )
• public int darNumeroPredecesores( )
61
Clase Vértice - Métodos
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Clase Arco• El vértice origen es de tipo Vertice
62
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Clase Arco
• El vértice destino es de tipo Vertice
63
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Clase Arco• La información del arco es de tipo A
64
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Clase Arco
• Métodos empleados:• public A darInfoArco( )
• public Vertice<K, V, A> darVerticeDestino( )
• public Vertice<K, V, A> darVerticeOrigen( )
• public int darPeso( )
65