Die zeitliche Komplexität beim Ermitteln des Durchmessers eines Diagramms


27

Was ist die zeitliche Komplexität beim Ermitteln des Durchmessers eines Graphen G=(V,E) ?

  • O(|V|2)
  • O(|V|2+|V||E|)
  • O(|V|2|E|)
  • O(|V||E|2)

Der Durchmesser eines Graphen ist das Maximum der Menge der kürzesten Pfadabstände zwischen allen Knotenpaaren in einem Graphen.G

Ich habe keine Ahnung, was ich dagegen tun soll. Ich benötige eine vollständige Analyse, um ein solches Problem zu lösen.


4
Bitte erarbeiten Sie ein bisschen. Warum interessiert Sie dieses Problem? Benötigen Sie einen Hinweis, eine vollständige Analyse oder eine Referenz? Interessieren Sie sich für Worst- oder Average-Case-Zeiten? Ist gerichtet? G
Raphael

@Raphael: Natürlich brauche ich keinen Hinweis, ich brauche eine vollständige Analyse. Ich habe meine Frage trotzdem bearbeitet.
Gigili

1
@ Gigili Du meinst auf jeden Fall, oder? Andernfalls werden alle von der letzten Möglichkeit (die in allgemeinen Graphen gleich O ( | V | 5 ) ist ) subsumiert , was es zu einer korrekten Antwort macht, unter der Annahme, dass mindestens eine Antwort korrekt sein soll. Ein weiteres Problem ist, dass es in einem Diagramm mit Zyklen keinen längsten Pfad gibt. Was ist mit "größter Entfernung" gemeint? ΘO(|V|5)
Raphael

@ Gigili Woher kommen die vier Entscheidungen?
uli

Antworten:


5

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

Bildbeschreibung hier eingeben


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:

  1. Wählen Sie einen Eckpunkt v
  2. Finde so, dass d ( v , u )ud(v,u) maximal ist
  3. Finden Sie so, dass d ( u , w ) maximal istwd(u,w)
  4. Return d(u,w)

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.


Um Dijsktra in der angegebenen Zeit arbeiten zu können, müssen Sie Fibonacci-Heaps verwenden, nicht die übliche Implementierung.
Suresh

8
Dies ist eine stark falsche Antwort, dieser Algorithmus ist folkloristisch, aber in Bäumen keine allgemeinen Graphen. PS: Ich kann Ihr Gegenbeispiel sehen, aber es ist keine gute Antwort, als Antwort markiert zu werden.

Ich habe zwei Fragen zur falschen Lösung. 1. Würde dies zumindest einen Bereich geben, in dem die richtige Antwort sein muss? ZB wenn die Methode den Durchmesser d findet , liegt die richtige Lösung zwischen d und 2d ? 2. Was passiert, wenn wir eine weitere Indirektion hinzufügen und alle Knoten berücksichtigen, die durch eine Indirektion gefunden wurden (nicht nur einen)? Das im Beitrag angegebene Gegenbeispiel würde dann funktionieren, da echte periphere Eckpunkte zu den Knoten gehören, die durch die zweite Indirektion gefunden werden.
Mafu

32

Ich nehme an, Sie meinen den Durchmesser von der der längste kürzeste Weg ist, der in G gefunden wird .GG

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)


2
Wenn Sie für diese Papiere bezahlt werden, überprüfen Sie Google Scholar.
Raffael

Diese Ausnahme ist auch für ungerichtete Bäume erwähnenswert, bei denen Sie Dia erhalten können. mit nur einem dfs durchlauf.
Azam

15

diam(G)tM=I+AMttO(logn)O(M(n)logn)M(n)O(n2.3727logn)

O(n2)


2
Es ist erwähnenswert, dass dieser Algorithmus nur im ungewichteten Fall funktioniert.
GMB

-2

Annahmen:
1. Der Graph ist ungewichtet.
2. Der Graph ist gerichtet

O (| V || E |) Zeitkomplexität.

Algorithmus:

ComputeDiameter(G(V,E)):
  if ( isCycle( G(v,E) ) ) then
     return INFINITY
  if ( not isConnected( G(V,E) )) then
     return INFINITY
  diameter = 0
  for each vertex u in G(V,E):
     temp = BFS(G,u)
     diameter = max( temp , diameter )
  return diameter

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:

  1. O (| E |) mit DFS
  2. O (| E |) mit DFS
  3. BFS wird in O (| E |) ausgeführt.
  4. Wir müssen die BFS-Funktion für jeden Scheitelpunkt aufrufen, so dass insgesamt O (| V || E |) Zeit benötigt wird.

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.


Azyklisch verbundene Graphen sind Bäume, für die das Problem leichter ist (weil der Durchmesser dann durch den längsten Pfad gegeben ist). Es wurde hier und hier behandelt , wo schnellere Algorithmen angegeben werden. (Eine rekursive Durchquerung oder alternativ zwei BFS sind ausreichend.)
Raphael

1
@Raphael Nein, azyklische ungerichtete Graphen sind Bäume. DAGs sind DAGs.
David Richerby

@DavidRicherby Richtig. (Obwohl die Antwort technisch gesehen nicht sagt, ob gerichtete oder ungerichtete Zyklen ausgeschlossen sind.;)) Auf jeden Fall ist dies nichts anderes als die Lösung von APSPP (dem naiven Ansatz), der bereits in früheren Antworten für den allgemeinen Fall behandelt wurde.
Raphael

@ Raphael Sind Sie sicher, dass azyklische Diagramme Bäume sind? Diagramm ist azyklisch bedeutet nicht, dass Diagramm immer ein Baum ist. Tree ist nur ein Sonderfall. Auch dies ist ein einfacher Algorithmus, und die Zeitkomplexität ist O (| V || E |).
sonus21

Ja, ich bin mir sicher. (Vielleicht denken Sie an bewurzelte Bäume, die einen anderen Geschmack haben.)
Raphael
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.