Está en la página 1de 62

BELLMAN-FORD

Acosta George
Briceo Jhuliana
Cedeo ngela

DESCRIPCIN DEL PROBLEMA


El algoritmo de Bellman-Ford genera el camino ms
corto en un grafo dirigido ponderado (en el que el
peso de alguna de las aristas puede ser negativo).
El algoritmo de Dijkstra resuelve este mismo problema
en un tiempo menor, pero requiere que los pesos de
las aristas no sean negativos. Por lo que el algoritmo
Bellman-Ford normalmente se utiliza cuando hay
aristas
con
peso
negativo
Si el grafo contiene un ciclo de coste negativo, el
algoritmo lo detectar pero no encontrar el camino
ms corto que no repite ningn vrtice, la complejidad
de este problema es NP-completo.

DEFINICIN DEL ALGORITMO


El algoritmo de Bellman-Ford genera el camino ms
corto en un Grafo dirigido ponderado ( en el que el
peso de alguna de las aristas puede ser negativo).
Este Algoritmo fue
desarrollado por Richard
Bellman, Samuel End y
Lester Ford.

CARACTERISTICAS Y
COMPLEJIDAD
COMPUTACIONAL
El algoritmo de Dijkstra resuelve este mismo problema
en un tiempo menor, pero requiere que los pesos de
las aristas no sean negativos. Por lo que el Algoritmo
Bellman-Ford normalmente se utiliza cuando hay
aristas con peso negativo.
La complejidad computacional de este problema es
complejidad NP-Completo.

EXPLICACIN DEL ALGORITMO


En el paso 0, inicializamos todas las distancias o
costos
mnimos
a
infinito.
En el paso 1, actualizamos el paso anterior, aplicando
las frmulas. En este caso ponemos la distancia de
los nodos que tienen accesos directos al vrtice 1, y
se la sumamos a la distancia mnima acumulada que
hay hasta el vrtice oportuno. Aqu esta distancia
acumulada sera 0 para 1, debido que sera la
distancia a l mismo, e infinito para el resto porque no
han sido analizados todava

EXPLICACIN DEL
ALGORITMO
En el paso 2, al saber ya una distancia mnima
acumulada desde los nodos 2 y 3 hasta 1,
podemos actualizar las distancias mnimas de los
nodos
4
y
5.
En los pasos sucesivos, se van actualizando las
distancias mnimas acumuladas (D) de los
distintos vrtices hasta 1, y se van utilizando en
los pasos siguientes para optimizar el camino
mnimo. El final del algoritmo se da cuando no hay
ningn cambio de un paso a otro, cuando ya no
se puede encontrar un camino ms corto.

ANALISIS DEL ALGORITMO

Grafo Inicial.
El
objetivo
del
Algoritmo
es
encontrar el camino
mnimo desde todos
los nodos al vrtice 1.

ANALISIS DEL ALGORITMO

EJEMPLO ( REALIZACIN DEL


ALGORITMO)

EJEMPLO (GRAFO FINAL)


*

Resultado
del
camino
mnimo
desde todos los
nodos al vrtice 1.

APLICACIONES DEL ALGORITMO


Una variante distribuida del Algoritmo del BellmanFord se usa en protocolos de encaminamiento
basados en vector de distancias.
En el mundo de las redes (comunicaciones) el
protocolo de encaminamiento de informacin (RIP).
http://neo.lcc.uma.es/evirtual/cdd/applets/BellmanFord
/Example3.html

Lista de Arcos

-2

6
z

-4
8

7
-3

2
x

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Paso 0.0
V

Encontrar el camino ms corto del


Vrtice z a cada uno de los otros
Vrtices.

-2

6
z

Lista de Arcos

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

-4
8

7
-3

7
x

Paso 0.1
V

Inicializar los vectores d y .

-2

6
z

Lista de Arcos

-4
8

7
-3

7
x

Paso 1.1
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (u,v)

