HomeWissen Stichwortverzeichnis Tags

Algorithmus von Bellman und Ford

Einfache Sprache

Der Algorithmus von Bellman und Ford löst das Kürzester Pfad Problem. Für alle Knoten wird geschaut durch welchen angrenzenden Knoten es den kürzesten Weg gibt. Da sich das Ändern kann, vor allem weil manchmal Wege mit mehreren kurzen Kanten kürzer sind als Wege mit wenigen Kanten, muss das so oft wie es Knoten gibt wiederholt werden.

Idee Algorithmus von Bellman und Ford

Nutzt die Bellman-Gleichung aus. Es wird für jeden Knoten geschaut durch welchen Knoten man ihn ab kürzesten Erreichen kann. Das muss $|V|$ mal wiederholt werden, wegen: Voraussetzung für den Algorithmus ist, dass der Graph keine gerichteten Kreise negativer Länge besitzt. Also die minimale Zyklus-Länge $ZL\geq 0$ ist

Algorithmus

 1def bellman_ford(G, A):
 2    V, E = G
 3    n = len(V)
 4    u = {}
 5    # Initialize u[j,1] = a_{1j} for all j
 6    for j in range(n):
 7        u[(j, 1)] = A[0][j]
 8   for k in range(2, n):
 9        for j in range(n):
10            # Get all possible h values (h ≠ j)
11            candidates = [u[(h, k-1)] + A[h][j] for h in range(n) if h != j]
12            # Include the previous value u[j,k-1] in comparison
13            u[(j, k)] = min([u[(j, k-1)]] + candidates)
14    # Extract final distances
15    distances = [u[(j, n-1)] for j in range(n)]
16    return distances

Naive Laufzeit ist $\mathcal O(|V|^3)$. Durch geeignete Implementierung kann auch $\mathcal O(|V|\cdot|E|)$ erreicht werden.

Example

Gegeben sei folgender Graph: Algorithmus von Bellman und Ford_1.png Der Algorithmus von Bellman und Ford produziert folgende Tabelle: Algorithmus von Bellman und Ford_2.png D.h. wir erhalten $u_1 = 0, u_2 = −1, u_3 = 1, u_4 = 2 \text{ und } u_5 = 2$. (Also z.B. ist die Länge des kürzesten Weges zu $u_4$ gleich $2$)

Home: