Estructura de Datos [Gráficas]

Anuncio
Estructura de Datos [Gráficas]
M. en C. Sergio Luis Pérez Pérez
UAM C UAJIMALPA , M ÉXICO, D. F.
Trimestre 14-O
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
1 / 33
Contenido
1
Gráficas
2
Recorridos en gráficas
Búsqueda a lo profundo (DFS)
Búsqueda a lo ancho (BFS)
3
Árboles abarcadores
Algoritmo de Kruskal
Algoritmo de Prim
4
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Bellmand-Ford
Algoritmo de Floyd-Warshall
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
2 / 33
Gráficas
Gráficas
1
Gráficas
2
Recorridos en gráficas
3
Árboles abarcadores
4
Caminos más cortos
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
3 / 33
Gráficas
Gráficas I
Una gráfica es un conjunto de vértices y una colección de aristas
que conectan parejas de vértices.
Formalmente una gráfica se define como G = (V , E) donde V es
el conjunto de vértices y E es el conjunto de aristas.
En esta presentación se denota a n = |V | y m = |E|.
Un lazo es una arista que conecta a un vértice consigo mismo.
Dos aristas son paralelas si conecta a la misma pareja de
vértices.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
4 / 33
Gráficas
Gráficas II
Cuando una arista conecta dos vértices decimos que los vértices
son adyacentes y que la arista es incidente a ambos vértices.
El grado de un vértice es el número de aristas incidentes a éste
y se denota como d(v ) para todo v ∈ V .
El grado mı́nimo de una gráfica se denota como δ(G) y el grado
máximo como ∆(G).
Una subgráfica es un subconjunto de aristas y vértices de una
gráfica.
Un camino es una secuencia de vértices conectados por aristas.
Un camino simple es un camino que no repite vértices.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
5 / 33
Gráficas
Gráficas III
Un ciclo es un camino donde el vértice de inicio del recorrido y el
último son el mismo.
Un ciclo simple es aquel que no repite vértices ni aristas, salvo
el requisito del primer y último vértice.
La longitud de un camino o de un ciclo es el número de aristas
en éste.
Un vértice esta conectado a otro si existe un camino que
contiene a ambos.
Una gráfica es conexa si existe un camino desde cada vértice u a
cualquier otro vértice v con u, v ∈ V
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
6 / 33
Gráficas
Gráficas IV
Una gráfica que no es conexa consiste de un conjunto de
componentes conexas.
Una gráfica acı́clica es una gráfica que no tiene ciclos.
Un árbol es una gráfica conexa acı́clica. También se puede ver
como una gráfica donde existe un camino único entre cualquier
pareja de vértices.
Un bosque es un conjunto disjunto de árboles.
Un árbol abarcador es una subgráfica que conecta a todos los
vértices de una gráfica mediante un árbol.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
7 / 33
Gráficas
Gráficas V
Un bosque abarcador es la unión de los árboles abarcadores de
las componentes conexas de una gráfica.
Una gráfica bipartita es una gráfica donde los vértices pueden
ser divididos en dos conjuntos tal que todas las aristas solamente
conectan parejas de vértices de un conjunto con el otro.
Formalmente una gráfica bipartita se define como G = (V , U; E)
tal que tiene vértices v ∈ V y u ∈ U y arista con uv ∈ E.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
8 / 33
Recorridos en gráficas
Recorridos en gráficas
1
Gráficas
2
Recorridos en gráficas
3
Árboles abarcadores
4
Caminos más cortos
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
9 / 33
Recorridos en gráficas
Recorridos en gráficas I
Pendiente.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
10 / 33
Recorridos en gráficas
Búsqueda a lo profundo (DFS)
Búsqueda a lo profundo (DFS)
1
Gráficas
2
Recorridos en gráficas
Búsqueda a lo profundo (DFS)
Búsqueda a lo ancho (BFS)
3
Árboles abarcadores
Algoritmo de Kruskal
Algoritmo de Prim
4
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Bellmand-Ford
Algoritmo de Floyd-Warshall
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
11 / 33
Recorridos en gráficas
Búsqueda a lo profundo (DFS)
Búsqueda a lo profundo (DFS) I
Pendiente.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
12 / 33
Recorridos en gráficas
Búsqueda a lo ancho (BFS)
Búsqueda a lo ancho (BFS)
1
Gráficas
2
Recorridos en gráficas
Búsqueda a lo profundo (DFS)
Búsqueda a lo ancho (BFS)
3
Árboles abarcadores
Algoritmo de Kruskal
Algoritmo de Prim
4
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Bellmand-Ford
Algoritmo de Floyd-Warshall
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
13 / 33
Recorridos en gráficas
Búsqueda a lo ancho (BFS)
Búsqueda a lo ancho (BFS) I
Pendiente.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
14 / 33
Árboles abarcadores
Árboles abarcadores
1
Gráficas
2
Recorridos en gráficas
3
Árboles abarcadores
4
Caminos más cortos
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
15 / 33
Árboles abarcadores
Árboles abarcadores I
Pendiente.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
16 / 33
Árboles abarcadores
Algoritmo de Kruskal
Algoritmo de Kruskal
1
Gráficas
2
Recorridos en gráficas
Búsqueda a lo profundo (DFS)
Búsqueda a lo ancho (BFS)
3
Árboles abarcadores
Algoritmo de Kruskal
Algoritmo de Prim
4
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Bellmand-Ford
Algoritmo de Floyd-Warshall
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
17 / 33
Árboles abarcadores
Algoritmo de Kruskal
Algoritmo de Kruskal I
Pendiente.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
18 / 33
Árboles abarcadores
Algoritmo de Prim
Algoritmo de Prim
1
Gráficas
2
Recorridos en gráficas
Búsqueda a lo profundo (DFS)
Búsqueda a lo ancho (BFS)
3
Árboles abarcadores
Algoritmo de Kruskal
Algoritmo de Prim
4
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Bellmand-Ford
Algoritmo de Floyd-Warshall
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
19 / 33
Árboles abarcadores
Algoritmo de Prim
Algoritmo de Prim I
Pendiente.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
20 / 33
Caminos más cortos
Caminos más cortos
1
Gráficas
2
Recorridos en gráficas
3
Árboles abarcadores
4
Caminos más cortos
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
21 / 33
Caminos más cortos
Caminos más cortos I
Una digráfica ponderada es una digráfica con pesos o costos
asociados a cada arista.
El camino más corto de un vértice s (source) hacia un vértice t
(sink) es un camino dirigido desde s hacia t con la propiedad de
que no existe otro camino de costo o peso menor.
Es importante considerar las siguientes propiedades para
caminos más cortos:
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
22 / 33
Caminos más cortos
Caminos más cortos II
Propiedades para caminos más cortos I
Los caminos son dirigidos. Un camino más corto debe respetar
la dirección de sus aristas.
Los pesos no necesariamente son distancias. Debe ser más
general que la intuición geométrica.
No todos los vértices tienen por que ser alcanzables.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
23 / 33
Caminos más cortos
Caminos más cortos III
Propiedades para caminos más cortos II
Pesos negativos añaden grandes complicaciones.
Los caminos más cortos normalmente son caminos simples.
Ciclos de costo cero son evitados.
El camino más corto no es necesariamente único.
Los lazos no suelen estar presentes.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
24 / 33
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Dijkstra
1
Gráficas
2
Recorridos en gráficas
Búsqueda a lo profundo (DFS)
Búsqueda a lo ancho (BFS)
3
Árboles abarcadores
Algoritmo de Kruskal
Algoritmo de Prim
4
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Bellmand-Ford
Algoritmo de Floyd-Warshall
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
25 / 33
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Dijkstra I
El algoritmo de Dijkstra permite calcular la distancia y ruta más
corta a cualquier vértice a partir de punto de partida s.
Su nombre se refiere a Edsger Dijkstra, quien lo describió por
primera vez en 1959.
La idea consiste en ir explorando los primeros caminos más
cortos desde el vértice s hasta terminar con todos los vértices.
Las partes principales del algoritmo son la inicialización de padres
y distancias, la función de relajación y el algoritmo en sı́.
Supondremos que las etiquetas de los vértices son enteros
0-indexados, es decir que van del 0 al n − 1.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
26 / 33
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Dijkstra II
Función de inicialización
Entrada: distancia[], padre[], revisado[], n y s. El arreglo de distancias
distancia, el de padres padre, el de revisados revisado, el número de
vértices n (0-indexados) y el vértice de inicio s.
Salida: Los arreglos distancia y padre inicializados.
1
Para cada vértice v ∈ G (desde 0 hasta n − 1).
1
2
distancia[v] = ∞, padre[v] = -1, revisado[v] = falso;
distancia[s] = 0, padre[s] = s.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
27 / 33
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Dijkstra III
Función de relajación
Entrada: Q, distancia[], padre[], u, v y el costo w. La cola de prioridad
Q, el arreglo distancia, el de padres padre los vértices u, v y el costo
w = costou→v .
Salida: La actualización de distancia de v y de su padre.
1
Si distancia[v ] > distancia[u] + w
1
distancia[v ] = distancia[u] + w, padre[v ] = u;
2
Q.actualizar(v , distancia[u] + w);/*se actualiza v en Q con el nuevo
costo tal que ahora distancia[v] = distancia[u] + w*/
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
28 / 33
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Dijkstra IV
Algoritmo de Dijkstra
Entrada: G y s. La gráfica G y el vértice origen s.
Salida: Las distancias más cortas desde s a sus vértices alcanzables.
1
Crear *distancias, *padres, *revisados y una cola de prioridad Q;
2
Inicializar(distancias, padres, revisados, n = |V |, s);
3
Q.Insertar(s, 0);
4
Mientras Q no sea vacı́a
1
2
3
actual = Q.extraer minimo();
revisado[actual] = verdadero;
Para cada nuevo vecino v de actual, tal que revisado[v] = falso
1
Relajar(Q, distancias, padres, actual, nuevo, costo actual → nuevo);
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
29 / 33
Caminos más cortos
Algoritmo de Bellmand-Ford
Algoritmo de Bellmand-Ford
1
Gráficas
2
Recorridos en gráficas
Búsqueda a lo profundo (DFS)
Búsqueda a lo ancho (BFS)
3
Árboles abarcadores
Algoritmo de Kruskal
Algoritmo de Prim
4
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Bellmand-Ford
Algoritmo de Floyd-Warshall
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
30 / 33
Caminos más cortos
Algoritmo de Bellmand-Ford
Algoritmo de Bellmand-Ford I
Pendiente.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
31 / 33
Caminos más cortos
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall
1
Gráficas
2
Recorridos en gráficas
Búsqueda a lo profundo (DFS)
Búsqueda a lo ancho (BFS)
3
Árboles abarcadores
Algoritmo de Kruskal
Algoritmo de Prim
4
Caminos más cortos
Algoritmo de Dijkstra
Algoritmo de Bellmand-Ford
Algoritmo de Floyd-Warshall
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
32 / 33
Caminos más cortos
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall I
Pendiente.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
33 / 33
Descargar