Ich suche nach einem Algorithmus, um einen Digraphen (gerichteten Graphen) reversibel in einen ungerichteten Graphen umzuwandeln, dh der Digraph sollte rekonstruierbar sein, wenn wir den ungerichteten Graphen erhalten. Ich verstehe, dass dies zu Lasten des ungerichteten Graphen mit mehr Eckpunkten gehen wird, aber es macht mir nichts aus.
Weiß man, wie man das macht oder kann man Referenzen vorschlagen? Danke im Voraus.
Update: In Bezug auf die Antwort von AdrianN unten. Es könnte ein guter Ausgangspunkt sein, aber ich denke nicht, dass es in seiner aktuellen Form funktioniert. Hier ist ein Bild davon, warum ich denke, dass dies nicht der Fall ist:
Update nach DWs Kommentar: Ich betrachte die Eckpunkte der Diagramme als unbeschriftet. Wenn eine Lösung das Beschriften der Scheitelpunkte beinhaltet (wie dies bei AdrianN der Fall ist), sollte sie unabhängig von der Beschriftung das gleiche (isomorphe) ungerichtete Diagramm ergeben. Meine Definition von "isomorph" für Diagramme mit beschrifteten Scheitelpunkten ist, dass es eine Permutation der Beschriftung gibt, die die beiden Diagramme in Beziehung setzt, aber ich bin mir nicht sicher, welche genaue Definition für unbeschriftete Diagramme vorliegt ...
quelle
Antworten:
Fügen Sie für jede gerichtete Kante neue Eckpunkte v e 1 , … , v e 5 hinzu und ersetzen Sie e durch die Kanten x v e 1 , v e 1 v e 2 , v e 1 v e 3 , v e 3 v e 4 , v e 4 v e 5 , v ee=(x,y) ve1,…,ve5 e xve1 ve1ve2 ve1ve3 ve3ve4 ve4ve5 .ve3y
Um zu dekodieren, muss jedes Blatt (Scheitelpunkt Grad 1), dessen Nachbar Grad 2 hat, für eine Kante e = ( x , y ) ; sein Nachbar ist v e 4 und der andere Nachbar von v e 4 ist v e 3 . v e 3 hat einen eindeutigen Nachbarn, der beide Grade 3 hat und an ein Blatt angrenzt: Der Nachbar ist v e 1 und sein Blatt ist v e 2 (wenn v e 1)ve5 e=(x,y) ve4 ve4 ve3 ve3 ve1 ve2 ve1 hat zwei Blattnachbarn, wählen Sie einen willkürlich aus, um ) zu sein. Der andere Nachbar von v e 1 ist x und der andere Nachbar von v e 3 ist y . Stellen Sie die gerichtete Kante ( x , y ) wieder her und löschen Sie die Eckpunkte v e 1 , … , v e 5 .ve2 ve1 x ve3 y (x,y) ve1,…,ve5
quelle
David Richerbys Antwort (die angenommen wurde) ist gut.
Ich folgte seinen Anweisungen an einem einfachen Beispiel-Digraphen und hoffe, dass es jemandem hilft.
(Ich hätte dies als Kommentar zu Davids Antwort gepostet, aber ich habe nicht die erforderlichen Reputationspunkte.)
quelle
Wenn man die disjunkte Vereinigung macht, muss man darauf achten, dass sie reversibel ist.
quelle
Was ist mit der Identitätsfunktion? Dh jeder Digraph kann als ungerichteter, zweiteiliger Graph mit gleich großen Partitionen angesehen werden und umgekehrt.
quelle
Hier ist ein Stich:
Ersetzen Sie die Richtungsinformationen durch zusätzliche Scheitelpunkte im ungerichteten Diagramm. Mit anderen Worten, verwenden Sie die zusätzlichen Scheitelpunkte im ungerichteten Diagramm, um die Richtungsinformationen zu "codieren". Fügen Sie beispielsweise für jeden gerichteten Scheitelpunkt mit mindestens einer Kante eine Anzahl ungerichteter Scheitelpunkte hinzu, die 1 + der Anzahl der "eingehenden" Kanten entspricht. Scheitelpunkte mit Nullkanten bleiben unverändert.
Um die umgekehrte Richtung auszuführen, erstellen Sie einen gerichteten Scheitelpunkt für jeden Scheitelpunkt mit 0 oder mehr als einer Kante. (Scheitelpunkte mit genau einer Kante sind die Scheitelpunkte "Richtungscodierung"). Jede Kante, die einen anderen mehrkantigen Scheitelpunkt verbindet, ist eine Verbindung im gerichteten Diagramm. Nun ist der schwierige Teil, für den ich keinen Algorithmus erklären kann (aber ich denke, einer existiert): Sie müssen die Richtung der Pfeile ableiten, wenn Sie nur die Anzahl der eingehenden Pfeile für jeden Scheitelpunkt angeben.
Ich denke, der schwierige Teil ähnelt dem Spielen eines Minensuchboots :-) Finde heraus, wo die Bomben (ankommende Kanten) die Anzahl benachbarter Bomben für jedes Quadrat (Scheitelpunkt) erhalten.
quelle