Documentos de Académico
Documentos de Profesional
Documentos de Cultura
BIBLIOGRAFÍA
1- Estructuras de Datos en Java, Mark Allen Weiss, Volumen II, Tercera parte. Capítulo 14,
epígrafes 14.2 y 14.3 páginas de 366 a la 376.
2- Estructuras de Datos, Algoritmos y Programación Orientada a Objetos, Gregory L.
Heileman, Capítulo 14, epígrafe 14.4 páginas de 258 a la 261.
3- Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, and Ronald L.
Rivest, Parte VI. (en format digital)
(\\10.12.1.64\docs\MFC\Docencia\Materiales Docentes\Pregrado\Computacion\07-
Programacion e Ingenieria de Software\EDA II\13-14\02- MaterialesComplementarios\ 01-
Introduction to Algorithms 3rd Edition)\ 01- Introduction to Algorithms 3rd Edition )
V2 V3 V4 V5
1 2 V8
V4 V9
V6 V7 V8
V5 1 2 V9
1
Estructuras de Datos y Algoritmos II curso 2019-2020
Cuando el grafo es no es ponderado (las aristas no tienen peso) el camino mínimo se puede
considerar como aquel que conecta al vértice origen con cada uno de los restantes vértices a través
de un menor número de aristas.
Por ejemplo:
El grafo anterior, aunque no es dirigido (cada
V1 arista conecta en ambas direcciones) puede
servir para analizar una solución.
Supongamos que el vértice origen es V7
V2 entonces: ¿cuáles serían los caminos mínimos
V3
1 al resto de los vértices de ese grafo partiendo
1
de V7?
V4 Los adyacentes V3 y V8 tendrían camino
V5 V6 V7 mínimo igual a 1 (cantidad de aristas
V1
1 1 1
necesarias para conectarlo con el origen) y
luego los adyacentes de V3 y V8 tendrían
V8 caminos mínimos igual a 2 y así
1 sucesivamente…
Cuando el grafo es ponderado (las aristas tienen peso) el problema es diferente, pues el camino
mínimo es aquel que la suma de los pesos de las aristas que lo integran sea mínima.
V1
3 4
En este ejemplo si el vértice origen es V7,
V2
4 1
V3 3 entonces el camino mínimo para V8 es V7,
3 2 1 V3, V6, V8 que suma 7 y no V7, V8 porque
suma 8, aunque tiene un menor número de
V4 aristas.
V5 V6 V7
V1 2
1 2 1 1
10 8
V8
1
Entonces las estrategias de los algoritmos que dan solución a estas problemáticas son diferentes.
Antes de comenzar a estudiar esos algoritmos adicionemos dos atributos a la clase Vertice para
que estos algoritmos puedan funcionar adecuadamente:
dist: Este valor es calculado por el algoritmo de búsqueda del camino mínimo. Tendrá la
longitud/distancia del camino más corto desde el vértice de origen hasta este vértice.
ant: Este valor también es calculado por el algoritmo de búsqueda del camino mínimo. Indicará
el vértice anterior en el camino más corto a este vértice. Retrocediendo por este campo vamos
2
Estructuras de Datos y Algoritmos II curso 2019-2020
construyendo el camino mínimo. Aunque esta traza nos da el camino en orden inverso, es fácil
invertirlo si se utiliza la recursividad.
Estos nuevos atributos se adicionan en la clase Vertice y No en VerticeExt .
Los algoritmos de búsqueda del camino mínimo que estudiaremos corresponden a un único
origen . Es decir, todos suponen un punto de origen y calculan los caminos mínimos desde este
punto a todos los demás vértices.
V V V
2 3 4
V V
5 6
Es evidente que el camino más corto desde O a V2 es un camino de longitud 0. Ahora podemos
mirar los nodos que están a distancia 1 de O, es decir los que son adyacentes a V2 (V0 y V5).
El siguiente paso es buscar los vértices cuyo camino desde O sea exactamente 2. Hacemos esto
buscando los nodos adyacentes a V0 y V5, es decir los que están a distancia 1, y cuyo camino
mínimo no se conozca aún. Esta búsqueda nos dice que el camino más corto a V1 y V3 es 2.
Finalmente, examinando los vértices adyacentes a los últimamente alcanzados V1 y V3,
encontramos que V4 y V6 tienen un camino mínimo de 3 aristas. Y ya hemos calculado el camino
para todos los vértices.
3
Estructuras de Datos y Algoritmos II curso 2019-2020
1 2
V V
0 1
0
2 3
V V V
2 3 4
1
3
V V
5 6
Hemos seguido la estrategia de búsqueda en anchura. Los vértices más cercanos al origen se
procesan los primeros y los más alejados los últimos.
La siguiente figura muestra un principio fundamental: Si un camino al vértice v tiene costo Dv, y
w es adyacente a v, entonces existe un camino a w de costo Dw = 1 + Dv
Dv 1+ Dv
v w
0
O
4
Estructuras de Datos y Algoritmos II curso 2019-2020
0
6
O 2
u
Cuando se analizó el vértice u, se rebajó la distancia a w a 8. Ahora, al analizar el vértice v,
necesitamos volver a cambiar la distancia a w, rebajándola a 6, pues tenemos un nuevo
camino mínimo -provisional. Esto no sucedía en el camino sin pesos. Aquí, aunque Du Dv,
es todavía posible que el camino a w se mejore al considerar v. Por otra parte, cuando se
rebaja la distancia a w, es siempre porque es adyacente a algún vértice en el que hemos fijado
nuestra atención. Por ejemplo, después de haber visitado a v y completado su procesamiento,
el valor de Dw será 6 y el último vértice en el camino será un nodo ya visitado. De forma
análoga, el vértice anterior a v debe haberse visitado, y así sucesivamente. Por tanto, en
cualquier momento, el valor de Dw representa un camino desde O hasta w utilizando como
nodos intermedios solamente vértices que ya han sido visitados. Esto lleva al siguiente teorema (pág.
372).
Teorema. Si vamos pasando nuestra atención a un vértice aún no visitado de entre los que
minimicen el valor Di, el algoritmo de Dijkstra producirá correctamente los caminos mínimos
siempre que no haya aristas con costo negativo.
5
Estructuras de Datos y Algoritmos II curso 2019-2020
Es evidente que debamos buscar el vértice v con menor Dv. Esto sugiere el uso de una Cola de
prioridad. El método consistirá en insertar en la cola de prioridad -cuando reducimos Dw- un
objeto formado por w y como prioridad el valor de Dw. Para elegir el nuevo vértice v a visitar,
eliminaremos repetidamente el menor elemento (utilizando las distancias) hasta que salga un
elemento no visitado. Necesitaremos entonces una marca que indique si ha sido o no visitado.
Como el tamaño de la cola será, a lo sumo, A y se realizarán como mucho A inserciones y
eliminaciones, el tiempo de ejecución será O(AlogA).
5 8 4 6
V 1 V
5 6
5 8 4 6
V 1 V
5 6
5 8 4 6
9 5
V 1 V
5 6
6
Estructuras de Datos y Algoritmos II curso 2019-2020
5 8 4 6
9 5
V 1 V
5 6
5 8 4 6
6 5
V 1 V
5 6
ESTUDIAR por el libro “Estructuras de Datos en Java” el ejemplo anterior, según las indicaciones de la
bibliografía de esta Conferencia. Allí podrá encontrar también una implementación en Java de los
algoritmos estudiados en esta actividad.
7
Estructuras de Datos y Algoritmos II curso 2019-2020
CONCLUSIONES
RESUMEN
/*
* Interface TDA Grafo, version 1.2
*/
public interface Grafo {
//caminos mínimos
void caminoMSinPeso(String VerticeOrigen);
boolean caminoMConPesoPositivo(String VerticeOrigen);