Algoritme van Bellman-Ford

Het algoritme van Bellman-Ford is een graaf-algoritme dat, voor een gegeven knoop van een gerichte, gewogen graaf, de kortste route naar alle knopen van die graaf bepaalt. Het kortstepad-algoritme, ook bekend als het algoritme van Dijkstra, lost dit probleem sneller op, maar dat algoritme kan alleen bij een graaf met niet-negatieve gewichten worden gebruikt. Het algoritme van Bellman-Ford wordt dus in de praktijk alleen gebruikt bij een graaf met negatieve gewichten. Het algoritme van Bellman-Ford kan namelijk een negatieve cirkel opsporen. Het algoritme is naar de ontwikkelaars ervan genoemd, Richard Bellman en Lester Ford.

Algoritme bewerken

De invoer van het algoritme bestaat uit een gewogen graaf, gegeven door

  • een verzameling knopen   (van het Engelse vertices),
  • een verzameling zijden   (van het Engelse edges),
  • een afbeelding   die aan elke zijde een gewicht toekent, en uit
  • een startknoop  .

Het algoritme bepaalt de kortste paden van   naar de andere knopen.

In het onderstaande algoritme is:

  •   het aantal knopen in de verzameling  ,
  •   een afbeelding die aan elke knoop een afstand vanaf de startknoop toekent, en
  •   een partiële afbeelding die aan elke knoop een voorganger toekent.

De afbeeldingen   en   worden tijdens het uitvoeren van het algoritme opgebouwd.

 01  voor elke                 
 02       ,  
 03   
 
 04  herhaal   keer              
 05      voor elke  
 06          als   dan
 07               
 08               
   
 09  voor elke          
 10      als   dan
 11      STOP met uitkomst "Er is een negatieve cirkel"
 
 12  uitkomst   en  

Als het algoritme klaar is en er geen cirkel met negatieve afstand is gevonden, levert   voor iedere knoop kortste afstand van   naar die knoop en kunnen met behulp van   de routes met het minste gewicht worden bepaald.

In plaats van gehele getallen ( ) kunnen ook andere soorten getallen als gewichten worden gebruikt, bijvoorbeeld rationale getallen ( ).