El Algoritmo Algoritmo de D’Esopo
Requiere un tipo particular de lista: tabla de doble entrada (deque deque). ). Esta es una estructura de datos híbrida que combina las propiedades de dos tipos de lista: la cola (queue (queue)) y la pila (stack (stack). ). Una
cola es una lista en que la inserción de un elemento sólo es permitida al final de la lista, y la eliminación de un elemento elemento sólo es permitida de la punta. Una pila pila Una
es una lista en la que la adición y la eliminación de elementos se realizan en la punta de la lista.
1
Una deque es una lista que puede ser interpretada como una pila Q" y una cola Q' conectadas en serie: Salida de Q
Q Inserción en Q’
Q”
Q’
Inserción en Q”
Los nodos son removidos siempre desde la punta de la deque
La primera vez que un nodo ingresa a Q, se agrega al final de la cola Q‘
Si más tarde, el mismo nodo (después de ser elegido pivote y removido de la lista Q) de nuevo debe ser incluido en Q, se agrega 2en la punta de la pila Q"
La implementación práctica del algoritmo de D’Esopo asigna un status trinario a cada uno de los nodos de la red:
Originalmente cuando el nodo nunca ha estado en Q
su status es –1
Si el nodo está en Q tiene status 0. Y aquellos nodos que ya estuvieron en Q y salieron de él, porque fueron elegidos pivote, tienen status 1.
Este último (status=1) es el status de todos los nodos cuando el algoritmo termina. 3
Algoritmo
1.- Inicialice p,q,Q, status (Idem Paso-1) Conceptual D’Esopo 2.- Repita hasta que Q = begin 3.Elija el primer nodo de la deque Q (ahora u es nuevo pivote) 4.-
Elimine el nodo u de la punta del deque Q
6.-
Para los arcos (u,v) FS(u) tal que d(u) + c(u,v) < d(v) begin d(v) = d(u) +c(u,v) p(v) =u Si status (v) = -1 status (v) = 0 Inserte v al final de la deque Q Si status (v) = 1 status (v) = 0 Inserte v al principio de la deque Q Si status (v) = 0 No hacer nada (v ya está en Q) end
7.-
Haga status (u) = 1 end (fin de la
ición)
4
Aplicación de D’ESOPO al problema de rutas mínimas desde A en el ejemplo: (1)
(6)
A
B
C
(2) (2)
(2) (3)
(4)
(2)
D
(2)
(5)
(3) (1)
E
F (4)
(peso) 5
Aplicación de D’ESOPO al problema de rutas mínimas del ejemplo: Cada celda guarda ( p(v),d(v), status(v)) Nodo/Iter
1
2
3
4
5
A
(A,0,0)
(A,0,1)
(A,0,1)
(A,0,1)
(A,0,1)
B
(-,-1)
(A,1,0)
(A,1,1)
(A,1,1)
(A,1,1)
C
(-,-1) (-,-1)
(B,7,0)
(B,7,0)
(B,7,1)
D
(-,-1) (-,-1)
(B,3,0)
(B,3,0)
(B,3,0)
E
(-,-1)
(A,2,0)
(A,2,1)
(A,2,1)
F
(-,-1) (-,-1) (-,-1) (-,-1) (C,10,0)
(A,2,0)
Q
[A]
[B,E]
[E,C,D]
[C,D]
[D,F]
Pivote
A
B
E
C
D
Exam.
-
2
3
2
1
Modif.
-
2
2
0
1
6
Aplicación de D’ESOPO al ejemplo (continuación) : Cada celda guarda ( p(v),d(v), status(v)) Nodo/Iter
6
7
8
A
(A,0,1)
(A,0,1)
(A,0,1)
B
(A,1,1)
(A,1,1)
(A,1,1)
C
(B,7,1)
(F,6,0)
(F,6,1)
D
(B,3,1)
(B,3,1)
(B,3,1)
E
(A,2,1)
(A,2,1)
(A,2,1)
F
(D,4,0)
(D,4,1)
(D,4,1)
[F]
[C]
Pivote
F
C
-
Exam.
2
3
1
Modif.
1
1
0
Q
7