Vous êtes sur la page 1sur 5

https://belenus.unirioja.es/~secarcam/red es/analisis/encaminamiento/algoritmos/b ellman-ford.

html#ejemplo

Algoritmo de Bellman-Ford
De Wikipedia, la enciclopedia libre Saltar a navegacin, bsqueda El algoritmo de Bellman-Ford (algoritmo de Bell-End-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. Este algoritmo fue desarrollado por Richard Bellman, Samuel End y Lester Ford. Segn Robert Sedgewick, Los pesos negativos no son simplemente una curiosidad matemtica; [] surgen de una forma natural en la reduccin a problemas de caminos ms cortos, y son un ejemplo de una reduccin del problema del camino hamiltoniano que es NP-completo hasta el problema de caminos ms cortos con pesos generales. Si un grafo contiene un ciclo de coste total negativo entonces este grafo no tiene solucin. El algoritmo es capaz de detectar este caso. 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 al menos la del problema del camino ms largo de complejidad NPCompleto.

Algoritmo
El Algoritmo de Bellman-Ford es, en su estructura bsica, muy parecido al algoritmo de Dijkstra, pero en vez de seleccionar vorazmente el nodo de peso mnimo aun sin procesar para relajarlo, simplemente relaja todas las aristas, y lo hace |V|-1 veces, siendo |V| el nmero de vrtices en el grafo. Las repeticiones permiten a las distancias mnimas recorrer el rbol, ya que en la ausencia de ciclos negativos, el camino ms corto solo visita cada vrtice una vez. A diferencia de la solucin voraz, la cual depende de la suposicin de que los pesos sean positivos, esta solucin se aproxima ms al caso general. Existen dos versiones:
y

Versin no optimizada para grafos con ciclos negativos, cuyo coste de tiempo es O(VE)

Versin optimizada para grafos con aristas de peso negativo, pero en el grafo no existen ciclos de coste negativo, cuyo coste de tiempo, es tambin O(VE).

BellmanFord(Grafo G, nodo_origen s) // inicializamos el grafo. Ponemos distancias a INFINITO menos el nodo origen que // tiene distancia 0 for v V[G] do distancia[v]=INFINITO predecesor[v]=NIL distancia[s]=0 // relajamos cada arista del grafo tantas veces como nmero de nodos -1 haya en el grafo for i=1 to |V[G]-1| do for (u, v) E[G] do if distancia[v]>distancia[u] + peso(u, v) then distancia[v] = distancia[u] + peso (u, v) predecesor[v] = u // comprobamos si hay ciclos negativo for (u, v) E[G] do if distancia [v] > distancia[u] + peso(u, v) then print ("Hay ciclo negativo") return FALSE return TRUE BellmanFord_Optimizado(Grafo G, nodo_origen s) // inicializamos el grafo. Ponemos distancias a INFINITO menos el nodo o rigen que // tiene distancia 0. Para ello lo hacemos recorrindonos todos los vrtices del grafo for v V[G] do distancia[v]=INFINITO padre[v]=NIL distancia[s]=0 encolar(s, Q) en_cola[s]=TRUE mientras Q!=0 then u = extraer(Q) en_cola[u]=FALSE // relajamos las aristas for v ady[u] do if distancia[v]>distancia[u] + peso(u, v) then distancia[v] = distancia[u] + peso ( u, v) padre[v] = u if en_cola[v]==FALSE then encolar(v, Q) en_cola[v]=TRUE

[editar] Aplicaciones de encaminamiento


Una variante distribuida del Algoritmo del Bellman-Ford se usa en protocolos de encaminamiento basados en vector de distancias, por ejemplo el Protocolo de encaminamiento de informacin (RIP). El algoritmo es distribuido porque envuelve una serie de nodos (routers) dentro de un Sistema autnomo(AS), un conjunto de redes y dispositivos router IP administrados tpicamente por un Proveedor de Servicio de Internet (ISP). Se compone de los siguientes pasos: 1. Cada nodo calcula la distancia entre l mismo y todos los dems dentro de un AS y almacena esta informacin en una tabla. 2. Cada nodo enva su tabla a todos los nodos vecinos.

3. Cuando un nodo recibe las tablas de distancias de sus vecinos, ste calcula la ruta ms corta a los dems nodos y actualiza su tabla para reflejar los cambios. Las desventajas principales del algoritmo de Bellman-Ford en este ajuste son:
y y y

No escala bien Los cambios en la topologa de red no se reflejan rpidamente ya que las actualizaciones se distribuyen nodo por nodo. Contando hasta el infinito(si un fallo de enlace o nodo hace que un nodo sea inalcanzable desde un conjunto de otros nodos, stos pueden estar siempre aumentando gradualmente sus clculos de distancia a l, y mientras tanto puede haber bucles de enrutamiento)

Mejoras
En 1970 Yen describi una mejora del algoritmo Bellman-Ford para un grafo sin ciclos con peso negativo. Esta mejora primero asigna un orden arbitrario lineal a todos los vrtices y luego divide el conjunto de todas las aristas en uno o dos subconjuntos. El primer subconjunto, Ef, contiene todas las aristas (vi,vj) tales que i < j; mientras que el segundo, Eb, contiene aristas (vi,vj) tales que i > j. Cada vrtice se visita en orden v1,v2,,v|v|, relajando cada arista saliente de ese vrtice en Ef. Cada vrtice es, despus, visitado en orden v|v|,v|v|,,v1, relajando cada arista saliente de ese vrtice en Eb. La mejora de Yen reduce a la mitad, de manera efectiva, el nmero de pases requeridos para la solucin del camino ms corto desde una nica fuente.

y y y y

Indice Definicin del algoritmo de Bellman-Ford Mtodo del algoritmo deBellman-Ford Anotaciones al algotmo de Bellman-Ford Ejemplo del algitmo de Bellman-Ford

Definicin del algoritmo de Bellman -Ford


y y y y y

y y

Encontrar los caminos ms cortos desde un nodo origen dado con la condicin de que stos contengan a sumo un enlace Encontrar los caminos ms cortos con la condicin de que contengan dos enlaces como mximo Y as sucesivamente s = nodo origen w(i, j) = coste del enlace desde el nodo i al nodo j: o w(i, i) = 0 o w(i, j) = si los dos nodos no se encuentran directamente conectados o w(i, j) 0 si los dos nodos estn directamente conectados h = nmero mximo de enlaces en un camino en el paso actual del algoritmo Lh(n) = coste del camino de mnimo coste desde el nodo s hasta el nodo n con la condicin de que no hay ms de h enlaces

Mtodo del algoritmo de Bellman-Ford


y

y y

y y y

Paso 1 [Inicializacin] o L0(n)= , para todo n s o Lh(s) = 0, para todo h Paso 2 [Actualizacin] Para cada sucesivo h 0: o Para cada n s, calcular o Lh+1(s) = min j[Lh(j)+w(j,n)] Conectar n con el nodo predecesor j de mnimo coste Eliminar todas las conexiones de n con un nodo predecesor diferente obtenido en una iteracin anterior El camino de s a n finaliza con el enlace de j a n

Anotaciones al algoritmo de Bellman-Ford


y y y

Para la iteracin del paso 2 con h=K, y para cada nodo de destino n, el algoritmo compara las rutas potenciales de longitud K+1 desde s hasta n con el camino existente al final de la iteracin anterior Si el camino ms corto previo tiene un coste inferior, se guarda En caso contrario, se define un nuevo camino

Ejemplo del algoritmo de Bellman-Ford

Se quiere llegar del nodo V1 al nodo V6 h 0 1 2 3 4 Lh(2) 2 2 2 2 Ruta 1-2 1-2 1-2 1-2 Lh(3) Ruta Lh(4) 5 1-3 1 4 1-4-3 1 3 1-4-5-3 1 3 1-4-5-3 1 Ruta 1-4 1-4 1-4 1-4 Lh(5) 2 2 2 Ruta 1-4-5 1-4-5 1-4-5 Lh(6) 10 4 4 Ruta 1-3-6 1-4-5-6 1-4-5-6

Segn el algoritmo de Bellman-Ford deberemos seguir los nodos V1-V4-V5-V6, por ser los que menor coste no ocasionan

Vous aimerez peut-être aussi