Ford-Bellman-Algorithmus


Algorithm Forda-Bellman
Kann eine konzentrierte Zählung gegeben werden G c) n und m Rippen, und es gibt einen Ausgangspunkt. v♪ Wir müssen die kürzeste Streckenlänge von oben finden. v zu allen anderen Gipfeln.

Genau wie Dextra.Ford-Bellman-Algorithmus Auf der Suche nach einer Entfernung von 1 Top zu allen anderen, aber Arbeiten mit negativen Rippen
Ford-Bellmans Algorithmus ist ein paar Phasen.n-1) Alle Zählrippen sind auf jeder Stufe zu untersuchen und der Algorithmus versucht sich entlang jeder Rippe zu entspannen (a, b) Wert cBeziehung entlang der Rippe - es ist ein Versuch, die Bedeutung zu verbessern d[a]Werte d[b] + c♪ In der Tat bedeutet es, dass wir versuchen, die Antwort für die Spitze durch die Verwendung der Rippe und die aktuelle Antwort für die Spitze zu verbessern.

Massiv d - es ist der kürzeste Tauchgang vom Start-up-Peak sowie in Daykstr, der ursprünglich mit möglichst vielen Zahlen gefüllt ist, abgesehen vom Start-up-Top, wo Null gesetzt werden muss.
Die Rippen werden nicht von der benachbarten Matrix oder der Gewichtsmatrix verwendet, sondern von der Liste, aus der die Rippe freigegeben wird (die Liste).fromIn diesem Falltound sein Gewichtcost)
Strebekante {
von, zu, Kosten;
?
vektorausgestrahlte Teilkanten;

konstant INF Beschreibt die Anzahl der "Ausdauer" - es muss so erhalten werden, dass es alle möglichen Längen deutlich überschreitet.

Einfache Implementierung des Algorithmus:
d[v] = 0;
für (int i=0; i Visitn-1; ++i)
für (int j=0; j Visitm; ++j)
wenn (d[edges[j].from] PER INF)
d[edges[j].to] = min (d[edges[j].to], d[edges[j].from] + edge[j].cost);

oder etwas kürzer mit Kunststoffen C++11:
d[v] = 0;
für (int i=0; iς n-1; ++i)
für (Schlitten j: Kanten)
wenn (d[j.from] Ø INF)
d[j.to] = min (d[j.to], d[j.aus] + j.cost);


Beispiel der Arbeit


Wir nehmen ein einfaches Ohr mit 5 Knoten, 4. Rippen wiegen 1.

Wir setzen die Rippenliste in diese Reihenfolge.
4 5 1
3 4 1
Artikel 2
1 2 1


Referenzwerte im kürzesten Bereich:
0)infinfinfinf

wobei Inf eine solche ganze Zahl sein soll, die immer größer als das Rippengewicht wäre.

Nach dem 1. Durchgang
0)1infinfinf

Nach 2. Durchgang
0)12infinf

Nach 3. Pass
0)123inf


Nach 4. Durchgang
0)123ANHANG

Wenn wir die Rippen in Ordnung bringen würden, könnten wir die kürzeste Länge nach dem 1. Durchgang finden.