Pregunta: d[v] > d[u] + w( u , v ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

7
x

Paso 1.2
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (u,x)

Pregunta: d[x] > d[u] + w( u , x ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

7
x

Paso 1.3
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (u,y)

Pregunta: d[y] > d[u] + w( u , y ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

7
x

Paso 1.4
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (v,u)

Pregunta: d[u] > d[v] + w( v , u ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

7
x

Paso 1.5
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (x,v)

Pregunta: d[v] > d[x] + w( x , v ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

7
x

Paso 1.6
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (x,y)

Pregunta: d[y] > d[x] + w( x , y ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

7
x

Paso 1.7
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (y,v)

Pregunta: d[v] > d[y] + w( y , v ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

7
x

Paso 1.8
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (y,v)

Pregunta: d[z] > d[y] + w( y , z ) ?


Respuesta:
Proceso:

NO
No se hace nada.

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

-2

Lista de Arcos

-4
8

7
-3

7
x

Paso 1.9
V

Aplicar Relax al Arco (z,u)

Pregunta: d[u] > d[z] + w( z , u ) ?


Respuesta:

SI

Proceso: d[u] = d[z] + w( z, u ) y [u] = z

6
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

-2

Lista de Arcos

-4
8

7
-3

7
x

Paso 1.9
V

Aplicar Relax al Arco (z,u)

Pregunta: d[u] > d[z] + w( z , u ) ?


Respuesta:

SI

Proceso: d[u] = d[z] + w( z, u ) y [u] = z

6
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

-2

Lista de Arcos

-4
8

7
-3

7
x

Paso 1.10
V

Aplicar Relax al Arco (z,x)

Pregunta: d[x] > d[z] + w( z , x ) ?


Respuesta:

SI

Proceso: d[x] = d[z] + w( z, x ) y [x] = z

6
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

-2

Lista de Arcos

-4
8

7
-3

2
x

Paso 1.10
V

7 0

Aplicar Relax al Arco (z,x)

Pregunta: d[x] > d[z] + w( z , x ) ?


Respuesta:

SI

Proceso: d[x] = d[z] + w( z, x ) y [x] = z

6
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

-2

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.1
V

Aplicar Relax al Arco (u,v)

Pregunta: d[v] > d[u] + w( u , v ) ?


Respuesta:

SI

Proceso: d[v] = d[u] + w( u, v ) y [v] = u

6
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

11

-2

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.1
V

{ u v

{ 7 0

{ z

x
z

Aplicar Relax al Arco (u,v)

Pregunta: d[v] > d[u] + w( u , v ) ?


Respuesta:

SI

Proceso: d[v] = d[u] + w( u, v ) y [v] = u

11

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.2
V

{ u v

{ z

x
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (u,x)

Pregunta: d[x] > d[u] + w( u , x ) ?


Respuesta:
Proceso:

NO
No se hace nada.

6
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

11

-2

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.3
V

{ u

{ z

x y
z

Aplicar Relax al Arco (u,y)

Pregunta: d[y] > d[u] + w( u , y ) ?


Respuesta:

SI

Proceso: d[y] = d[u] + w( u, y ) y [y] = u

6
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

11

-2

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.3
V

{ u

x y

{ z

z u

Aplicar Relax al Arco (u,y)

Pregunta: d[y] > d[u] + w( u , y ) ?


Respuesta:

SI

Proceso: d[y] = d[u] + w( u, y ) y [y] = u

11

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.4
V

{ u

x y

{ z

z u

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (v,u)

Pregunta: d[u] > d[v] + w( v , u ) ?


Respuesta:
Proceso:

NO
No se hace nada.

6
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

11

-2

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.5
V

{ u

x y

{ z

z u

Aplicar Relax al Arco (x,v)

Pregunta: d[v] > d[x] + w( x , v ) ?


Respuesta:

SI

Proceso:d[y] = d[x] + w( x, v ) y [y] = x

6
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

-2

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.5
V

Aplicar Relax al Arco (x,v)

Pregunta: d[v] > d[x] + w( x , v ) ?


Respuesta:

SI

Proceso: d[y] = d[x] + w( x, v ) y [y] = x

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.6
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (x,y)

Pregunta: d[y] > d[x] + w( x , y ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.7
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (y,v)

Pregunta: d[v] > d[y] + w( y , v ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.8
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (y,z)

Pregunta: d[z] > d[y] + w( y , z ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.9
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (z,u)

Pregunta: d[u] > d[z] + w( z , u ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 2.10
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (z,x)

Pregunta: d[x] > d[z] + w( z , x ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 3.1
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (u,v)

Pregunta: d[v] > d[u] + w( u , v ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 3.2
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (u,x)

Pregunta: d[x] > d[u] + w( u , x ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 3.3
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (u,y)

Pregunta: d[y] > d[u] + w( u , y ) ?


Respuesta:
Proceso:

NO
No se hace nada.

6
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

-2

Lista de Arcos

-4
8

7
-3

2
x

Paso 3.4
V

Aplicar Relax al Arco (v, u)

Pregunta: d[u] > d[v] + w( v , u ) ?


Respuesta:

SI

Proceso: d[u] = d[v] + w( v, u ) y [u] = v

2
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

-2

Lista de Arcos

-4
8

7
-3

2
x

Paso 3.4
V

Aplicar Relax al Arco (v, u)

Pregunta: d[u] > d[v] + w( v , u ) ?


Respuesta:

SI

Proceso: d[u] = d[v] + w( v, u ) y [u] = v

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 3.5
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (x, v)

Pregunta: d[v] > d[x] + w( x , v ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 3.6
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (x, y)

Pregunta: d[y] > d[x] + w( x , y ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 3.7
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (y, v)

Pregunta: d[v] > d[y] + w( y , v ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 3.8
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (y, z)

Pregunta: d[z] > d[y] + w( y , z ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 3.9
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (z, u)

Pregunta: d[u] > d[z] + w( z , u ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 3.10
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (z, x)

Pregunta: d[x] > d[z] + w( z , x ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 4.1
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (u, v)

Pregunta: d[v] > d[u] + w( u , v ) ?


Respuesta:
Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

Paso 4.2
V

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Aplicar Relax al Arco (u, x)

Pregunta: d[x] > d[u] + w( u , x ) ?


Respuesta:
Proceso:

NO
No se hace nada.

2
z

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

-2

Lista de Arcos

-4
8

7
-3

2
x

Paso 4.3
V

Aplicar Relax al Arco (u, y)

Pregunta: d[y] > d[u] + w( u , y ) ?


Respuesta:

SI

Proceso: d[y] = d[u] + w( u, y ) y [y] = u

2
z

-4
8

7
-3

2
x

Paso 4.3
V

z }

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

-2

Lista de Arcos

Aplicar Relax al Arco (u, y)

Pregunta: d[y] > d[u] + w( u , y ) ?


Respuesta:

-2

SI

Proceso: d[y] = d[u] + w( u, y ) y [y] = u

-2

6
z

-4
8

7
-3

2
x

Paso 4.4
V

z }

Lista de Arcos

Aplicar Relax al Arco (v, u)

Pregunta: d[u] > d[v] + w( v , u ) ?


Respuesta:

-2

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Proceso:

NO
No se hace nada.

-2

6
z

-4
8

7
-3

2
x

Paso 4.5
V

z }

Lista de Arcos

Aplicar Relax al Arco (x, v)

Pregunta: d[v] > d[x] + w( x , v ) ?


Respuesta:

-2

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Proceso:

NO
No se hace nada.

-2

6
z

-4
8

7
-3

2
x

Paso 4.6
V

z }

Lista de Arcos

Aplicar Relax al Arco (x, y)

Pregunta: d[y] > d[x] + w( x , y ) ?


Respuesta:

-2

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Proceso:

NO
No se hace nada.

-2

6
z

-4
8

7
-3

2
x

Paso 4.7
V

z }

Lista de Arcos

Aplicar Relax al Arco (y, v)

Pregunta: d[v] > d[y] + w( y , v ) ?


Respuesta:

-2

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Proceso:

NO
No se hace nada.

-2

6
z

-4
8

7
-3

2
x

Paso 4.8
V

z }

Lista de Arcos

Aplicar Relax al Arco (y, z)

Pregunta: d[z] > d[y] + w( y , z ) ?


Respuesta:

-2

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Proceso:

NO
No se hace nada.

-2

6
z

-4
8

7
-3

2
x

Paso 4.9
V

z }

Lista de Arcos

Aplicar Relax al Arco (z, u)

Pregunta: d[u] > d[z] + w( z , u ) ?


Respuesta:

-2

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Proceso:

NO
No se hace nada.

-2

6
z

-4
8

7
-3

2
x

Paso 4.10
V

z }

Lista de Arcos

Aplicar Relax al Arco (z, x)

Pregunta: d[x] > d[z] + w( z , x ) ?


Respuesta:

-2

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Proceso:

NO
No se hace nada.

-2

6
z

Lista de Arcos

-4
8

7
-3

2
x

-2

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

Paso 5.0
V

z }

Verificar en cada arco que se


cumple la condicin:
d[Vf] <= d[Vi] + w( Vi , Vf )
Si no se cumple:
=> NO EXISTE SOLUCIN.

-2

-4

-3
7
x

-2

SOLUCIN
V

z }

Lista de Arcos

(u,v)
(u,x)
(u,y)
(v,u)
(x,v)
(x,y)
(y,v)
(y,z)
(z,u)
(z,x)

También podría gustarte