Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmos Sobre Grafos 2017-II
Algoritmos Sobre Grafos 2017-II
2017
Agenda
Abstracción
Implementación
Agenda
Abstracción
Implementación
Abstracción
Tipo de Dato Abstracto (TDA)
Datos?
Operaciones?
árbol
grafo
Abstracción Recorridos sobre grafos
•BFS(G,s) { /* pseudo-código */
int d[N], p[N], color[N]; /* Arreglos de distancia, de padres, y de color */
QUEUE Q; /* Cola usada como estructura auxiliar */
for ( cada vértice u V[G] -{s}) {
color [u] =Blanco;
d[u] = ; /* distancia infinita si el nodo no es alcanzable */
}
color[s] =Gris;
d[s] = 0;
p [s]=NULL;
Enqueue(Q, s);
while ( !Queue_Vacía(Q) ) {
u = Cabeza(Q); /* u es el primer nodo de la cola */
for ( cada v Adj [u] ) {
if (color [v] == Blanco) {
color[v]=Gris; /* Gris al entrar a la cola */
d [v]=d [u] +1;
p [v] = u;
Enqueue(Q, v);
}
Dequeue(Q); /* se extrae u */
color [u] = Negro; /* negro luego de salir de la cola */
}
}
• 5, 7, 3, 11, 8, 2, 9, 10
visual izquierda-derecha, arriba-abajo
• 3, 5, 7, 8, 11, 2, 9, 10
los vértices disponibles de menor número
primero
5, 7, 3, 8, 11, 10, 9, 2
los de menor número de árcos primero
• 7, 5, 11, 3, 10, 8, 9, 2
los vértices disponibles de mayor número
primero
• 5, 7, 11, 2, 3, 8, 9, 10
visual arriba-abajo, izquierda-derecha,
• 3, 7, 8, 5, 11, 10, 2, 9
arbitrario
Abstracción
Ordenación topológica
Ordenar los vértices de un grafo dirigido acíclico (DAG) así:
Importante:
Ejemplo:
Identificar los nodos con tareas a realizar entre los cuales hay una
precedencia a la hora de ejecutar dichas tareas
Ejemplo
2. Volver al paso 1
5. Volver al paso 2
Abstracción Ordenación topológica –
pseudocódigo
if ( v == null )
throw new CycleFoundException();
v.topNum = counter;
7 5 6
Abstracción
Ordenación topológica
Ejemplo
Abstracción
Ordenación topológica
Ejemplo
Abstracción Camino más corto
Grafos ponderados:
•Cada arco (vi, vj) tiene un costo asociado ci,j
Grafos no ponderados:
La longitud del camino no ponderado simplemente
corresponde al número de arcos en el camino: N –1
Abstracción Camino más corto desde un único nodo
origen
Problema:
Ejemplo:
v1 a v4 a v7 a v6
• El camino más corto no ponderado entre v1 y v6 es 2
Abstracción Camino más corto desde un nodo
origen
Pasos:
a. Desencolar un nodo v
b. Para todos los nodos u (nodos adyacentes a v), que aún no
hayan sido marcados como alcanzados:
i. Asignar a u la distancia de v + 1
ii. Marcar u como nodo alcanzado desde v
iii. Encolar u
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un nodo
origen
Algoritmo para grafos no ponderados:
Breadth First Search – BFS (Búsqueda en anchura)
Abstracción Camino más corto desde un único nodo
origen
Algoritmo:
Dijkstra
Abstracción Camino más corto desde un único nodo
origen - Dijkstra
Es decir, la distancia tentativa del nodo vi es la distancia que actualmente tiene el nodo en el
arreglo D más la distancia desde el nodo a al nodo vi. Si la distancia tentativa es menor que
la distancia almacenada en el arreglo, se actualiza el arreglo con esta distancia tentativa. Es
decir:
Si dt(vi) < Dvi entonces Dvi = dt(vi)
Se marca como completo el nodo a.
Se toma como próximo nodo actual el de menor valor en D (puede hacerse almacenando los
valores en una cola de prioridad) y se vuelve al paso 3 mientras existan nodos no
marcados.
Al final del algoritmo, D estará completamente lleno.
Abstracción Camino más corto desde un nodo
origen - Dijkstra
Videos ilustrativos
Abstracción
Implementación
Abstracción Ordenación topológica –
pseudocódigo
if ( v == null )
throw new CycleFoundException();
v.topNum = counter;