Sagen wir, dass ich einen gerichteten Graphen mit einer einzigen Wurzel und ohne Zyklen habe. Ich möchte eine Art auf jedem Knoten (zum Beispiel als eine ganze Zahl mit einem gewissen benutzerdefinierten Reihenfolge) hinzuzufügen, mit der folgenden Eigenschaft:Encoding gerichteten Graphen als Zahlen
if Node1.type <= Node2.type then there exists a path from Node1 to Node2
anzumerken, dass topologische Sortierung genügt tatsächlich die umgekehrte Eigenschaft:
if there exists a path from Node1 to Node2 then Node1.type <= Node2.type
also kann es hier nicht verwendet werden.
Nun beachten Sie, dass Ganzzahlen mit natürlicher Ordnung hier nicht verwendet werden können, weil alle 2 ganzen Zahlen verglichen werden können, d. H. Die Reihenfolge der ganzen Zahlen ist linear, während der Baum nicht sein muss.
Also hier ist ein Beispiel. Es sei angenommen, dass der Graph hat 4 Knoten A, B, C, D
und 4 Pfeile:
A->B, A->C, B->D, C->D
So ist es ein Diamant. Jetzt können wir setzen
A.type = 00
B.type = 01
C.type = 10
D.type = 11
wo auf der rechten Seite haben wir Ganzzahlen im Binärformat. Der Vergleich ist bitweise definiert:
(X <= Y) if and only if (n-th bit of X <= n-th bit of Y for all n)
Also ich denke, solche Reihenfolge könnte verwendet werden, die Frage ist, wie man Werte aus einem gegebenen Diagramm zu konstruieren? Ich bin mir nicht einmal sicher, ob die Lösung immer existiert. Irgendwelche Hinweise?
UPDATE: Da es einige Missverständnisse über Terminologie ich benutze lassen Sie mich mehr explicite sein: Ich habe Interesse an gerichteten azyklischen Graphen, so dass es ohne Vorgänger genau ein Knoten ist (auch bekannt als die Wurzel) und es gibt auf der eine Pfeil zwischen zwei Knoten. Der Diamant wäre ein Beispiel. Es nicht muss ein Blatt (d. H. Der Knoten ohne Nachfolger) haben. Jeder Knoten kann mehrere Vorgänger und mehrere Nachfolger haben. Man könnte sagen, dass dies eine teilweise geordnete Menge mit einem kleinsten Element ist (d. H. Ein eindeutiges global minimales Element).
Wenn 'Node1.type <= Node2.type' niemals gilt, dann ist die Anforderung trivial erfüllt . –
@ n.m. Ich bin mir nicht sicher, ob ich das verstehe. – freakish
Wenn 'a