Heim Java javaLernprogramm Tutorial zur Verwendung des SPFA-Algorithmus

Tutorial zur Verwendung des SPFA-Algorithmus

Jul 20, 2017 am 10:23 AM
算法 详解

Anwendungsbereich: Es gibt negative Gewichtskanten in einem bestimmten Diagramm. Derzeit können Algorithmen wie Dijkstra nicht verwendet werden, und die Komplexität des Bellman-Ford-Algorithmus ist zu hoch, so der SPFA Der Algorithmus ist praktisch. Wir sind uns einig, dass es im gerichteten gewichteten Graphen G keinen negativen Gewichtszyklus gibt, das heißt, der kürzeste Weg muss existieren. Natürlich können wir vor der Ausführung des Algorithmus eine topologische Sortierung durchführen, um festzustellen, ob ein negativer Gewichtszyklus vorliegt, aber dies ist nicht der Schwerpunkt unserer Diskussion.

Algorithmusidee: Wir verwenden Array d, um die Schätzung des kürzesten Pfads jedes Knotens aufzuzeichnen, und verwenden eine Adjazenzliste, um Diagramm G zu speichern. Die Methode, die wir anwenden, ist die dynamische Näherungsmethode: Richten Sie eine First-In-First-Out-Warteschlange ein, um die zu optimierenden Knoten zu speichern. Während der Optimierung nehmen wir jedes Mal den Kopfknoten u heraus und verwenden die aktuelle Schätzung des kürzesten Pfads Punkt u, um Punkt u zu verlassen. Der Knoten v, auf den gezeigt wird, wird einer Entspannungsoperation unterzogen. Wenn die kürzeste Pfadschätzung von Punkt v angepasst wird und sich Punkt v nicht in der aktuellen Warteschlange befindet, wird Punkt v am Ende der Warteschlange platziert. Auf diese Weise werden Knoten kontinuierlich aus der Warteschlange entfernt, um Entspannungsoperationen durchzuführen, bis die Warteschlange leer ist

Die erwartete Zeitkomplexität beträgt O(ke) , wobei k die durchschnittliche Häufigkeit ist, mit der alle Scheitelpunkte dem Team beitreten. Es kann bewiesen werden, dass k im Allgemeinen kleiner oder gleich 2 ist.

Implementierungsmethode:

Zunächst gibt es nur den Start Punkt in der Warteschlange und erstellen Sie dann eine Tabelle, um den kürzesten Pfad vom Startpunkt zu allen Punkten aufzuzeichnen (der Anfangswert der Tabelle sollte dem Maximalwert zugewiesen werden, und der Pfad vom Punkt zu sich selbst sollte zugewiesen werden 0). Führen Sie dann eine Entspannungsoperation durch und verwenden Sie dabei einige Punkte in der Warteschlange als Ausgangspunkt, um den kürzesten Weg zu allen Punkten zu aktualisieren. Wenn die Aktualisierung erfolgreich ist und sich der aktualisierte Punkt nicht in der Warteschlange befindet, wird der Punkt am Ende der Warteschlange hinzugefügt . Wiederholen, bis die Warteschlange leer ist.

Bestimmen Sie, ob eine negative Schleife vorhanden ist:
Wenn ein Punkt mehr als N-mal in die Warteschlange gelangt, liegt eine negative Schleife vor (SPFA kann nicht mit Negativschleifen umgehen). Schleifen Bild)


Ermitteln Sie zunächst die kürzeste Entfernung vom Startpunkt a zu den restlichen Punkten
Pfadtabelle

                                                              > 1. Das erste Element (a) des Teams wird aus der Warteschlange entfernt und die Entspannungsoperation wird an den Endpunkten aller Kanten mit a als durchgeführt Ausgangspunkt (hier gibt es drei Punkte b, c und d). Zu diesem Zeitpunkt ist der Status der Pfadtabelle:

                                                                                                       Klicken Sie auf
, um beizutreten Zu diesem Zeitpunkt werden drei neue Knoten b, c und d zur Warteschlange hinzugefügt.

