Vous êtes sur la page 1sur 7

El Algoritmo de D’Esopo

 Requiere un tipo particular de lista: tabla de doble entrada


(deque). Esta es una estructura de datos híbrida que combina
las propiedades de dos tipos de lista: la cola (queue) y la
pila (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 sólo es
permitida de la punta.
Una pila 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)
2.- Repita hasta que Q =  Conceptual D’Esopo
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
4
end (fin de la repetición)
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)
(2) D
(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,0) (A,2,1) (A,2,1)
F (-,-1) (-,-1) (-,-1) (-,-1) (C,10,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)
Q [F] [C] 
Pivote F C -
Exam. 2 3 1
Modif. 1 1 0 7