Civiele & structurele engineering
Leveren Johnsons Algoritme voor alle-paars Kortste Pad Problemen
Table of Contents
Het begrijpen van het probleem van de korte weg met al-paars
Het probleem van de kortste weg (APSP) zoekt de kortste afstand tussen elk paar hoekpunten in een gewogen grafiek. Het is een fundamentele uitdaging in grafiektheorie met directe implicaties voor netwerkontwerp, verkeersstroomoptimalisatie, sociale netwerkanalyse en logistiek. In tegenstelling tot een enkele bron kortste pad problemen, het oplossen van APSP vereist computerafstanden van elke hoek naar alle andere, die kwadratisch schalen met het aantal knooppunten.
Gemeenschappelijke benaderingen aanpakken dit probleem maar confronteren trade-offs. Floyd-Warshall, een dynamisch programmeringsalgoritme, werkt op dichte grafieken maar loopt in O(V3]] tijd en kan negatieve gewichtscycli niet verwerken. Dijkstra
Vergelijking van de algemene algoritmen
Om Johnsons algoritme te waarderen, helpt het om de meest gebruikte APSP-oplossers te contrasteren:
- Floyd-Warshall . . Eenvoudig te implementeren, maakt gebruik van een 2D afstand matrix, updates via drievoudige lussen. Werkt op negatieve randen maar niet negatieve cycli. Onpraktisch voor grafieken met duizenden hoekpunten als gevolg van kubieke tijd.
- Gerepeteerd Dijkstra . . Runs Dijkstra uit elke hoek. Snel op dunne grafieken (O(V E log V) met behulp van Fibonacci-hoop), maar beperkt tot niet-negatieve gewichten.
- Bellman-Ford (herhaald)
- Johnson
Hoe Johnsons Algorithm werkt
Johnsons algoritme transformeert een grafiek met negatieve randen slim in één met slechts niet-negatieve randgewichten, waardoor de structuur van kortste paden behouden blijft. Deze transformatie berust op een potentiële functie die afgeleid is van een enkele run van Bellman-Ford. Eenmaal opnieuw gewogen, kan Dijkstra... algoritme veilig van elke knooppunt worden gebruikt. Het algoritme bestaat uit vier stappen.
Stap 1: Een Super Source-knooppunt toevoegen
Een nieuwe hoek s wordt toegevoegd aan de grafiek, verbonden met elke bestaande hoeklijn met een rand van gewicht 0. Deze extra knoop verandert de kortste padafstanden niet omdat een pad dat gebruikt s] kan worden toegevoegd zonder kosten.
Stap 2: Potentiële functies met Bellman-Ford computeren
Voer het Bellman-Ford-algoritme uit vanuit de superbron s. Omdat s[ een zeroweight rand heeft tot alle hoekpunten, berekent het algoritme de kortste afstand h(v] van s[ naar elke hoek ]v[]. Als tijdens deze run een negatieve cyclus wordt gedetecteerd, bevat de originele grafiek een negatieve cyclus, en stelt Johnsons algoritme dat er geen geldige reeks kortste paden bestaat.
Stap 3: Herweging van de grafiek
Met behulp van de potentials h(v) wordt elke rand (u, v) met origineel gewicht w(u, v) opnieuw gewogen tot:
w'(u, v) = w(u, v) + h(u)
Deze transformatie garandeert dat elk gewicht van de hergewogen rand niet-negatief is. Het bewijs berust op de ongelijkheid van de driehoek: omdat h(v) ≤ h(u) + w(u, v) (uit de uitvoer van Bellman-Fords) volgt dat w'(u, v) ≥ 0]. Bovendien is de volgorde van de paden behouden: het kortste pad tussen twee hoekpunten in de oorspronkelijke grafiek blijft het kortste pad in de hergewogen grafiek.
Stap 4: Het draaien van Dijkstra
Met de hergewogen grafiek met alleen niet-negatieve randen wordt het Dijkstra.s algoritme eenmaal uitgevoerd vanaf elke hoek. Elke run berekent de kortste afstanden naar alle andere hoekpunten. De resulterende afstanden worden dan terug omgezet naar originele randgewichten met behulp van de formule:
distorigineel(u, v) = disthergewogen(u, v)
Deze laatste stap zorgt ervoor dat de aangegeven afstanden nauwkeurig zijn voor de oorspronkelijke grafiek.
Complexiteit en prestatieanalyse
Johnsons algoritme bereikt een totale tijdcomplex van O(V E + V2 log V] wanneer deze wordt geïmplementeerd met een binaire wachtrij voor de hoogste prioriteit.De Bellman-Ford-stap loopt in O(V E), en de daaropvolgende V[ Dijkstra draait elke take [[FLT:]]]O(E + V log V)] op schaarse grafieken.Voor dichte grafieken (E dienen V2), de complexiteitsbenaderingen [O3[]]]], waardoor FloydWarshall een eenvoudigere mix is.
Met behulp van een Fibonacci-hoop kan Dijkstra
Praktische toepassingen
Johnsons algoritme wordt gebruikt in domeinen waar grafiekranden negatieve kosten kunnen dragen en alle paar kortste afstanden nodig zijn. Voorbeelden van de praktijk zijn:
- Network routing: Internet service providers en telecommunicatienetwerken gebruiken gedistribueerde routeringsprotocollen die het goedkoopste pad tussen twee routers moeten aanpassen, zelfs wanneer de koppelingskosten fluctueren of negatief worden (bijvoorbeeld door congestie of beleidskortingen).
- Stadsvervoersplanning: Mapping- en logistieke bedrijven (bv. Google Maps, OpenStreetMap routeringsmotoren) berekenen kortste paden tussen vele oorsprongs-bestemmingsparen voor vlootoptimalisatie. Negatieve gewichten kunnen subsidies of tijdsgebonden kortingen modelleren.
- Bij multifaseproductienetwerken kunnen de kosten van het ene knooppunt naar het andere negatief zijn (bijvoorbeeld kortingen). Johnsons algoritme vindt de meest winstgevende routes over de gehele toeleveringsketen.
- Sociaal netwerkanalyse: Meten van de nabijheid centraal of tussen-en-tussen-centraliteit vereist alle-paar afstanden. Negatieve randen kunnen ..vriend-van-een-vriend" kortingsverbindingen of tegenstrijdige relaties vertegenwoordigen.
- Economische input-outputmodellen: Leontiefmodellen en stroomanalyses omvatten vaak negatieve coëfficiënten; Johnsons algoritme berekent het netto-effect van het propageren van veranderingen door een onderling verbonden economie.
Voor nadere lezing over de wiskundige grondslagen, zie Wikipedia
Conclusie
Johnsons algoritme onderscheidt zich als een elegante en praktische oplossing voor het kortste padprobleem bij negatieve randgewichten. Door de robuustheid van Bellman-Ford (voor het detecteren van negatieve cycli en rekenpotentieel) te combineren met de snelheid van Dijkstra (voor niet-negatieve grafieken), levert het uitstekende prestaties op schaarse netwerken. De herwegingstechniek zelf is een mooie toepassing van potentiële functies een concept dat zich ver voorbij kortste paden uitstrekt in gebieden zoals de minimale kostenstroom en de algoritmische speltheorie.
Wanneer er sprake is van een reëel APSP-probleem waarbij grafieken schaars zijn en negatieve randen kunnen bevatten, moet Johnsons algoritme de eerste overweging zijn. De theoretische garanties en de wijdverbreide implementatie in bibliotheken (bijv. NetworkX, Boost Graph Library[)) maken het praktisch om te adopteren.