Ich arbeite an der Konstruktion eines Algorithmus zur Berechnung von G^2 eines gerichteten Graphen, der eine Form einer Adjazenzliste ist, wobei G^2 = (V, E '), wobei E' als (u, v) ∈ E definiert ist, wenn es in G einen Pfad der Länge 2 zwischen u und v gibt. Ich verstehe die Frage sehr gut und habe einen Algorithmus gefunden, den ich annehme ist korrekt, jedoch ist die Laufzeit meines Algorithmus O (VE^2), wobei V die Anzahl der Eckpunkte und E die Anzahl der Kanten des Graphen ist. Ich habe mich gefragt, wie ich das in O (VE) Zeit machen könnte, um es effizienter zu machen?Algorithmus zur Berechnung des Quadrats eines gerichteten Graphen (dargestellt in Form einer Adjazenzliste)
Hier ist der Algorithmus, ich kam mit:
für Vertex in Vertices
für Nachbarn in Nachbarn
für n in Nachbarn
if (! N = Nachbar)
dann-> if (n.value == neighbor)
fügen Sie dies einer neuen Adjazenzliste hinzu
break; // Das bedeutet, dass wir auch weiterhin einen Pfad der Größe 2 zwischen Vertex und Nachbarn
sonst gefunden haben