Вы находитесь на странице: 1из 12

UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

1. EDSGER WYBE DIJKSTRA


2. ALGORITMO DE DIJKSTRA
3. ALGORITMO
3.1. COMPLEJIDAD
3.2. PSEUDOCÓDIGO
4. EJEMPLOS DE UN ALGORITMO DE DIJKSTRA
4.1. GRAFICO1
4.2. GRAFICO2
4.3. GRAFICO3
4.4. GRAFICO4
4.5. GRAFICO5
4.6. GRAFICO6
4.7. GRAFICO7

APORTE PERSONAL DE ALGORITMO DE DIJKSTRA

SERGIO ALBERTO CAMACHO BUITRAGO


COD: 55203037
JUAN FELIPE CUERVO TORRES
COD: 55203026
JULIAN HUMBERTO GONZALEZ ALBA
COD: 55206001
UNIVERSIDAD DE BOYACÁ
FACULTAD DE CIENCIAS E INGENIERÍA
INGENIERÍA DE SISTEMAS
TUNJA
2009

APORTE PERSONAL DE ALGORITMO DE DIJKSTRA

SERGIO ALBERTO CAMACHO BUITRAGO


COD: 55203037
JUAN FELIPE CUERVO TORRES
COD: 55203026
JULIAN HUMBERTO GONZALEZ ALBA
COD: 55206001
Trabajo presentado a la materia de
Inteligencia Artificial
Asesor
UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

LEONARDO BERNAL ZAMORA


Ingeniero de Sistemas
UNIVERSIDAD DE BOYACÁ
FACULTAD DE CIENCIAS E INGENIERÍA
INGENIERÍA DE SISTEMAS
TUNJA
2010

EDSGER WYBE DIJKSTRA

Nació en Rotterdam, (Holanda) en 1930. Sus padres eran ambos


intelectuales y él recibió una excelente educación. Su padre era químico y su
madre matemática. En 1942, cuando Dijkstra tenía 12 años, entró en
Gymnasium Erasminium, una escuela para estudiantes especialmente
brillantes, donde dio clases, fundamentalmente, de Griego, Latín, Francés,
Alemán, Inglés, biología, matemáticas y química. En 1945, Dijkstra pensó
estudiar Derecho y trabajar como representante de Holanda en las Naciones
Unidas.

Sin embargo, debido a su facilidad para la química, las matemáticas y la


física, entró en la Universidad de Leiden, donde decidió estudiar física
teórica. Durante el verano de 1951, asistió a un curso de verano sobre
programación en la Universidad de Cambridge. A su vuelta empezó a trabajar
en el Centro Matemático en Amsterdam, en marzo de 1952, donde se
incrementó su creciente interés en la programación. Cuando terminó la
carrera se dedicó a problemas relacionados con la programación. Pero uno
de los problemas con que se encontró es que ser programador no estaba
oficialmente reconocido como una profesión. De hecho, cuando solicitó una
licencia de matrimonio en 1957, tuvo que señalar que su profesión era físico
teórico.

Dijkstra continuó trabajando en el Centro Matemático hasta que aceptó un


trabajo como desarrollador en Burroughs Corporation, en los Estados
Unidos, a principio de la década de los 70. En 1972 ganó el Premio Turing
UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

ACM, y ,en 1974, el AFIPS Harry Good Memorial. Dijkstra se trasladó a


Austin, Texas a principio de los 80. En 1984, se le ofreció un puesto en
Ciencias de la Computación en la Universidad de Texas, donde ha
permanecido desde entonces. Es miembro honorario de la Academia
Americana de Artes y Ciencias y de Real Academia Holandesa de Artes y
Ciencias. Además es miembro distinguido de la Sociedad de Computación
Británica. Finalmente es Doctor Honoris Causa en Ciencias por la Queen's
University Belfast.

