Professional Documents
Culture Documents
El algoritmo de Dijkstra hace uso y define etiquetas a partir del nodo origen y para
cada uno de los nodos subsiguientes. Estas etiquetas contienen información
relacionada con un valor acumulado del tamaño de los arcos y con la procedencia
más próxima de la ruta.
Iteración 1
En este paso, evaluamos a cuáles nodos se puede llegar desde el nodo 1. En este
caso se puede llegar a los nodos 2 y 3. De manera que debemos asignar las
etiquetas para cada nodo:
En este caso, podemos observar que la etiqueta del nodo 3, ya contiene el menor
valor acumulado posible para llegar a este. Ya que 30 es la mínima distancia
posible, toda vez que para llegar al nodo 3 por medio del nodo 2, tendrá que recorrer
como mínimo el valor absoluto del arco que une el origen con el nodo 2 = 100. Así
entonces, la etiqueta del nodo 3 pasa a ser permanente.
Tabulamos la iteración 1:
Iteración 2:
En este paso, evaluamos las posibles salidas desde el nodo 3, es decir los nodos 4
y 5. De manera que debemos asignar las etiquetas para cada nodo:
En este caso, podemos observar que la etiqueta del nodo 4, contiene el menor valor
acumulado posible para llegar a este. Así entonces, la etiqueta del nodo 4 pasa a
ser permanente.
Tabulamos la iteración 2:
Iteración 3:
En este paso, evaluamos las posibles salidas desde el nodo 4, es decir los nodos 2
y 5. De manera que debemos asignar las etiquetas para cada nodo:
En este caso, podemos observar que el nodo 2 ahora cuenta con 2 etiquetas
temporales, y definitivas, ya que no existe otra ruta hacia dicho nodo. De manera
que se elige la etiqueta que tenga el menor valor acumulado. Así entonces, la
etiqueta del nodo 2 con procedencia del nodo 4, pasa a ser permanente.
Tabulamos la iteración 3:
Iteración 4:
En este paso, evaluamos las posibles salidas desde el nodo 2 y el nodo 5. Sin
embargo, el nodo 2 solo tiene un posible destino, el nodo 3, el cual ya tiene una
etiqueta permanente, de manera que no puede ser reetiquetado. Ahora, evaluamos
el nodo 5 y es un nodo que no tiene destinos. Así entonces, su etiqueta temporal
pasa a ser permanente, en este caso cuenta con 2 etiquetas que tienen el mismo
valor, es decir, alternativas óptimas. De esta manera concluye el algortimo de
Dijkstra.
¿Cuál es la ruta más corta?
La ruta más corta entre el nodo 1 (origen) y cualquier otro nodo de la red (destino),
se determina partiendo desde el nodo destino y recorriendo las procedencias de sus
etiquetas. Por ejemplo:
Es necesario considerar, que los valores utilizados en los arcos de la red objeto de
estudio del algoritmo de Dijkstra, no necesariamente representan distancias. Si
bien, es un modelo que aborda el denominado "problema de la ruta más corta"; en
la práctica, puede utilizarse para optimizar: distancia, costos, tiempo.
Aplicaciones
En múltiples aplicaciones donde se aplican los grafos,
es necesario conocer el camino de menor costo entre
dos vértices dados:
Ejecución de algoritmo
Paso 1: Inicialización
Paso 2: Elegir un vértice w ∈ V - {A} tal que D[w] sea mínimo, y agregar w al
conjunto solución S
Paso 3: cada v ∈ {C, D, E} hacer D[v] ← min( D[v], D[w]+C[w, v] )
Paso 4: Elegir un vértice w ∈ V - {A, B} tal que D[w] sea mínimo, y agregar w al
conjunto solución S.
Archivo:Algo09.JPG
Paso 6: Elegir un vértice w ∈ V - {A, B, D} tal que D[w] sea mínimo, y agregar w al
conjunto solución S.
Paso 7: Para cada v ∈ { E} hacer D[v] ← min( D[v], D[w]+C[w, v]
Paso 8: Elegir un vértice w ∈ V - {A, B, D, C} tal que D[w] sea mínimo, y agregar w
al conjunto solución S.
Final del Proceso de Ejecución
Luego del paso 8 tenemos la siguiente situación:
Por lo que como V-S=Ø se termina el algoritmo, pues para cada nodo del grafo se
ha determinado cuál es su camino mínimo. Como resultado de la ejecución del
algoritmo tenemos:
Finalmente, el camino mínimo que incluye todos los vértices del grafo es ADCE.
Pseudocódigo
Cola de prioridad
class HelloWorld:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.button = gtk.Button("Hello World")
self.button.connect("clicked", self.say_hello, None)
self.window.add(self.button)
self.button.show()
self.window.show()
def main(self):
gtk.main()
hello = HelloWorld()
hello.main()