Академический Документы
Профессиональный Документы
Культура Документы
E. Vidal UPV
AD3-Grafos-5
Diciembre, 2000
Bibliograf a:
Cormen Leiserson y Rivest: Introduction to Algorithms, MIT press, 1990. Aho, Hopcroft y Ullman: The Design and Analysis of Computer Algorithms, AddisonWesley, 1974.
E. Vidal UPV
P agina 5.1
AD3-Grafos-5
Diciembre, 2000
Recorrido en Profundidad
Dado un grafo G = (V, A) y un v ertice v V , la estrategia de recorrido en Profundidad, o Depth-First Search (DFS), explora sitem aticamente las aristas de G de manera que primero se visitan los v ertices adyacentes a los visitados mas recientemente. De esta forma se va profundizando en el grafo; es decir, alejandose progresivamente de v . Esta estrategia admite una implementaci on simple en forma recursiva, utilizando globalmente un contador (n) y un vector de Naturales (R) para marcar los v ertices ya visitados (Rv > 0) y almacenar el orden de recorrido. funci on RP(G) { n = 0; v V Rv = 0 v V si (Rv = 0) DFS(v ) devolver(R) } // Coste temporal: O(|V | + |A|) algoritmo DFS(v ) { n = n+1; Rv = n w adyacentes(v ) si (Rw = 0) DFS(w) }
E. Vidal UPV
P agina 5.2
AD3-Grafos-5
Diciembre, 2000
2 1 3
7 6
1/2,3,4,5 2 3/2,6,8 6/7 7/2 8/6 4/3,8 5/ 9/5,8 R
8 4 5 9
AD3-Grafos-5
Diciembre, 2000
2:2 1:1 4:0 5:0 3:3 8:0 9:0 9:0 5:0 6:0 7:0 1:1 4:0 3:3 8:0 6:4 7:0
2:2
2:2 1:1 4:0 5:0 3:3 8:0 9:0 9:0 5:0 6:4 7:5 1:1 4:0 3:3 8:6 6:4 7:5
2:2
E. Vidal UPV
P agina 5.4
AD3-Grafos-5
Diciembre, 2000
2:2 1:1 4:7 5:8 3:3 8:6 9:9 9:9 5:8 6:4 7:5 1:1 4:7 3:3 8:6 6:4 7:5
2:2
E. Vidal UPV
P agina 5.5
AD3-Grafos-5
Diciembre, 2000
E. Vidal UPV
P agina 5.6
AD3-Grafos-5
Diciembre, 2000
2 1 3
7 6
2 3 2 6 8 4 3 8 5 6
8 4 5 9
9 9 9 9
7 8 6 7
5 8
1 1 1
2 0 2 2
3 0 3 3
4 0 4 4
5 0 5 5
6 0 6 6
7 0 8 8
8 0 7 7
9 0 9 9
<1> <> <2> < 2, 3 > < 2, 3, 4 > < 2, 3, 4, 5 > < 3, 4, 5 > < 4, 5 > < 4, 5, 6 > < 4, 5, 6, 8 > < 5, 6, 8 > < 6, 8 > <8> < 8, 7 > <7> <> <9> <>
E. Vidal UPV
P agina 5.7
AD3-Grafos-5
Diciembre, 2000
2:2 1:1 4:4 5:5 3:3 8:0 9:0 9:0 5:5 6:0 7:0 1:1 4:4 3:3 8:7 6:6 7:0
2:2
2:2 1:1 4:4 5:5 3:3 8:7 9:0 9:0 5:5 6:6 7:0 1:1 4:4 3:3 8:7 6:6 7:0
2:2
E. Vidal UPV
P agina 5.8
AD3-Grafos-5
Diciembre, 2000
2:2 1:1 4:4 5:5 3:3 8:7 9:9 9:9 5:5 6:6 7:8 1:1 4:4 3:3 8:7 6:6 7:8
2:2
E. Vidal UPV
P agina 5.9
AD3-Grafos-5
Diciembre, 2000
funci on OTP(G) { n = 0; v V Rv = 0; P=P v V si (Rv = 0) DFS(v ) devolver(P) } // Coste temporal: O(|V | + |A|)
E. Vidal UPV
P agina 5.10
AD3-Grafos-5
Diciembre, 2000
2 1 3
7 6
8 4 5 9
1 0 1 -
2 0 2 -
3 0 3 -
4 0 7 -
R 5 0 8 -
6 0 4 -
7 0 5 -
8 0 6 -
9 0 9
P <> <> <2> <2> <2> < 7, 2 > < 6, 7, 2 > < 8, 6, 7, 2 > < 3, 8, 6, 7, 2 > < 4, 38, 6, 7, 2 > < 5, 4, 3, 8, 6, 7, 2 > < 1, 5, 4, 3, 8, 6, 7, 2 > < 9, 1, 5, 4, 3, 8, 6, 7, 2 >
E. Vidal UPV
P agina 5.11
AD3-Grafos-5
Diciembre, 2000
2:2 1:1 4:0 5:0 3:0 8:0 9:0 9:0 5:0 6:0 7:0 1:1 4:0 3:3 8:0 6:0 7:0
2:2
2:2 1:1 4:0 5:0 3:3 8:0 9:0 9:0 5:0 6:4 7:0 1:1 4:0 3:3 8:0 6:4 7:5
2:2
E. Vidal UPV
P agina 5.12
AD3-Grafos-5
Diciembre, 2000
2:2 1:1 4:0 5:0 3:3 8:6 9:0 9:0 5:0 6:4 7:5 1:1 4:0 3:3 8:6 6:4 7:5
2:2
2:2 1:1 4:0 5:0 3:3 8:6 9:0 9:0 5:0 6:4 7:5 1:1 4:7 3:3 8:6 6:4 7:5
2:2
E. Vidal UPV
P agina 5.13
AD3-Grafos-5
Diciembre, 2000
2:2 1:1 4:7 5:8 3:3 8:6 9:0 9:0 5:8 6:4 7:5 1:1 4:7 3:3 8:6 6:4 7:5
2:2
2:2 1:1 4:7 5:8 3:3 8:6 9:9 9:9 5:8 6:4 7:5 1:1 4:7 3:3 8:6 6:4 7:5
2:2
E. Vidal UPV
P agina 5.14
AD3-Grafos-5
Diciembre, 2000
E. Vidal UPV
P agina 5.15
AD3-Grafos-5
Diciembre, 2000
Algoritmos en Grafos
1. Recorridos b asicos de grafos: Profundidad, Anchura y Orden Topol ogico 2. Arbol de recubrimiento m nimo: algoritmos de Kruskal y Prim 3. Caminos m nimos: algoritmo de Dijkstra
E. Vidal UPV
P agina 5.16
AD3-Grafos-5
Diciembre, 2000
Ejemplo
a 8 b 6 6 c 4 9 4 5 1 d 2 e 3 b 6 6 c 8 4
a 9 2 5 1 d e 3
AD3-Grafos-5
Diciembre, 2000
E. Vidal UPV
P agina 5.18
AD3-Grafos-5
Diciembre, 2000
E. Vidal UPV
P agina 5.19
AD3-Grafos-5
Diciembre, 2000
E. Vidal UPV
P agina 5.20
AD3-Grafos-5
Diciembre, 2000
Algoritmo de Kruskal
funci on KRUSKAL(G=(V,A,p)) { H = BuildHeap(p, A); S = BuildMFSET(V ); A = ; D = 0 mientras (|A | < |V | 1) { (q, (u, v )) = extraeMinHeap(H ) // leer y eliminar el m nimo x =FIND(u); y =FIND(v ) si (x = y ) { MergeSet(x, y ); A = A (u, v ); D = D + q } } devolver(T,D) // T = (V, A ) } // O(a log a), (a = |A|) El coste es en general bastante inferior a la cota O(a log a). Si m es el n umero de iteraciones del mientras, t picamente m n a n2 . En la pr actica, el coste est a mas cercano a a + n log n que a a log a.
E. Vidal UPV
P agina 5.21
AD3-Grafos-5
Diciembre, 2000
50 80 1 20 40 3 40 10 40 3 2 60 60 4 1 20 30 5 80 2 60 60
50 30 4 10 40 5
Grafo Inicial
find(3) != find(5)
90
90
50 80 1 20 40 3 40 10 40 3 2 60 60 4 1 20 30 5 80 2 60 60
50 30 4 10 40 5
find(1) != find(4)
find(4) != find(5)
E. Vidal UPV
P agina 5.22
AD3-Grafos-5
Diciembre, 2000
50 80 1 20 40 3 40 10 40 3 2 60 60 4 1 20 30 5 80 2 60 60
50 30 4 10 40 5
find(3) == find(4)
90
90
50 80 1 20 40 3 40 10 40 3 2 60 60 4 1 20 30 5 80 2 60 60
50 30 4 10 40 5
find(2) != find(5)
E. Vidal UPV
P agina 5.23
AD3-Grafos-5
Diciembre, 2000
: : : : : : : :
1751 instancias en 2513 instancias en 471 instancias en 626 instancias en 123 instancias en 143 instancias en 32 instancias en 32 instancias en 7 instancias en 8 instancias en
10.00 segundos 10.00 segundos 10.01 segundos 10.01 segundos 10.07 segundos 10.02 segundos 10.16 segundos 10.04 segundos 10.05 segundos 11.52 segundos
P agina 5.24
AD3-Grafos-5
Diciembre, 2000
AD3-Grafos-5
Diciembre, 2000
E. Vidal UPV
P agina 5.26
AD3-Grafos-5
Diciembre, 2000
S = {u}; A = ; D = 0
AD3-Grafos-5
Diciembre, 2000
E. Vidal UPV
P agina 5.28
AD3-Grafos-5
Diciembre, 2000
Demostraci on: 1. T es un arbol de recubrimiento de G: Por construcci on, V = V, A A y no existen ciclos. 2. El peso de T es m nimo: Consecuencia directa del siguiente Lema: Lema. Sea S V . Si (u, v ) = argmin(x,y)(S V S ) p(x, y ), entonces (u, v ) forma parte de un arbol de recubrimiento de G de peso m nimo.
Demostraci on: Supongamos que T es un arbol de rtecubrimiento m nimo de G que no incluye a (u, v ). Si se a nadiera (u, v ) a T se crear a un ciclo C (seg un Teorema 1). Como u S y v V S , existir a en C una arista (x, y ) de T tal que x S y y V S . Entonces, si se eliminara (x, y ) de T se abrir a el ciclo C obteniendose un nuevo arbol T = T cuyo peso ser a: p(T ) = p(T ) + p(u, v ) p(x, y ). Pero por hip otesis p(u, v ) p(x, y ), por lo que p(T ) p(T ). Si p(T ) < p(T ) se tiene una contradicci on con la suposici on de que p(T ) es m nimo, mientras que en caso de igualdad (p(T ) = p(T )) se comprueba que T es un Arbol de Recubrimiento de Peso M nimo, que es lo que se trataba de demostrar.
y x S u v C V-S
E. Vidal UPV
P agina 5.29
AD3-Grafos-5
Diciembre, 2000
E. Vidal UPV
P agina 5.30
AD3-Grafos-5
Diciembre, 2000
Algoritmo de Prim
funci on PRIM(G=(V,A,p)) { u = elemento-arbritario(V); v V S Pv = u; mientras (S = V ) { v = argminyV S p(Py , y ); u = Pv S = S {v }; A = A {(u, v )}; D = D + p(u, v ) u = v; v V S si (p(u, v ) < p(Pv , v )) Pv = u } devolver(T, D) // T = (V, A )// } // Coste temporal: O(n2) S = {u} A = ; D = 0
E. Vidal UPV
P agina 5.31
AD3-Grafos-5
Diciembre, 2000
Algoritmos en Grafos
1. Recorridos b asicos de grafos: Profundidad, Anchura y Orden Topol ogico 2. Arbol de recubrimiento m nimo: algoritmos de Kruskal y Prim 3. Caminos m nimos: algoritmo de Dijkstra
E. Vidal UPV
P agina 5.32
AD3-Grafos-5
Diciembre, 2000
Caminos de M nimo Peso en Grafos Dirigidos: Algoritmo de Dijkstra Problema: Dado un Grafo Conexo Ponderado Dirigido G = (V, A, p) y un
v ertice v0 V , obtener v V un camino de v0 a v en G cuyo peso sea m nimo.
E. Vidal UPV
P agina 5.33
AD3-Grafos-5
Diciembre, 2000
Dv = Du + p(u, v )
AD3-Grafos-5
Diciembre, 2000
E. Vidal UPV
P agina 5.35
AD3-Grafos-5
Diciembre, 2000
Algoritmo de Dijkstra
funci on DIJKSTRA(G=(V,A,p)) { S = {v0}; Cv0 = v0; Dv0 = 0; v V S {Dv = p(v0, v ); Cv = v0 } mientras (S = V ) { w = argminvV S Dv ; S = S {w}; v V S si (Dw + p(w, v ) < Dv ) { Dv = Dw + p(w, v ); Cv = w } } devolver(C,D) } // Coste temporal: O(n2) Coste temporal mejorable a O(a log n) mediante el uso de Heaps (n = |V |, a = |A|).
E. Vidal UPV
P agina 5.36
AD3-Grafos-5
Diciembre, 2000
20 5 4:140
20 5 4:140
20 5 2:130
10 1 1:0 90 3 1:-90 80 40 40 50 4 1:-80 70 Traza dijk: w=5 30 2 4:-110 60 1 1:0 5 2:-130 90 3 1:-90 80
10 40 40 50 4 1:-80 70 Resultado: Nodos etiquetados con predecesor y peso camino minimo 30 2 4:-110 60
20
20 5 2:-130
E. Vidal UPV
P agina 5.37