Documente Academic
Documente Profesional
Documente Cultură
InitSSSP(s):
dist(s) ← 0
pred(s) ← Null
para todos los vértices: v≠s
dist(v) ← ∞
pred(v) ← Null
Durante la ejecución del algoritmo, un borde u → v es tenso si dist (u) + w(u → v) <
dist(v). Si de u → v es tenso, la ruta tentativa más corta de s ⇝ v es claramente
incorrecta, porque la ruta de s⇝ u → v es más corta. Podemos corregir (o, al menos,
mejorar) esta sobrestimación sobredimensionada, aflojando el borde de la siguiente
manera:
Relax(u→ v):
dist(v)←dist(u)+w(u→ v)
pred(v)←u
Ahora que todo está configurado, el algoritmo genérico de Ford tiene una descripción
simple de una línea.
Relaje repetidamente los bordes tensos, hasta que no haya más bordes tensos.
FordSSSP(s):
InitSSSP(s):
mientras que hay al menos un borde tenso
RELAX cualquier borde tenso
Si FordSSSP termina finalmente (porque no hay más bordes tensos), entonces los
punteros predecesores definen correctamente un árbol de ruta más corta, y cada valor
dist (v) es la distancia real de ruta más corta de s a v. En particular, si s no puede
alcanzar v, luego dist (v) = ∞, y si se puede alcanzar algún ciclo negativo desde s ,
entonces el algoritmo nunca termina.
Hasta ahora no he dicho nada sobre cómo encontrar bordes tensos, o qué borde tenso se
relaja si hay más de uno. Al igual que con el recorrido de grafos, hay diferentes
instancias del algoritmo genérico de relajación de Ford. Sin embargo, al igual que el
recorrido de grafos, la eficiencia y la corrección de cada estrategia de búsqueda
dependen de la estructura del grafo de entrada. En el resto de este capítulo, analizamos
las cuatro instancias más comunes del algoritmo de Ford, cada uno de los cuales es la
mejor opción para una clase diferente de grafos de entrada. Dejaré los detalles restantes
de la prueba de corrección genérica como ejercicios, y en su lugar daré pruebas de
corrección (más informativas) para cada uno de estos cuatro algoritmos en específico.