Das erste Element des Teams, Punkt b, wird aus der Warteschlange entfernt an den Endpunkten aller Kanten mit b als Startpunkt in der Reihenfolge (hier gibt es nur Punkt e). Zu diesem Zeitpunkt lautet der Pfadtabellenstatus:

   


In der kürzesten Pfadtabelle ist auch die kürzeste Pfadschätzung von e nicht in der Warteschlange vorhanden, daher muss e auch

sein Treten Sie der Warteschlange bei. Zu diesem Zeitpunkt sind die Elemente in der Warteschlange c, d, e

Das Kopfelement der Warteschlange wird am Punkt c entfernt und die Endpunkte aller Kanten beginnen Von c werden nacheinander entspannt (hier sind e, f zwei Punkte), zu diesem Zeitpunkt ist der Status der Pfadtabelle:

In der kürzesten Pfadtabelle ist die minimale Pfadbewertung von E, f kleiner geworden, E existiert in der Warteschlange, F existiert nicht. Daher muss
e nicht in die Warteschlange aufgenommen werden, f jedoch schon. Zu diesem Zeitpunkt sind die Elemente in der Warteschlange d, e, f

Das erste Element des Teams ist Punkt d. Verlassen Sie die Warteschlange und führen Sie Entspannungsoperationen an den Endpunkten aller Kanten aus, beginnend mit d (hier gibt es nur Punkt g). Zu diesem Zeitpunkt lautet der Pfadtabellenstatus:

.                                                              (Entspannung ist erfolglos), kein neuer Knoten kommt in die Warteschlange, das Element in der Warteschlange ist f, g

Das Kopfelement des Teams f zeigt aus der Warteschlange, für alle Kanten mit f als Startpunkt. Die Entspannungsoperation wird nacheinander am Endpunkt (dort) ausgeführt sind hier drei Punkte d, e und g). Die Schätzungen für den kürzesten Weg von e und g werden wieder kleiner. Es gibt keinen Punkt e in der Warteschlange, und e tritt der Warteschlange bei. Zu diesem Zeitpunkt muss der Punkt g nicht hinzugefügt werden queue Das Element ist g, e

Das Führungselement des Teams befindet sich am Punkt g außerhalb des Teams, und die Entspannungsoperation wird an den Endpunkten aller Kanten mit g as durchgeführt der Ausgangspunkt (hier gibt es nur Punkt b). Zu diesem Zeitpunkt ist der Status der Pfadtabelle:

                                                                    Es gibt keinen Punkt b, b kommt zu diesem Zeitpunkt in die Warteschlange. Das Element in der Warteschlange ist e, b

Das erste Element des Teams, Punkt e, verlässt die Warteschlange und die Endpunkte aller Kanten mit e als Startpunkt werden nacheinander entspannt ( Hier gibt es nur Punkt g). >

>