En 1956, Dijkstra anunció su algoritmo( Una posible definición de algoritmo


es un conjunto de reglas que permiten obtener un resultado determinado
apartir de ciertas reglas definidas. Otra definición sería, algoritmo es una
secuencia finita de instrucciones, cada una de las cuales tiene un significado
preciso y puede ejecutarse con una cantidad finita de esfuerzo en un tiempo
finito. Ha de tener las siguientes características: legible, correcto, modular,
eficiente, estructurado, no ambiguo y a ser posible se ha de desarrollar en el
menor tiempo posible.) algoritmo de caminos mínimos, después de haber
estado trabajando con el ARMAC, el ordenador que el Centro Matemático
poseía. Más tarde propuso el algoritmo del árbol generador minimal. A
principios de la década de los 60, Dijkstra aplicó la idea de la exclusión
mutua a las comunicaciones entre una computadora y su teclado.Su solución
de exclusión mutua ha sido usada por muchos procesadores modernos y
tarjetas de memoria desde 1964, cuando IBM la utilizó por primera vez en la
arquitectura del IBM 360. El siguiente problema del que se ocupó Dijkstra fue
el de los filósofos comensales. En este problema, cinco filósofos están
sentados en una mesa circular con un plato de arroz delante y un palillo a
cada lado, de manera que hay cinco palillos en total. El problema trata sobre
el uso de recursos comunes sin que los procesos (los filósofos) lleguen a una
situación de bloqueo mutuo, inanición y que los recursos sean usados de la
manera más eficiente por todos los procesos. También ayudó a fomentar la
UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

disciplina en la programación: "GOTO se puede considerar dañino. Cuanto


más sentencias GOTO haya en un programa, más difícil es entender el
código fuente".

El problema de la ruta más corta se puede resolver utilizando programación


lineal sin embargo, debido a que el método simplex es de complejidad
exponencial, se prefiere utilizar algoritmos que aprovechen la estrutura en
red que se tiene para estos problemas.

Una red de comunicaciones involucra un conjunto de nodos conectadas


mediante arcos, que transfiere vehículos desde determinados nodos origen a
otros nodos destino. La forma más común para seleccionar la trayectoria (o
ruta) de dichos vehículos, se basa en la formulación de la ruta más corta. En
particular a cada arco se le asigna un escalar positivo el cual se puede ver
como su longitud.

Un algoritmo de trayectoria más corta, rutea cada vehículo a lo largo de la


trayectoria de longitud mínima (ruta más corta) entre los nodos origen y
destino. Hay varias formas posibles de seleccionar la longitud de los enlaces.
La forma más simple es que cada enlace tenga una longitud unitaria, en cuyo
caso, la trayectoria más corta es simplemente una trayectoria con el menor
número de enlaces. De una manera más general, la longitud de un enlace
puede depender de su capacidad de transmision y su carga de tráfico.

La solución es encontrar la trayectoria más corta. Esperando que dicha


trayectoria contenga pocos enlaces no congestionados; de esta forma los
enlaces menos congestionados son candidatos a pertenecer a la ruta. Hay
algoritmos de ruteo especializados que también pueden permitir que la
longitud de cada enlace cambie en el tiempo, dependiendo del nivel de
tráfico de cada enlace. De esta forma un algoritmo de ruteo se debe adaptar
a sobrecargas temporales y rutear paquetes alrededor de nodos
UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

congestionados. Dentro de este contexto, el algoritmo de ruta más corta para


ruteo opera contínuamente, determinando la trayectoria más corta con
longitudes que varían en el tiempo.

El algoritmo de Dijkstra para ruta más corta, en términos generales,


encuentran la ruta más corta entre dos nodos, inicial a y final z, de la
siguiente manera:

Los nodos de la red son etiquetados con números. Al principio, todos tienen
la etiqueta 00 excepto el nodo inicial a que tiene la etiqueta 0. Los arcos
tienen un peso wij que representa la distancia del enclace (i, j). El algoritmo
de Dijkstra renumeran los nodos, de manera que cuando el nodo z tiene una
etiqueta permanente, se ha obtenido la solución final.

ALGORITMO DE DIJKSTRA
El algoritmo de Dijkstra, es también llamado algoritmo de caminos mínimos,
es un algoritmo para la determinación del camino más corto dado un vértice
origen al resto de vértices en un grafo dirigido y con pesos en cada arista. Su
nombre se refiere a Edsger Dijkstra (“11 de mayo de 1930 - 6 de agosto de
2002” fue un científico de la computación de origen holandés.), quien lo
describió por primera vez en 1959.
La idea subyacente en este algoritmo consiste en ir explorando todos los
caminos más cortos que parten del vértice origen y que llevan a todos los
demás vértices; cuando se obtiene el camino más corto desde el vértice
origen, al resto de vértices que componen el grafo, el algoritmo se detiene. El
algoritmo es una especialización de la búsqueda de costo uniforme, y como
tal, no funciona en grafos con aristas de costo negativo (al elegir siempre el
nodo con distancia menor, pueden quedar excluidos de la búsqueda nodos
que en próximas iteraciones bajarían el costo general del camino al pasar por
una arista con costo negativo).
1.1. Algoritmo
UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

