Drucken-in-degree und out-degree von jedem vertex
Bin ich zu kämpfen mit diesem algoritm Frage:
Wie würde ich schreiben theta(m+n)
Algorithmus, der druckt die in-degree und out-degree jeder vertex in einer m-Kante, n-vertex gerichteten Graphen, wo der graph gerichtet ist, dargestellt Nähe listet.
Das klingt wie eine Hausaufgaben-Frage. Mein Tipp: versuchen Sie, ändern ein BFS-Baum generieren Algorithmus. Speziell, wie Sie mit bereits gefundenen Kanten für jeden Knoten.
Ein BFS-Baum würde nicht funktionieren, es sei denn, Sie kennen alle Knoten v wie
Und übrigens, der OP will einen Algorithmus, der verwendet angrenzens Listen, ich denke, BFS verwendet Nachbarschaft Matrizen (wenn ich mich nicht Irre)?
Ein BFS-Baum würde nicht funktionieren, es sei denn, Sie kennen alle Knoten v wie
in_degree(v) = 0
.Und übrigens, der OP will einen Algorithmus, der verwendet angrenzens Listen, ich denke, BFS verwendet Nachbarschaft Matrizen (wenn ich mich nicht Irre)?
InformationsquelleAutor user466663 | 2012-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinweis: Für die Kürze, ich bin mit "O" an Stelle von theta.
Keine Notwendigkeit für BFS.
In dem Fall, wo Sie Ihre Nachbarschaft-Listen bestehen aus einer Liste von gerichteten Kanten, warten zwei vertex-count-mappings, die man für in-Grad und eins für out-Grad. Jeder Knoten sollte zunächst abgebildet auf null. Iteriere durch jede Kante,
u,v
- und Inkrement-out-Diplom(u) und Grad(v). Nach Durchlaufen aller Kanten, die Sie Durchlaufen können jeden Scheitelpunkt, und drucken Sie Ihr Ergebnis aus dem mapping. Durchlaufen jede Kante ist in O(m), das Durchlaufen jeder Knoten (einmal initialisiert die mapping-und einmal, um tatsächlich drucken), ist O(n). Ihre Summe ist O(m+n).Beispiel-codes:
Können Sie beliebige assoziative Karte für die vertex-Anzahl Zuordnungen. Wenn du eine hashmap, erhalten Sie amortisiert konstanter Zeit Operationen, und es wird keinen Einfluss haben auf den gesamten Algorithmus die Komplexität. Allerdings, wenn Sie wissen, dass die Eckpunkte sind in einer Reihe ohne Lücken, wie [1,n], dann können Sie verwenden eine Reihe von Grafen, mit dem index repräsentiert den vertex, der hat seinen Wert. Also:
Diese einfach gibt Sie konstant time-mapping-Operationen.
InformationsquelleAutor Realz Slaw
Pflegen eine hash-Tabelle für jeden Knoten, und initialisieren Sie es auf null. Tun BFS ,Wann immer Sie auf einen vertex angrenzenden präsentieren vertex-Inkrement-Wert des vertex(ist der hit) in hash-Tabelle ein .Obige Methode ist für die in-Grad von vertex .Für die Stufe das gleiche tun, (das ist ,wenn überhaupt haben Sie Knoten verbunden erhöhen Sie dessen Wert, durch ein und iterieren (BFS)) .
InformationsquelleAutor Imposter