Floyd-Warshall algoritme

Het Floyd-Warshall algoritme berekent de kortste weg voor alle paren gewogen grafiek en georiënteerd met een complexiteit. Het basisidee van dit algoritme is een iteratief proces dat, schuiven alle knooppunten, bij elke stap h men in een matrix A op positie afstand - gewicht - minimaal door het knooppunt index j oa via dat slechts knooppunten lagere index of gelijk aan h. Als er geen verbinding is, dan is de cel is oneindig. Uiteraard, aan het einde van het lezen van de matrix geeft de minimale afstand tussen de verschillende knooppunten van de grafiek.

Dat gezegd hebbende, kunnen we zeggen dat het probleem is opgelost in dynamisch programmeren met behulp van theoretisch een kubusvormige matrix waar de coördineren en de x-as en j, en h de diepte. Praktisch, kunnen we echter een enkele array reiterandola vloer te gebruiken door de vloer in h. Men begint met het verkrijgen van de adjacentiematrix van de grafiek, dan zich erop begint in elke stap h Vervolgens bekijken we elke cel van de matrix A: indien de som van de afstand tussen de betrokken nieuwe knooppunt plus de afstand h tussen hej Het is kleiner dan de afstand rechtstreeks tussen i en j vervangt dan de laatste met de vorige som.

Om het een beetje 'meer formele als & lt; A dan A = waarbij h is het plan dat we analyseren.

Hieronder vindt u een algoritme in pseudocode van de procedure kan zien:

Initialisatie int dist; voor i: = 1 tot n voor j: = 1 tot n dist: = gewicht;

waarbij Gewicht is een functie die het gewicht van de boog toont van i naar j, 0 in het geval waarin i = j of oneindig wanneer er geen boog van i naar j in de grafiek.

floydWarshall {voor u: = 1 tot n voor i: = 1 tot n voor j: = 1 tot n als dan dist: dist = + dist;

Reconstructie van de Walk Least

Na de bovenstaande stappen alleen heb het gewicht van de kortste weg tussen twee knooppunten, maar we weten nog niet wat er werkelijk knooppunten die deze manieren vormen. Om zelfs de manier waarop je een andere datastructuur waar we slaan te gebruiken, voor elk paar de voorganger van j in de kortste weg te verbinden. In de initialisatie fase, natuurlijk, de voorganger van j in de kortste weg i- & gt; j i. Het algoritme is enigszins gewijzigd door de invoering van dit nieuwe element:

Als de kortste weg tussen i en j gaat naar het knooppunt h dan is de voorloper van j i- & gt; j is duidelijk de voorloper van j H & gt; j.

Zodra de gegevensstructuur standaardwaarden kunnen reconstrueren kortste paden tussen elk paar knooppunten. Stel dat we willen de kortste weg P1,5 reconstrueren en dit is 1,3,4,5. Default we op deze manier:

  • Laten we beginnen met de standaard, de moeite waard 4
  • Nu overwegen Standaard, ter waarde van 3
  • Nu Standaard, dat is 1: Way herbouwd.
(0)
(0)
Commentaren - 0
Geen reacties

Voeg een Commentaar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Tekens over: 3000
captcha