Teniendo un grafo dirigido ponderado de N nodos no aislados, sea x el nodo


inicial, 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.
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.
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 v i; esta 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.
Una vez terminado al algoritmo, D estará completamente lleno.
1.2. Complejidad
Orden de complejidad del algoritmo: O(|V|2+|E|) = O(|V|2) sin utilizar cola de
prioridad, O((|E|+|V|) log |V|) utilizando cola de prioridad (por ejemplo un
montículo).
Podemos estimar la complejidad computacional del algoritmo de Dijkstra (en
términos de sumas y comparaciones). El algoritmo realiza a lo más n-1
iteraciones, ya que en cada iteración se añade un vértice al conjunto distinguido.
Para estimar el número total de operaciones basta estimar el número de
operaciones que se llevan a cabo en cada iteración. Podemos identificar el
vértice con la menor etiqueta entre los que no están en S k realizando n-1
comparaciones o menos. Después hacemos una suma y una comparación para
actualizar la etiqueta de cada uno de los vértices que no están en S k. Por tanto,
UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

en cada iteración se realizan a lo sumo 2(n-1) operaciones, ya que no puede


haber más de n-1 etiquetas por actualizar en cada iteración. Como no se
realizan más de n-1 iteraciones, cada una de las cuales supone a lo más 2(n-1)
operaciones, llegamos al siguiente teorema.
TEOREMA: El Algoritmo de Dijkstra realiza O(n 2) operaciones (sumas y
comparaciones) para determinar la longitud del camino más corto entre dos
vértices de un grafo ponderado simple, conexo y no dirigido con n vértices.
1.3. Pseudocódigo
DIJKSTRA (Grafo G, nodo_fuente s)
para u ∈ V[G] hacer
distancia[u] = INFINITO
padre[u] = NULL
distancia[s] = 0
Encolar (cola, grafo)
mientras que cola no es vacía hacer
u = extraer_minimo(cola)
para v ∈ adyacencia[u] hacer
si distancia[v] > distancia[u] + peso (u, v) hacer
distancia[v] = distancia[u] + peso (u, v)
padre[v] = u
2 EJEMPLOS DE UN ALGORITMO DE DIJKSTRA

El siguiente ejemplo se desarrollará con el fin de encontrar el camino más


corto desde a hasta z:

Leyenda:
UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

 Rojo: Aristas y vértices pertenecientes a la solución momentánea.


 Azul: Aristas y vértices candidatos.

Paso 1

En este primer paso, podemos apreciar que hay tres candidatos: Los vértices
b, c y d. En este caso, hacemos el camino desde el vértice a, hasta el vértice
d, ya que es el camino más corto de los tres.jump!!!

Solución momentánea:

 Camino: AD
 Distancia:5

Paso 2

Ahora, vemos que se añade un nuevo candidato, el vértice e, y el vértice c,


pero esta vez a través del d. Pero el camino mínimo surge al añadir el vértice
c.
UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

Solución momentánea:

 Camino: ADC
 Distancia:9

Paso 3

En este paso no se añade ningún candidato más puesto que el último vértice
es el mismo que en el paso anterior. En este caso el camino mínimo hallado
es el siguiente:

Solución momentánea:

 Camino: ADCB
 Distancia:11

Paso 4
UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

Como podemos comprobar, se han añadido dos candidatos nuevos, los


vértices f y g, ambos a través del vértice b. El mínimo camino hallado en todo
el grafo hasta ahora es el siguiente:

Solución momentánea:

 Camino: ADCBF
 Distancia:15

Paso 5

En este antepenúltimo paso, se añaden tres vértices candidatos, los vértices


g, z y e. Este último ya estaba pero en esta ocasión aparece a través del
vértice f. En este caso el camino mínimo, que cambia un poco con respecto
al anterior, es:

Solución momentánea:

 Camino: ADCBF
 Distancia:17
UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

Paso 6

En el penúltimo paso, vuelve a aparecer otro candidato: el vértice z, pero


esta vez a través del vértice g. De todas formas, el camino mínimo vuelve a
cambiar para retomar el camino que venía siguiendo en los pasos anteriores:

Solución momentánea:

 Camino: ADCBFE
 Distancia:18

Paso 7

Por fin, llegamos al último paso, en el que sólo se añade un candidato, el


vértice z a través del e. El camino mínimo y final obtenido es:

Solución Final:

 Camino: ADCBFEZ
UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

 Distancia:23

EDSGER WYBE DIJKSTRA COMPLEJIDAD, 12