In der kürzesten Pfadtabelle hat sich die Schätzung des kürzesten Pfads von g nicht geändert (die Entspannung war nicht erfolgreich. Zu diesem Zeitpunkt ist das Element in der Warteschlange b
Das erste Element der Warteschlange wird am Punkt b aus der Warteschlange entfernt. Führen Sie Entspannungsoperationen an den Endpunkten aller Kanten mit b als Startpunkt durch (hier gibt es nur Punkt e. Zu diesem Zeitpunkt lautet der Pfadtabellenstatus:

    

In der kürzesten Pfadtabelle hat sich die Schätzung des kürzesten Pfades von e nicht geändert (die Entspannung war erfolglos) und die Warteschlange ist zu diesem Zeitpunkt leer

Endlich kommt a an. Der kürzeste Weg von g ist 14

Java-Code

 

Das obige ist der detaillierte Inhalt vonTutorial zur Verwendung des SPFA-Algorithmus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CLIP-BEVFormer: Überwacht explizit die BEVFormer-Struktur, um die Leistung der Long-Tail-Erkennung zu verbessern CLIP-BEVFormer: Überwacht explizit die BEVFormer-Struktur, um die Leistung der Long-Tail-Erkennung zu verbessern Mar 26, 2024 pm 12:41 PM

Oben geschrieben und das persönliche Verständnis des Autors: Derzeit spielt das Wahrnehmungsmodul im gesamten autonomen Fahrsystem eine entscheidende Rolle Das Steuermodul im autonomen Fahrsystem trifft zeitnahe und korrekte Urteile und Verhaltensentscheidungen. Derzeit sind Autos mit autonomen Fahrfunktionen in der Regel mit einer Vielzahl von Dateninformationssensoren ausgestattet, darunter Rundumsichtkamerasensoren, Lidar-Sensoren und Millimeterwellenradarsensoren, um Informationen in verschiedenen Modalitäten zu sammeln und so genaue Wahrnehmungsaufgaben zu erfüllen. Der auf reinem Sehen basierende BEV-Wahrnehmungsalgorithmus wird von der Industrie aufgrund seiner geringen Hardwarekosten und einfachen Bereitstellung bevorzugt, und seine Ausgabeergebnisse können problemlos auf verschiedene nachgelagerte Aufgaben angewendet werden.

Ausführliche Erklärung zur Erlangung von Administratorrechten in Win11 Ausführliche Erklärung zur Erlangung von Administratorrechten in Win11 Mar 08, 2024 pm 03:06 PM

Das Windows-Betriebssystem ist eines der beliebtesten Betriebssysteme der Welt und seine neue Version Win11 hat viel Aufmerksamkeit erregt. Im Win11-System ist die Erlangung von Administratorrechten ein wichtiger Vorgang. Mit Administratorrechten können Benutzer weitere Vorgänge und Einstellungen auf dem System durchführen. In diesem Artikel wird ausführlich beschrieben, wie Sie Administratorrechte im Win11-System erhalten und wie Sie Berechtigungen effektiv verwalten. Im Win11-System werden Administratorrechte in zwei Typen unterteilt: lokaler Administrator und Domänenadministrator. Ein lokaler Administrator verfügt über vollständige Administratorrechte für den lokalen Computer

Implementierung von Algorithmen für maschinelles Lernen in C++: Häufige Herausforderungen und Lösungen Implementierung von Algorithmen für maschinelles Lernen in C++: Häufige Herausforderungen und Lösungen Jun 03, 2024 pm 01:25 PM

Zu den häufigsten Herausforderungen, mit denen Algorithmen für maschinelles Lernen in C++ konfrontiert sind, gehören Speicherverwaltung, Multithreading, Leistungsoptimierung und Wartbarkeit. Zu den Lösungen gehören die Verwendung intelligenter Zeiger, moderner Threading-Bibliotheken, SIMD-Anweisungen und Bibliotheken von Drittanbietern sowie die Einhaltung von Codierungsstilrichtlinien und die Verwendung von Automatisierungstools. Praktische Fälle zeigen, wie man die Eigen-Bibliothek nutzt, um lineare Regressionsalgorithmen zu implementieren, den Speicher effektiv zu verwalten und leistungsstarke Matrixoperationen zu nutzen.

Detaillierte Erläuterung der Divisionsoperation in Oracle SQL Detaillierte Erläuterung der Divisionsoperation in Oracle SQL Mar 10, 2024 am 09:51 AM

Detaillierte Erläuterung der Divisionsoperation in OracleSQL In OracleSQL ist die Divisionsoperation eine häufige und wichtige mathematische Operation, die zur Berechnung des Ergebnisses der Division zweier Zahlen verwendet wird. Division wird häufig in Datenbankabfragen verwendet. Daher ist das Verständnis der Divisionsoperation und ihrer Verwendung in OracleSQL eine der wesentlichen Fähigkeiten für Datenbankentwickler. In diesem Artikel werden die relevanten Kenntnisse über Divisionsoperationen in OracleSQL ausführlich erörtert und spezifische Codebeispiele als Referenz für die Leser bereitgestellt. 1. Divisionsoperation in OracleSQL

Entdecken Sie die zugrunde liegenden Prinzipien und die Algorithmusauswahl der C++-Sortierfunktion Entdecken Sie die zugrunde liegenden Prinzipien und die Algorithmusauswahl der C++-Sortierfunktion Apr 02, 2024 pm 05:36 PM

Die unterste Ebene der C++-Sortierfunktion verwendet die Zusammenführungssortierung, ihre Komplexität beträgt O(nlogn) und bietet verschiedene Auswahlmöglichkeiten für Sortieralgorithmen, einschließlich schneller Sortierung, Heap-Sortierung und stabiler Sortierung.

Kann künstliche Intelligenz Kriminalität vorhersagen? Entdecken Sie die Möglichkeiten von CrimeGPT Kann künstliche Intelligenz Kriminalität vorhersagen? Entdecken Sie die Möglichkeiten von CrimeGPT Mar 22, 2024 pm 10:10 PM

Die Konvergenz von künstlicher Intelligenz (KI) und Strafverfolgung eröffnet neue Möglichkeiten zur Kriminalprävention und -aufdeckung. Die Vorhersagefähigkeiten künstlicher Intelligenz werden häufig in Systemen wie CrimeGPT (Crime Prediction Technology) genutzt, um kriminelle Aktivitäten vorherzusagen. Dieser Artikel untersucht das Potenzial künstlicher Intelligenz bei der Kriminalitätsvorhersage, ihre aktuellen Anwendungen, die Herausforderungen, denen sie gegenübersteht, und die möglichen ethischen Auswirkungen der Technologie. Künstliche Intelligenz und Kriminalitätsvorhersage: Die Grundlagen CrimeGPT verwendet Algorithmen des maschinellen Lernens, um große Datensätze zu analysieren und Muster zu identifizieren, die vorhersagen können, wo und wann Straftaten wahrscheinlich passieren. Zu diesen Datensätzen gehören historische Kriminalstatistiken, demografische Informationen, Wirtschaftsindikatoren, Wettermuster und mehr. Durch die Identifizierung von Trends, die menschliche Analysten möglicherweise übersehen, kann künstliche Intelligenz Strafverfolgungsbehörden stärken

Verbesserter Erkennungsalgorithmus: zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern Verbesserter Erkennungsalgorithmus: zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern Jun 06, 2024 pm 12:33 PM

01Ausblicksübersicht Derzeit ist es schwierig, ein angemessenes Gleichgewicht zwischen Detektionseffizienz und Detektionsergebnissen zu erreichen. Wir haben einen verbesserten YOLOv5-Algorithmus zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern entwickelt, der mehrschichtige Merkmalspyramiden, Multierkennungskopfstrategien und hybride Aufmerksamkeitsmodule verwendet, um die Wirkung des Zielerkennungsnetzwerks in optischen Fernerkundungsbildern zu verbessern. Laut SIMD-Datensatz ist der mAP des neuen Algorithmus 2,2 % besser als YOLOv5 und 8,48 % besser als YOLOX, wodurch ein besseres Gleichgewicht zwischen Erkennungsergebnissen und Geschwindigkeit erreicht wird. 02 Hintergrund und Motivation Mit der rasanten Entwicklung der Fernerkundungstechnologie wurden hochauflösende optische Fernerkundungsbilder verwendet, um viele Objekte auf der Erdoberfläche zu beschreiben, darunter Flugzeuge, Autos, Gebäude usw. Objekterkennung bei der Interpretation von Fernerkundungsbildern

Detaillierte Erläuterung der Rolle und Verwendung des PHP-Modulo-Operators Detaillierte Erläuterung der Rolle und Verwendung des PHP-Modulo-Operators Mar 19, 2024 pm 04:33 PM

Der Modulo-Operator (%) in PHP wird verwendet, um den Rest der Division zweier Zahlen zu ermitteln. In diesem Artikel werden wir die Rolle und Verwendung des Modulo-Operators im Detail besprechen und spezifische Codebeispiele bereitstellen, um den Lesern ein besseres Verständnis zu erleichtern. 1. Die Rolle des Modulo-Operators Wenn wir in der Mathematik eine ganze Zahl durch eine andere ganze Zahl dividieren, erhalten wir einen Quotienten und einen Rest. Wenn wir beispielsweise 10 durch 3 dividieren, ist der Quotient 3 und der Rest ist 1. Um diesen Rest zu ermitteln, wird der Modulo-Operator verwendet. 2. Verwendung des Modulo-Operators In PHP verwenden Sie das %-Symbol, um den Modul darzustellen

See all articles