Johnsons algoritme - giver dig mulighed for at finde de korteste veje mellem alle par af hjørner i en vægtet rettet graf . Denne algoritme virker, hvis grafen indeholder kanter med positiv eller negativ vægt, men der er ingen cyklusser med negativ vægt. Opkaldt efter D. B. Johnson , som udgav algoritmen i 1977.
Givet en graf med en vægtfunktion . Hvis vægten af alle kanter i en graf er ikke-negative, kan du finde de korteste veje mellem alle par af hjørner ved at køre Dijkstras algoritme én gang for hvert hjørne. Hvis grafen indeholder kanter med negative vægte, men ingen cyklusser med negative vægte, kan et nyt sæt kanter med ikke-negative vægte beregnes, så den tidligere metode kan bruges. Det nye sæt bestående af kantvægte skal opfylde følgende egenskaber.
Lemma (Ændring af vægt bevarer korteste veje). Lad være en vægtet rettet graf med en vægtfunktion , og lad være en vilkårlig funktion, der kortlægger hjørner til reelle tal. For hver kant vi definerer
Lade være en vilkårlig vej fra toppunkt til toppunkt . er den korteste vej med vægtfunktionen, hvis og kun hvis det er den korteste vej med vægtfunktionen , dvs. lighed er ækvivalent med lighed . Derudover indeholder en graf en cyklus med negativ vægt ved hjælp af en vægtfunktion, hvis og kun hvis den indeholder en cyklus med negativ vægt ved hjælp af en vægtfunktion .
Johnsons algoritme bruger Bellman-Ford- algoritmen og Dijkstras algoritme , implementeret som underrutiner. Kanter gemmes som lister over tilstødende hjørner. Algoritmen returnerer en almindelig matrix med størrelse , hvor , eller giver en besked om, at inputgrafen indeholder en cyklus med negativ vægt.
Johnson's Algorithm Byg en graf, hvis Bellman_Ford = FALSE , så udskriv " Inputgrafen indeholder en cyklus med negativ vægt" returner ø for for hvert sæt værdien til , beregnet af Bellman-Ford algoritmen for for hver kant gør for for hvert toppunkt beregner Dijkstras algoritme værdier for alle toppunkter for for hvert toppunkt returnerer DHvis den ikke-faldende prioritetskø i Dijkstras algoritme er implementeret som en Fibonacci-heap , så er køretiden for Johnsons algoritme . Med en enklere implementering af en ikke-faldende prioritetskø bliver køretiden lig med , men for sparsomme grafer opfører denne værdi i den asymptotiske grænse sig bedre end køretiden for Floyd-Warshall-algoritmen .
Algoritmer til grafsøgning | ||
---|---|---|
Uoplyste metoder | ||
Informerede metoder | ||
Genveje | ||
Minimumspændende træ | ||
Andet |