Was ist die zeitliche Komplexität beim Ermitteln des Durchmessers eines Graphen ?
Der Durchmesser eines Graphen ist das Maximum der Menge der kürzesten Pfadabstände zwischen allen Knotenpaaren in einem Graphen.
Ich habe keine Ahnung, was ich dagegen tun soll. Ich benötige eine vollständige Analyse, um ein solches Problem zu lösen.
Antworten:
Aktualisieren:
Diese Lösung ist nicht korrekt.
Die Lösung ist leider nur für Bäume richtig (und unkompliziert)! Den Durchmesser eines Baumes zu finden, braucht das nicht einmal. Hier ist ein Gegenbeispiel für Graphen (Durchmesser ist 4, der Algorithmus gibt 3 zurück, wenn Sie dieses auswählen ):v
Wenn das Diagramm gerichtet ist, ist dies ziemlich komplex, hier ist etwas Papier behauptet, dass im dichten Fall schnellere Ergebnisse erzielt werden als bei Verwendung von Algorithmen für kürzeste Pfade mit allen Paaren.
Mein Hauptaugenmerk liegt jedoch auf dem Fall, dass der Graph nicht gerichtet ist und ich bei nicht negativen Gewichten mehrmals von einem netten Trick gehört habe:
Seine Komplexität entspricht der von zwei aufeinanderfolgenden Breitensuchen¹, d. H.O(|E|) wenn der Graph verbunden ist².
Es schien Folklore zu sein, aber im Moment kämpfe ich immer noch darum, eine Referenz zu finden oder seine Korrektur zu beweisen. Ich werde aktualisieren, wenn ich eines dieser Ziele erreiche. Es scheint so einfach zu sein, dass ich meine Antwort sofort poste. Vielleicht bekommt es jemand schneller.
¹ Wenn der Graph gewichtet ist, scheint Wikipedia zu sagen, aber ich bin mir nur sicher, ob O ( | E | log | V | )O(|E|+|V|log|V|) O(|E|log|V|) .
² Wenn der Graph nicht verbunden ist, erhalten Sie aber Sie müssen möglicherweise O ( α (O(|V|+|E|) O(α(|V|)) , um ein Element aus jeder verbundenen Komponente auszuwählen. Ich bin mir nicht sicher, ob dies notwendig ist, und trotzdem können Sie entscheiden, dass der Durchmesser in diesem Fall unendlich ist.
quelle
Ich nehme an, Sie meinen den Durchmesser von der der längste kürzeste Weg ist, der in G gefunden wird .G G
Der Durchmesser kann ermittelt werden, indem zuerst alle kürzesten Pfade eines Paares ermittelt und die gefundene maximale Länge ermittelt wird. Floyd-Warshall - Algorithmus tut dies in Zeit. Johnsons Algorithmus kann implementiert werden, um O ( | V | 2 log zu erreichenΘ(|V|3) -Zeit zu erreichen.O(|V|2log|V|+|V|⋅|E|)
Eine geringere Laufzeitgrenze für den ungünstigsten Fall scheint derzeit schwer zu erreichen zu sein -Distanzen zu berücksichtigen sind und die Berechnung dieser Distanz in sublinearer (amortisierter) Zeit schwierig sein wird. siehehierfür eine verwandte Grenze. Beachten SiediesesPapier, das einen anderen Ansatz verwendet und einen (etwas) schnelleren Algorithmus erhält.O(|V|2)
quelle
quelle
Annahmen:
1. Der Graph ist ungewichtet.
2. Der Graph ist gerichtet
O (| V || E |) Zeitkomplexität.
Algorithmus:
Erläuterung:
Wir prüfen auf Zyklus. Wenn der Graph einen Zyklus enthält, bleiben wir in der Schleife in Bewegung, so dass wir eine unendliche Distanz haben. Wir prüfen, ob eine Verbindung besteht. Wenn der Graph nicht verbunden ist, bedeutet dies, dass der Scheitelpunkt u von G1 zu dem Scheitelpunkt v in G2 ist. Wobei G1 und G2 jeweils zwei nicht verbundene Untergraphen sind. Wir werden also wieder unendlich viel Distanz haben. Wir werden BFS verwenden, um die maximale Entfernung zwischen einem bestimmten Knoten (u) und allen anderen Knoten (v) zu berechnen, die von u aus erreichbar sind. Dann nehmen wir das Maximum des zuvor berechneten Durchmessers und geben das Ergebnis von BFS zurück. Wir werden also den aktuellen maximalen Durchmesser haben.
Laufzeitanalyse:
Gesamtzeit = O (| v || E |) + O (| E |) + O (| E |)
Seit | V || E | > | E |
Wir haben also die Laufzeit als O (| v || E |).
BFS
DFS
Hinweis: Dies ist keine elegante Lösung für dieses Problem.
quelle