Tutorial zur Verwendung des SPFA-Algorithmus
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 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 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 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
e nicht in die Warteschlange aufgenommen werden, f jedoch schon. Zu diesem Zeitpunkt sind die Elemente in der Warteschlange d, e, fDas 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:
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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.

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

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 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

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.

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

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

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
