Está en la página 1de 12

PROGRAMACION ORIENTADA A

OBJETOS
ALUMNOS:
° Mendoza Monroy Martin Alfredo
° Mondragón López Juana Carolina
° Rea Capistran Angel Andres
° Velázquez López Nancy Lizbeth

GRUPO: 2CM16

PROFESOR: ABDIEL REYES


DIJKSTRA
El algoritmo de Dijkstra (llamado así por su descubrimiento, E.W. Dijkstra) resuelve
el problema de encontrar el camino más corto desde un punto en un gráfico (el
origen) hasta un destino. Resulta que uno puede encontrar los caminos más
cortos desde una fuente dada a todos los puntos en un gráfico en el mismo
tiempo, por lo tanto, este problema a veces se denomina caminos más cortos de
una sola fuente problema.

El Algoritmo de Dijkstra, también denominado Algoritmo de caminos mínimos, es


un modelo que se clasifica dentro de los algoritmos de búsqueda. Su objetivo, es
determinar la ruta más corta, desde el nodo origen, hasta cualquier nodo de la red.
Su metodología se basa en iteraciones, de manera tal que, en la práctica, su
desarrollo se dificulta a medida que el tamaño de la red aumenta, dejándolo en
clara desventaja, frente a métodos de optimización basados en programación
matemática.

¿Qué tipos de redes pueden resolverse por medio del Algoritmo de Dijkstra?

Este algoritmo, al igual que el método de Floyd, tienen la capacidad de resolver el


problema de la ruta más corta, tanto para redes cíclicas, como para redes
acíclicas. De manera tal que los bucles que presente una red, no restringen el uso
del algoritmo. 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.

Las etiquetas corresponden a los nodos, no a los arcos. En el algoritmo de


Dijkstra, estas etiquetas son temporales y permanentes. Las etiquetas temporales
son aquellas que son susceptibles de modificarse mientras exista la posibilidad de
hallar para sí, una ruta más corta; de lo contrario, dicha etiqueta pasa a ser
permanente.

Etiqueta = [acumulado, nodo procedente] iteración

¿Qué es un algoritmo dijkstra en la informática?

Un algoritmo, definido desde el punto de vista de la informática, es cualquier tipo


de proceso computacional que, bien definido, puede permitirte partir de un estado
de inicio con un valor, pasar por varias secuencias y pasos finitos, y finalmente
llegar a una conclusión. Es, dentro de este ambiente, una herramienta para el uso
de cálculos.

Características:

 Es un algoritmo greddy, en breve te explicaremos qué es.


 Se caracteriza por trabajar en etapas, tomando la mejor solución en cada
una sin el análisis de las consecuencias futuras.
 Es muy útil su uso en etapas para realizar modificaciones ante una posible
mejor solución.

Un algoritmo greddy, también conocido como algoritmo voraz, es un algoritmo que


se especializa en seleccionar la opción más óptima en cada paso a nivel local. En
consecuencia, esta misma opción se vuelve la mejor a nivel global. Todas estas
características son lo que le dan identidad al algoritmo de Dijkstra.

Es un algoritmo que se puede adaptar a diferentes programas tales como un hotel,


searching a based, Google maps, etc.

Algoritmo de la ruta más corta de Dijkstra:


Procedimiento del algoritmo de Dijkstra Sea x el nodo inicial (nodo fuente del
grafo), un vector D de tamaño N guardará al final del algoritmo las distancias
desde x al resto de los nodos.

1. Inicializar todas las distancias en D con un valor infinito relativo (∞,-) ya que
son desconocidas al principio, exceptuando la de x que se debe colocar en
0 debido a que la distancia de x a x sería 0 (0,-).
2. Sea a = x (tomamos a como nodo actual).
3. Recorremos todos los nodos adyacentes de a, excepto los nodos
marcados, llamaremos a estos vi. Procedimiento del algoritmo de Dijkstra.
4. Si la distancia desde x hasta vi guardada en D es mayor que la distancia
desde x hasta a sumada a la distancia desde a hasta vi; ésta se sustituye
con la segunda nombrada, esto es: si (Di > Da + d(a, vi)) entonces Di = Da
+ d(a, vi).
5. Marcamos como completo el nodo a.
6. Tomamos como próximo nodo actual el de menor valor en D (puede
hacerse almacenando los valores en una cola de prioridad) y volvemos al
paso 3 mientras existan nodos no marcados
7. Una vez terminado al algoritmo, D estará completamente lleno.

