Grafos

Anuncio
Departamento
Informática
Aplicada
Algorítmica y Complejidad
Tema 3 – Algoritmos sobre Grafos
Curso 2012-13
Grafos
1 Conceptos,
1.
Conceptos Definiciones y Representación
2 Conectividad y recorrido
2.
3 Árboles de expansión
3.
4 Caminos mínimos
4.
2
Grafos
1.
2 Conectividad y recorrido
2.
3 Árboles de expansión
3.
4 Caminos mínimos
4.
3
Conceptos, Definiciones y Representación
El origen de la teoría de grafos ...
El problema de los puentes de Königsberg (1736)
¿es posible dar un paseo comenzando desde cualquiera de estas
regiones,
i
pasando
d por ttodos
d llos puentes,
t
recorriendo
i d sólo
ól una vez
cada uno, y regresando al mismo punto de partida?
Resuelto por Euler
l
No hay solución
•Se puede comprobar utilizando “fuerza bruta”
•Demostración
D
t ió d
de E
Euler
l
Grafos
4
Conceptos, Definiciones y Representación
Ejemplos
–
–
–
–
Redes de transporte (carreteras, rutas aéreas, ...)
Redes de comunicación (Internet)
R d d
Redes
de iinformación
f
ió (WWW)
Redes sociales (Facebook, Twitter, FourSquare, ...)
– Dependencias (asignaturas pre-requisito, diagramas de flujo, ...)
D fi i ió formal
Definición
f
l de
d grafo
f
– Par de conjuntos G=(V, E)
•
•
•
•
Grafos
V nodos y E aristas
Cada arista es un par (u,v) con u,v  V
Si el p
par está ordenado es un g
grafo dirigido
g
Si no está ordenado es un grafo no dirigido
5
Conceptos, Definiciones y Representación
grafo (g
(grado G )
• Grado del g
– Número de nodos / vértices |V|
• Nodos adyacentes
– Si están unidos por una arista
• Grado de un nodo (grado u )
– Número de aristas que inciden en un nodo ó número de nodos
adyacentes
–
Handshaking Lemma
– En grafo dirigido: grado de entrada y grado de salida
• Camino
C
entre dos nodos ((path u,v )
– Secuencia de nodos, tal que dos nodos consecutivos son
adyacentes (uxi, xixi+1
i 1, xi+1
i 1xi+2
i 2, ...., xi+n
i v)
– Es simple cuando no hay nodos repetidos en el camino
– Ciclo es un camino simple pero con u = v
Grafos
6
Conceptos, Definiciones y Representación
• Grafo conexo
Cada par de nodos está conectado
por un camino
• Grafo no conexo
No existe un camino que una un
nodo con los demás
No existe un camino entre a y e
• Bosque
–Grafo sin ciclos
• Árbol libre
–Bosque conexo
–Con un nodo en el papel de raíz
Grafos
7
Conceptos, Definiciones y Representación
• Siempre se cumple que:
a.
b.Si G es conexo, |E|  |V|-1
c.Si
Si G es árbol,
á b l |E| = |V|-1
|V| 1
d.Si G es bosque |E| |V|-1
• Describir este grafo (grid)
1.
1
2.
3.
4
4.
Grafos
¿Dirigido
Di i id o no di
dirigido
i id
¿Conexo?
¿Bosque?
Grado de los nodos
8
Conceptos, Definiciones y Representación
Representación de grafos
1
2
3
• Listas de adyacencia
5
1
2
5
2
1
5
3
2
4
4
2
5
3
5
4
1
2
3
4
4
G=(V,E)
Las aristas pueden
tener pesos asociados.
• Grafos poco densos
 |E| << |V|2
 Espacio (|V|+|E|)
• Si el grafo es dirigido
 list[i].length = |E|
• Si ell grafo
f es NO dirigido
di i id
 list[i].length = 2*|E|
• Longitud total de la lista (|E|)
Grafos
9
Conceptos, Definiciones y Representación
Representación de grafos
1
2
3
• Matriz de adyacencia
5
1
2
3
4
5
1
0
1
0
0
1
2
1
0
1
1
1
3
0
1
0
1
0
4
0
1
1
0
1
5
1
1
0
1
0
Grafos
4
G=(V,E)
Las aristas pueden
tener pesos asociados.
• Grafos densos
 |E| ≈ |V|2
 Un solo bit por arista
 Espacio (|V|2)
• Consultas
C
lt sobre
b aristas
i t
10
Grafos
1 Conceptos,
1.
Conceptos Definiciones y Representación
2.
3 Árboles de expansión
3.
4 Caminos mínimos
4.
11
Conectividad y Recorrido
Dado un grafo G=(V,E) y dos nodos s y t
– Problemas: ¿Existe un camino para llegar de s a t?
¿A qué distancia están?
– Concepto de distancia entre dos nodos s y t como  (s, t)
• Mínimo número de aristas entre s y t.
– Breadth-First Search (BFS)
• Recorrido en amplitud. Dado un nodo s, primero visita todos los
nodos a distancia 1 (L1) de s, luego a distancia 2 (L2), y así
sucesivamente.
• Li(s) Conjunto de nodos a distancia i de s
– Depth-First Search (DFS)
• Recorrido en profundidad. Dado un nodo s, visita el primer nodo
conectado a s y después el primer nodo conectado al último
visitado
Grafos
12
Conectividad y Recorrido
Breadth-First
Breadth
First Search
1
7
2
3
4
5
8
6
BFS ((G,, s = 1))
1
2
L1
1
1
3
2
L2
4
2
3
5
7
8
4
5
L3
Grafos
3
7
8
6
13
Conectividad y Recorrido
• BFS (G, s) - Implementación
– s y u están conectados si u  Lj con j ≥ 1
– Visitados Lista con los nodos visitados
BFS G, s :
Visitados s  true,  u s Visitados s  false
L 0  L 0  s , i  0, T  Ø while L i Ø do
L i 1  Ø foreach u in L i do
foreach v in G do
if G.Matriz u,v 0 & Visitados v false then
Visitados v  true
T  T  u, v
L i 1  L i 1  v
endif
endfor
endfor
i  i 1
endwhile
Grafos
T: Árbol generado por BFS (lista
de aristas de los nodos accesibles
desde el nodo s)
No hay orden al procesar L
¿Existe la arista (u, v) y v no ha
sido visitado todavía?
Añadir la arista en el árbol T
Incluir el nodo encontrado
Complejidad O(|V|2)
Con listas de adyacencia
y
O (|
(|V|+|E|)
| | |)
14
Conectividad y Recorrido
• Complejidad de BFS
– Un nodo sólo puede aparecer en una lista (Li)
– Por lo tanto el bucle foreach se ejecuta n |V| veces
– Cada iteración del bucle se ejecuta n veces, se
consideran todos los nodos
– Un cota es O n2
– Una cota mejor:
• Utilizando listas de adyacencias en lugar de matriz
• El procesamiento de cada nodo u puede optimizarse si tiene
pocos vecinos
• La longitud de la lista de adyacencia es 2
2*m,
m, m m |E|
|E|
• El bucle foreach se ejecutará m veces
• Para manejar Li y Visitados se emplea O n
• Una cota mejor es O m n
Grafos
15
Conectividad y Recorrido
1
Depth-First
Depth
First Search
2
4
Procesamiento de izda
izda. a dcha
dcha.
7
3
5
6
8
Procesamiento de dcha.
dcha a izda
izda.
1
1
2
3
4
5
6
3
8
7
Grafos
7
5
8
6
4
2
16
Conectividad y Recorrido
• DFS ((G,, s)) – Implementación
p
((no recursiva))
– Utilizando una pila (S) para procesar los nodos
– Visitados: Lista con los nodos visitados
DFS G, s :
 i  V, Visitados i  false
push h S, S s
while S Ø do
u  pop u 
pop S
if Visitados u false then
Visitados u  true
foreach v in G.Adyacencia u do
push S, v
endfor
df
endif
endwhile
Grafos
C
Complejidad
l jid d
•Añadir y borrar un nodo de S, O 1
•El
El número
ú
d
de operaciones
i
en S
acotado por el grado de G, O |E|
•Operaciones
Operaciones en la lista acotadas
por |V|
•O ||E|| ||V|| utilizando listas de
Adyacencia
17
Conectividad y Recorrido
• DFS (G, s) – Implementación (recursiva)
– Visitados Lista con los nodos visitados
– R Lista de elementos conectados desde un nodo dado
– T Árbol DFS
1
2
DFS G, u :
Visitados u  true
R R 
R 
R
u
foreach v in G.Adyacencia u do
if Visitados v false then
T  T  u,v
DFS G, v
endif
endfor
Grafos
4
7
3
5
8
6
Li t d
Lista
de Ad
Adyacencias
i
1.
2.
3.
4.
5.
6.
7
7.
8.
2, 3
1, 3, 5, 4
5, 7, 8, 1, 2
2, 5
4, 6, 2, 3
5
8
8, 3
7, 3
18
Conectividad y Recorrido
Grafos Dirigidos
– Con BFS y DFS comprobamos la existencia de un camino entre
dos nodos s y t
– Aunque exista el camino
camino, puede que no exista entre t y s
– Un grafo está fuertemente conectado si:
•  s, t  V, existe un camino entre s y t y entre t y s
A
C
B
A
B
C
D
D
Fuertemente conectado
E
NO fuertemente conectado
• Algoritmo:
g
1.BFS (G, s) ó DFS (G, s)
2.Calcular Grev (Invertiendo el sentido de las artistas)
3.BFS (Grev, s) ó DFS (Grev, s)
4.Si BFS ó DFS fallan y no alcanzan todos los nodos, el grafo NO está fuertemente conectado
Grafos
19
Conectividad y Recorrido
Grafos Dirigidos
– Sin ciclos es un DAG (Directed Acyclic Graph)
– Los DAG aparecen con bastante frecuencia
• Relaciones de precedencia o dependencia
– Si se puede establecer un orden entre los nodos, de tal forma que
(u, v)  E y u < v (orden), entonces G tiene orden topológico.
– Si G es un DAG, entonces tiene orden topológico
MD
FP
ED
ALG
SO
Posible precedencia de las
asignaturas de Grado
Grafos
ED
SD
POO
C
FP
MD
ALG
POO
C
SO
SD
Orden topológico de las
asignaturas
20
Conectividad y Recorrido
Algoritmo de ordenación topológica
2
– R Lista con la ordenación (resultado)
– Complejidad O n2
6
ORDENACION_TOPOLÓGICA G :
Encontrar un nodo u /  v  V, v, u  E
R
R 
u  R
G.V  G.V u
if G.V G.V Ø then
Ø then
ORDENACION_TOPOLÓGICA G
endif 3
6
5
5
5
7
R  1, 2
Grafos
4
7
R  1, 2, 3
4
7
1
2
3
6
5
4
7
R  1
4
7
6
6
3
6
5
R  1, 2, 3, 4, 5, 6
7
7
R  1, 2, 3, 4, 5, 6, 7
R 1
R 
1, 2, 3, 4, 5
2 3 4 5
R  1, 2, 3, 4
21
Grafos
1 Conceptos,
1.
Conceptos Definiciones y Representación
2 Conectividad y recorrido
2.
3 Árboles de expansión
3.
4 Caminos mínimos
4.
22
Árboles de Expansión
¿Cómo conectar todos los nodos con el mínimo coste?
4
8
B
D
2
11
A
7
C
I
7
8
14
4
9
w(u, v), T  E
(u,v)T
E
6
w : E 
10
H
1
G
2
F
Aplicaciones
•Logística
•Conexionado
 Ciudades
Ciudades,
 Componentes eléctricos,
 Personas, etc.
•Enrutamiento en redes
Algoritmos de construcción (Voraces)
•Genérico
•Kruskal
•Prim
Grafos

w(T) 
4
B
8
7
C
D
2
I
A
H
1
E
4
G
9
2
F
C t 37
Coste
Se puede sustituir (B,C) por (A,H)
con igual coste
23
Árboles de Expansión
Propiedades de los arboles de expansión:
– Tienen |V|-1 arcos
– No tienen ciclos
– Pueden
P d no ser ú
únicos
i
MST_GENERICO G, w : // Minimum Spanning Tree
A  Ø A 
Ø
# Conjunto de arcos que forman el MST
# Conjunto de arcos que forman el MST
while A no forme Minimum Spanning Tree do Encontrar un arco e  E,  f  E, / w
/ e  w f && A  e sea acíclico A  A  e
E  E ‐ e
done
return A
– Añ
Añade
d un arco cada
d vez all á
árbol
b ld
de expansión
ió (A)
– Finaliza cuando todos los nodos están conectados
– El problema es comprobar que no se añaden ciclos
Grafos
24
Árboles de Expansión
Algoritmo de Kruskal
• Descripción
– Algoritmo voraz, en cada iteración añade un arco de peso mínimo
– Utiliza dos conjuntos:
• Un bosque F, que inicialmente contiene un árbol por cada vértice V
• Un conjunto S con los arcos del grafo G (inicialmente S = G.E)
– Mientras S contenga arcos y F no sea un árbol de expansión
• Extraer de S el arco de peso mínimo (u,v)
• Si (u,v)
( ) une dos
d arboles
b l diferentes,
dif
t
añadir
ñ di ell arco a F y combinar
bi
llos
dos arboles en uno
– Al final del proceso F contiene un único componente que forma un árbol
de expansión
– El coste de ordenar S es O (m log m), siendo m = |E|
– Al existir al menos un arco entre cada p
par de nodos
• m  n2 m  n* n‐1 /2 Grafo no dirigido conexo
• lg m O lg n lg n2, 2*lg n O lg n • La cota es O O m log n
m log n
Grafos
25
Árboles de Expansión
Algoritmo
g
de Kruskal
• Ejemplo (1/2)
4
1
2
3
6
3
3
5
4
7
1
3
4
1
9
4
6
3
1
5
4
4
6
1
3
1
6
3
5
1
5
9
1
1
6
2
1
3
5
4
2
7
5
3
1
3
2
7
6
1
9
2
3
5
1
6
1
3
5
3
9
1
6
2
4
1
2
1
3
7
5
5
4
2
1
6
3
7
5
1
3
6
6
3
1
9
2
2
4
1
9
4
5
1
2
4
1
2
3
7
6
1
¡CICLO! Los nodos
2 y 5 pertenecen al
mismo árbol
Grafos
26
Árboles de Expansión
Algoritmo
g
de Kruskal
• Ejemplo (2/2)
4
1
2
3
6
3
5
1
3
5
9
4
6
6
1
5
3
4
6
6
1
5
1
9
3
3
5
1
2
7
4
1
2
1
9
3
3
5
1
2
7
4
1
2
4
1
2
3
7
6
1
Coste 12
• Implementación
– Mediante conjuntos para representar los diferentes arboles
– Estructura de datos para manejar conjuntos disjuntos (Union‐Find)
– Operaciones
p
sobre conjuntos:
j
• Make‐Set u
• Union u, v
• Find Find u
Grafos
27
Árboles de Expansión
Estructura de datos Union‐Find
– Find u devuelve el conjunto al que pertence el nodo u
– Para comprobar si un arco (u,v) genera un ciclo:
• if Find Fi d u Find Fi d v then
th ......
– Para combinar dos arboles mediante el arco (u,v):
• Union Union u,
u, v
v
S1
S2
cab
cola
Arcos
cab
a
b
cola
Conjunto
(a,b)
{a, b}
(c,d) (d,e)
{c, d, e}
Grafos
c
d
e
A
C
B
D
E
28
Árboles de Expansión
Estructura de datos Union‐Find
Union Find
– Union b, c
S1
cab
cola
a
b
c
A
Arcos
B
e
C
Conjunto
(a,b)
{a, b}
(c,d) (d,e)
{c, d, e}
(a,b) (b,c) (c,d) (d,e) {a, b, c, d, e }
Grafos
d
Dos arboles
Un único árbol
D
E
29
Árboles de Expansión
Algoritmo de Kruskal
– Utilizando la estructura Union‐Find
Union Find
– A: conjunto con los arcos que forman el MST
– W: lista ordenada de arcos por peso
MST‐KRUSKAL G, w :
A  Ø
f
foreach
h v in
i G.V do // GVd
// cada nodo un conjunto
d
d
Make‐Set v
endfor
W  Ordenar Ascendente, G.E, w
Para comprobar A MST
while A MST do
•Un único conjunto
j
Union‐Find
u,v  ExtraerPrimerArco W
•Todos los nodos V conectados
if Find u Find v
A A 
A 
A
u, v
Union u, v
endif
endwhile
30
Grafos
Árboles de Expansión
Algoritmo de Prim
• Descripción
–
–
–
–
Variante del algoritmo genérico
Algoritmo voraz, en cada iteración añade un arco de peso mínimo
Mantiene un único árbol (en cambio, Kruskal un bosque)
Utiliza dos conjuntos
• A para almacenar los arcos que forman el MST
• S nodos que forman parte del MST
– Mientras
Mi t
G V − S Ø
G.V
Ø
• Escoger el arco de peso mínimo u, v tal que u  S y v  G.V − S
• Añadir (u, v) al conjunto A
• Añadir a S el extremo de (u, v) que no pertenece a S
– Cotas
• Con matrices de adyacencia es O O V2
• Con colas y listas de adyacencia para implementar S es O V E lg V
• Con montículos de Fibonacci y listas de adyacencia es O E V lg V
Grafos
31
Árboles de Expansión
Algoritmo de Prim
• Ejemplo
Ej
l
4
1
2
3
6
3
4
3
3
6
3
4
6
3
6
4
1
6
1
2
3
6
3
5
5
4
1
2
3
7
6
1
5
1
5
9
4
1
2
3
7
Grafos
3
1
9
3
7
6
1
2
1
4
1
3
4
9
2
5
1
6
2
1
5
1
1
3
7
3
3
5
7
4
1
2
4
2
1
5
1
9
6
3
5
1
7
5
6
3
1
9
4
2
1
1
2
4
3
5
9
2
5
1
2
1
6
1
6
3
3
5
7
4
1
9
4
5
1
2
6
1
32
Árboles de Expansión
Algoritmo de Prim
– El tiempo de ejecución del algoritmo depende de la
búsqueda del arco de peso mínimo
– Para cada nodo se añaden las informaciones:
• key
Para mantener ordenados los nodos
• parent
Nodo padre en el árbol de expansión
– Q mantiene
a te eo
ordenados
de ados los
os nodos
odos de acue
acuerdo
do a key
ey
– A guarda el MST A v, v.parent : u  V – r – Q Grafos
33
Árboles de Expansión
Algoritmo de Prim
MST‐PRIM G, w, r :
while Q Ø do
¡¡ Crítico !!
foreach u in G.V do
G V do
u  EXTRACT
EXTRACT‐MIN MIN Q
foreach v in G.Adyacencia u
u.key  
Inicialización
u parent 
u.
parent  NIL
if v  Q && Q && w u, v v.key
key
endfor
v.parent  u
r.key 
k
0 # Nodo raíz
0 #N d
í
v.key 
k
w u, v
Q  G.V
A A  v, v.parent
endif
dif
endfor endwhile
d hl
Grafos
34
Árboles de Expansión
A
Algoritmo de Prim
 V ‐ A
– Seguimiento (1/2)
Nodo
Adyac.
Key
Parent
A
B C
B,
0
NIL
B
A, D

NIL
C
A, D

NIL
D
B, C

NIL
Nodo
Adyac.
Key
Parent
A
B C
B,
0
NIL
B
A, D
2
A
C
A, D
1
A
D
B, C

NIL
Nodo
Adyac.
Key
Parent
A
B C
B,
0
NIL
B
A, D
2
A
C
A, D
1
A
D
B, C
4
C
Grafos
2
A
Q = {A, B, C ,D}
3
1
C
Q = {B, C ,D}
u = A, v = B, v = C
4
A
2
D
B
1
3
C
Q = {B, D}
u = C,
C v=A
A, v = D
B
A
4
2
D
B
1
3
C
4
D
35
Árboles de Expansión
Algoritmo de Prim
A
Seguimiento (1/2)
Nodo
Adyac.
Key
Parent
A
B, C
0
NIL
B
A, D
2
A
C
A, D
1
A
D
B C
B,
4
C
Nodo
Adyac.
Key
Parent
A
B, C
0
NIL
B
A, D
2
A
C
A, D
1
A
D
B C
B,
Nodo
Adyac.
A
4 3 C
4 3
 V \ A
Q = {B, D}
u = C,
C v = A,
A v=D
A
B
1
3
C
Q = {D}
u = B,
B v = A,
A v=D
A
4
2
D
B
1
3
B
C
Key
Parent
A
B, C
0
NIL
B
A, D
2
A
C
A D
A,
1
A
D
B, C
3
B
Grafos
2
Q = {Ø}
u = D, v = B, v = C
4
2
D
B
1
3
C
4
D
36
Árboles de Expansión
Análisis del algoritmo de Prim
MST‐PRIM G, w, r :
 V
|V| veces
Grafos
foreach u in G.V do
u.key 
key  
u.parent  NIL
endfor
r.key 
key  0 # Nodo raíz
0
# Nodo raíz
Q  G.V
while Q Q Ø
Ø do
do
u  EXTRACT‐MIN Q
foreach v in G.Adyacencia u
Decrementar /  E
if v  Q && Q && w u, v v.key
k
T cte v.parent  u
Grado(u)
v.key  w u, v
veces
A A 
A A
u, u.parent
Implícito
endif
endfor
endwhile
37
Árboles de Expansión
MST‐PRIM G, w, r :
 V
||V|| veces
foreach u in G.V do
G V do
u.key  
u.parent  NIL
endfor
r.key  0 # Nodo raíz
Q  G.V
while Q Ø do
u  EXTRACT‐MIN Q
f
foreach
h v in G.Adyacencia i G Ad
i u
if v  Q && w u, v v.key Decrementar /  E
T cte v.parent  u
Grado(u)
v.key 
k
w u, v
veces
A A  u, u.parent Implícito
endif
endfor
endwhile
Tiempo =  V * T
* TEXTRACT_MIN 
 E * T
* TDECREMENTAR_KEY
Grafos
38
Árboles de Expansión
• Análisis del algoritmo de Prim
– TEXTRACT_MIN y TDECREMENTAR_KEY depende de la estructura de datos
utilizada para implementar el conjunto Q
– TTOTAL =  V * TEXTRACT_MIN  E * TDECREMENTAR_KEY
Grafos
Q
TEXTRACT_MIN
EXTRACT MIN
TDECREMENTAR_KEY
DECREMENTAR KEY
TTOTAL
array
O(V)
O(1)
O(V2)
Binary heap
O(lg V)
O(lg V)
O(E lg V)
Fibonacci
Heap
O(lg V)
O(1)
O(E + V lg V)
amortizado
amortizado
Peor caso
39
Grafos
1 Conceptos,
1.
Conceptos Definiciones y Representación
2 Conectividad y recorrido
2.
3 Árboles de expansión
3.
4 Caminos mínimos
4.
40
Caminos mínimos
El p
problema: ¿
¿Cuál es la forma más rápida
p
de ir .... ?
– Camino mínimo
También
¿Cuál es la más barata?
¿
¿Cuál es la de menor
distancia recorrida?
1
A
2
B
1
2
5
C
D
4
3
F
E
1
2 caminos mínimos
Grafos
41
Caminos mínimos
Variantes del problema
•BFS caminos mínimos en grafos no ponderados
– Todos los enlaces con el mismo peso
•Caminos mínimos a un destino desde el resto de
nodos
•Caminos mínimos para todos los pares de nodos
– Una posible solución: calcular el camino mínimo para
cada nodo
Grafos
42
Caminos mínimos
Definiciones
•Se parte de un grafo dirigido y ponderado
– G
V,E
V E y w: ER
ER
•w
w p es
es el peso del camino p p v0, v
v1, ... v
vk
k
w( p)   w(vi1, vi )
i1
• u, v es el p
peso del camino mínimo entre u y v
 min {w( p) : u P
 v}
 (u, v)  


Grafos
Si existe un camino entre u y v
No hay camino
43
Caminos mínimos
j
de arcos
Técnica de la relajación
•Asignar peso y predecesor a cada vértice/nodo
– Peso al origen (v.d), inicialmente a infinito
– Predecesor (v.p), nodo previo en el camino
•Técnica de “Relajamiento”
A
d=5
2
B
d=9
RELAX
A
d=5
Grafos
2
B
d=7
iff B.d d A.d A d w A, B
A
then
h
B.d A.d w A,B
B p A
B.p A
44
Caminos mínimos
Algoritmo de Bellman-Ford
–
–
–
–
Camino mínimo a todos los nodos desde una fuente s
Permite pesos negativos
Devuelve los caminos mínimos y sus pesos asociados
Complejidad O (|V|*|E|) (2 bucles anidados)
BELLMAN‐FORD BELLMAN
FORD G, G w, s
ws:
INIT‐SINGLE‐SOURCE G, s
foreach n in  1 to |G.V‐1| do
f
foreach h u, v in G.E
i G E do
d
RELAX u, v, w
endfor
endfor
df
foreach u, v in G.E do
if v.d u.d w u, v
return FALSE
endif
endfor
return TRUE
Grafos
INIT‐SINGLE‐SOURCE G, s
foreach v in G.V do
v.d 
d∞
Relaja todas las
v.p  NIL
aristas |V-1| veces endfor
s.d
d0
Evitar ciclos
negativos
RELAX u, v, w
if v.d u.d w u,, v
v.d  u.d w u, v
v.p  u
endif
45
Caminos mínimos
g
de Bellman-Ford
Algoritmo
A
D=∞
3
-1
B
D=∞
2
S
D=0
C
D=∞
2
A
D=3
3
2
δ(S, A) = 3
δ(S, B) = 2
Grafos
C
D=2
S
D=0
4
D
D=∞
-1
2
S
D=0
3
-1
1
1
A
D=3
relax
relax
2
B
D=2
-1
D
D=6
δ(S,C) = 2
δ(S,D) = 3
4
2
C
D=2
A
D=3
3
-1
1
-1
2
S
D=0
2
C
D=2
1
B
D=∞
-1
4
D
D=∞
B
D=2
1
-1
4
D
D=3
“Relaja (C,D)”
46
Caminos mínimos
Algoritmo de Bellman-Ford
Bellman Ford (Con arcos de peso Negativo)
– Problema: No encontrar el camino mínimo en presencia de ciclos
A
D=3
-4
B
D=-1
D= 1
3
S
D=0
δ (S,A) = w(S,A) = 3
δ (S,B) = -1
4
5
6
C
d=5
D
d=11
8
G
d= ∞
d=-∞
-3
2
7
Para (S,C) hay infinitos caminos
( ) (s,c,d,c)
(s,c),
(
d ) .....
pero sólo uno de peso mínimo
δ (S,C) = w(S,C) = 5
3
E
d=-∞
d= ∞
F
d=-∞
d= ∞
-6
Cuantas más vueltas menor peso
Grafos
Para (S,E) hay infinitos caminos
(s,e), (s,e,f,e), (s,e,f,e,f,e) ....
NO existe un camino mínimo
δ (S,E) = -∞
Ídem para (S,F) y (S,G)
47
Caminos mínimos
Al
Algoritmo
it
de
d Dijkstra
Dijk t
–
–
–
–
–
–
Grafos
Grafos dirigidos con pesos no negativos
Explorar todos los caminos más cortos desde la fuente
Estrategia voraz
S conjunto de nodos cuyo camino ya ha sido obtenido
Q Montículo Min ordenado por v.d
Más rápido
p
q
que el algoritmo
g
de Bellman-Ford
• Con Montículo Min, O ( (|V|+|E|) log |V|)
• Sin utilizar Montículo,, O (|V|
(| |2)
48
Caminos mínimos
DIJKSTRA G
DIJKSTRA
G, w, s
ws:
INIT‐SINGLE‐SOURCE G, s
SØ
S 
Q  G.V
while
hil Q Q Ø do
Ød
u  EXTRACT‐MIN Q
S  S 
S
u
foreach v in G.Adyacencia u do
RELAX u, v, w
RELAX
endfor
endwhile
d hl
Grafos
u tiene d (distancia)
menor a la fuente (s)
(s),
en el conjunto V − S
49
Caminos mínimos
Nodos en S
Algoritmo de Dijkstra
A
D=∞
P=
3
1
2
S
D=0
P=
2
C
D=∞
P=
A
D=3
D
3
P=S
3
1
1
2
S
D=0
P
P=
2
C
D=2
P=S
relax
1
B
D=∞
P=
3
S
D=0
P=
4
1
D
D=∞
D
P=
B
D=∞
D
P=
D
D=3
P=C
3
1
2
2
C
D 2
D=2
P=S
1
2
B
D=4
P=A
1
D
D=3
P=C
C
D=2
P=S
1
1
relax
2
S
D=0
P=
A
D=3
P=S
1
2
A
D=3
P=S
3
4
1
relax
2
S
D=0
P=
Grafos
relax
A
D=3
P=S
C
D=2
P=S
1
B
D=∞
P=
1
4
D
D=∞
P=
B
D=4
P=A
1
4
D
D=3
P=C
4
¿Existe algún
camino alternativo?
50
Caminos mínimos
Nodos en S
Algoritmo de Dijkstra
A
D=3
P=S
3
B
D=∞
P=
1
2
S
D=0
P=
2
C
D=2
P=S
1
3
D
D=3
P=C
2
A
D=3
P S
P=S
3
2
S
D=0
P=
2
Grafos
1
C
D=2
P=S
1
1
2
S
D=0
P=
4
1
relax
A
D=3
P=S
P
S
C
D 2
D=2
P=S
1
B
D=4
P=D
P
D
relax 4
1
D
D=3
P=C
B
D=4
P D
P=D
relax 4
1
D
D=3
P=C
51
Descargar