Nachbarschaft-Liste Darstellung eines gerichteten Graphen
Gegeben, eine Nachbarschaft-Liste Darstellung eines gerichteten Graphen, wie lange dauert es
zur Berechnung der aus-Grad von jedem Eckpunkt? Wie lange dauert es, um zu berechnen,
in-Grad?
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beide sind
O(m + n)
wom
ist die Anzahl der Kanten undn
ist die Anzahl der vertices.Starten eine Reihe von Leistungsindikatoren, eine für jeden Scheitelpunkt, eine für in-degree und out für out-degree.
Scannen der Kanten. Für die aus Knoten, jede Kante, hinzufügen, um das aus-Maß Zähler für den jeweiligen Eckpunkt. Für die Knoten jeder Kante, hinzufügen der in-Grad-Zähler für diesen vertex. Dies ist
O(m)
Betrieb.Ausgabe der out-degree und degree-Zähler für jeden vertex, die
O(n)
.So kommen Sie
O(m + n)
.Nachbarschaft-Liste Darstellung eines gerichteten Graphen:
Out-Grad jedes Knotens
Graphen aus-Grad eines Knotens u ist gleich der Länge von Adj[u].
Die Summe der Längen aller Nähe-Listen in Adj ist |E|.
Damit die Zeit zu berechnen die aus-Grad jeder vertex ist Θ(V + E)
In-Grad jedes Knotens
Der in-Grad eines Knotens u ist gleich der Anzahl der Male es wird in alle Listen im Adj.
Wenn wir suchen, alle Listen für jeden vertex, die Zeit zu berechnen, die in Grad jedes Knotens ist Θ(VE)
Alternativ können wir reservieren ein array T der Größe |V| und initialisieren Sie die Einträge zu null.
Müssen wir nur Scannen Sie die Listen in Adj einmal, Inkrementierung von T[u] wenn wir sehen, wie 'u' in den Listen.
Werte in T wird der in-Grad von jedem vertex.
Diese kann getan werden, in Θ(V + E) Zeit mit Θ(V) zusätzlichen Stauraum.
Da, sein ein gerichteter graph und nur die Nähe Liste gegeben ist.
Sich die Zeit, die zum zählen der Anzahl der aus-Grad wäre theta (M+N), wobei M die Anzahl der Knoten und N bezieht sich auf Anzahl der Kanten.
In der Erwägung, dass für die Zählung der Anzahl der in-Grad für alle Knoten, den Sie haben, um die Anzahl der vorkommen des Knotens in allen anderen(restlichen vertices) angrenzens Liste. Ja, es dauern würde, theta(MN).
Jedoch, wenn Sie pflegen ein Array der Größe M, dann kannst du das zählen der in-Grad in theta(M+N) mit einem zusätzlichen Raum Speicher von theta(M)
out-degree
für jedenvertex:theta(E)
in-degree
für jedenvertex:O(E)
E
ist die Anzahl der Kanten des GraphenComputing sowohl die in-degree und out-degree dauert theta(m + n) für einen Graphen mit m Knoten und n Kanten. Der Grund, dass es theta(m+n) und nicht O(m + n), weil, was immer die Grafik , es hat zu gehen durch jeden Eckpunkt m und jede Kante n.
Gegeben, eine Nachbarschaft-Liste Darstellung von Adj, ein gerichteter graph, der Grad eines Knotens u ist gleich der Länge von Adj[u],
und die Summe der Längen aller Nähe-Listen in Adj ist |E|. So ist die Zeit zu berechnen die aus-Grad eines jeden Knoten ist Θ(|V| + |E|).
Der in-Grad eines Knotens u ist gleich der Anzahl der Male es wird in alle Listen in Adj., Wenn wir suchen, alle Listen für jeden
vertex, die Zeit zu berechnen, die im Grad eines jeden Knoten ist Θ(|V|.|E|).
(Alternativ können wir reservieren ein array T der Größe |V| und initialisieren Sie die Einträge zu null. Dann müssen wir nur Scannen Sie die Listen in
Adj einmal, Inkrementierung von T[u] wenn wir sehen, u in den Listen. Die Werte in T wird der in-Grad von jedem vertex. Dies kann
getan in Θ(|V| + |E|) Zeit mit Θ(|V|) zusätzlichen Speicher.)