CÓDIGO

Procedure dijkstra(w, a, z, L)

L(a)=0 For todos los vértices x != a do

L(x) = infinito

T = conjunto de todos los vértices

// T es el conjunto de vértices cuya distancia mas corta a “a” no ha sido


determinada

While z pertenece T do elegir v en T con L(v) mínimo

T = T-{v} for cada x en T adyacente a v do L(x) = min{L(x),L(v) + w(v,x)}


end

end

Ejemplo:

Procedemos con las iteraciones, partimos de la iteración 0, es decir, asignar la


etiqueta para el nodo origen:
Iteración 0
En este paso, asignamos una etiqueta permanente para el nodo
origen. Recordemos que la etiqueta se compone por un valor acumulado, que en
este caso debe ser 0, ya que es el punto base y que no existe procedencia:

Etiqueta nodo 1 = [valor acumulado, procedencia] iteración


Etiqueta nodo 1 = [0, -] 0
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:
Etiqueta nodo 2 = [valor acumulado, procedencia] iteración
Etiqueta nodo 2 = [0 + 100, 1] 1

0 es el valor acumulado en la etiqueta del nodo de procedencia, en este caso el


valor acumulado para el nodo 1. 100 es el valor del arco que une el
nodo procedencia (1) y el nodo destino (2). 1 es el número de la iteración.

Etiqueta nodo 3 = [valor acumulado, procedencia] iteración


Etiqueta nodo 3 = [0 + 30, 1] 1

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:

Etiqueta nodo 4 = [valor acumulado, procedencia] iteración


Etiqueta nodo 4 = [30 + 10, 3] 2
Etiqueta nodo 4 = [40, 3] 2

30 es el valor acumulado en la etiqueta del nodo de procedencia, en este caso el


valor acumulado para el nodo 3. 10 es el valor del arco que une el
nodo procedencia (3) y el nodo destino (4). 2 es el número de la iteración.

Etiqueta nodo 5 = [valor acumulado, procedencia] iteración


Etiqueta nodo 5 = [30 + 60, 3] 2
Etiqueta nodo 4 = [90, 3] 2
30 es el valor acumulado en la etiqueta del nodo de procedencia , en este caso el
valor acumulado para el nodo 3. 60 es el valor del arco que une el
nodo  procedencia  (3) y el nodo destino (5).  2  es el número de la iteración.
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:

Etiqueta nodo 2 = [valor acumulado, procedencia] iteración


Etiqueta nodo 2 = [40 + 15, 4] 3
Etiqueta nodo 2 = [55, 4] 3
40  es el valor acumulado en la etiqueta del nodo de procedencia, en estera
40 es el valor acumulado en la etiqueta del nodo de procedencia, en este caso el
valor acumulado para el nodo 4. 15 es el valor del arco que une el
nodo procedencia (4) y el nodo destino (2). 3 es el número de la iteración. nodo
4.  15  es el valor del arco que une el nodo  procedencia  (4) y el nodo destino
Etiqueta nodo 5 = [valor acumulado, procedencia] iteración
Etiqueta nodo 5 = [40 + 50, 4] 3
Etiqueta nodo 5 = [90, 4] 3

40 es el valor acumulado en la etiqueta del nodo de procedencia, en este caso el


valor acumulado para el nodo 3. 50 es el valor del arco que une el
nodo procedencia (4) y el nodo destino (5). 3 es el número de la iteración.

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 mas corta? La ruta mas 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.

Ejemplo: ¿Cuál es la ruta mas corta entre el nodo 1 y el nodo 4?

Debemos partir desde la etiqueta del nodo 4.


La ruta más corta entre el nodo 1 y el nodo 4 tiene un valor acumulado de: 40

También podría gustarte