Konvertieren eines Digraphen in einen ungerichteten Graphen auf reversible Weise


10

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: Geben Sie hier die Bildbeschreibung ein


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 ...


1
Ich denke, diese Frage ist zu weit gefasst. Was sind Ihre Einschränkungen?
AdrianN

Ich kann mir momentan keine Einschränkungen vorstellen. Ich denke, eine Möglichkeit, die Informationen eines gerichteten Graphen in einen ungerichteten zu codieren, würde ausreichen, solange sie reversibel sind. Ich denke, was ich vorhabe, ist die einfachste Art von ungerichteten Diagrammen, daher suche ich nach einer Lösung, die weder für die Eckpunkte noch für die Kanten Farben verwendet.
Heterotisch

Ich denke, Sie sollten in der Frage angeben, was Sie mit "der gleichen Grafik" meinen. Meinen Sie damit, dass die Scheitelpunkte beschriftet sind oder dass die Scheitelpunkte unbeschriftet sind? Meinen Sie damit, dass für beide gleich ist oder dass die beiden Graphen isomorph sind? Es hört sich so an, als ob Sie Letzteres meinen. Sind Sie sicher, dass dies in Ihrer Bewerbung erforderlich ist? Wenn Sie Beschriftungen behalten dürfen, wird das Problem einfacher und die Antwort von AdrianN funktioniert (da die Kante ( 3 , 4 ) nicht mit der Kante ( 1 , 2 ) übereinstimmt ). (V,E)(3,4)(1,2)
DW

2
Bitte übernehmen Sie Ihre Updates in die Frage. Zu jedem Zeitpunkt sollten SE-Beiträge von oben nach unten lesbar sein, ohne sich über die Geschichte Gedanken zu machen. das ist separat archiviert.
Raphael

Antworten:


6

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)v1e,,v5eexv1ev1ev2ev1ev3ev3ev4ev4ev5e.v3ey

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)v5ee=(x,y)v4ev4ev3ev3ev1ev2ev1ehat 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 .v2ev1exv3ey(x,y)v1e,,v5e


7

David Richerbys Antwort (die angenommen wurde) ist gut.

Ich folgte seinen Anweisungen an einem einfachen Beispiel-Digraphen und hoffe, dass es jemandem hilft.

Digraph a <-> b, c -> a, b -> c

(Ich hätte dies als Kommentar zu Davids Antwort gepostet, aber ich habe nicht die erforderlichen Reputationspunkte.)


1
Die grafische Darstellung ist eine enorme Verbesserung gegenüber der ursprünglichen Antwort. Vielen Dank für die Veröffentlichung als Antwort, nicht als Kommentar.
OrangeSherbet

1
Ich fühle mich immer überwältigt, wenn ich mir eine formale Erklärung oder Formel in einem Mathepapier ansehe. Ich muss nur über diese Angst hinwegkommen und jeden Satz langsam betrachten - Dinge nachschlagen, mit denen ich im Laufe der Zeit nicht vertraut bin. Dann kritzele ich ein Beispiel wie dieses, um sicherzugehen, dass ich es verstehe. Am Ende bin ich immer verblüfft darüber, wie einfach das alles war, und irgendwie entsetzt darüber, wie viel Mühe ich gebraucht habe, um es zu verstehen. Ich fühle mich manchmal wie von einem anderen Planeten. Ich bin froh, dass ich Ihnen helfen konnte, es schneller zu verstehen. Sobald Sie es sehen, ist es einfach.
William

2

DG

  1. D
  2. GGD
  3. uvDGu<vG
  4. GG

Wenn man die disjunkte Vereinigung macht, muss man darauf achten, dass sie reversibel ist.

Beispiel


Dies ist ein guter Versuch und entspricht den Vorstellungen, die ich für eine Antwort hatte, aber es funktioniert nicht, da die Umkehrung nicht eindeutig ist. Zum Beispiel wird der Graph OOOO in den Graphen OOOOOOOO konvertiert, aber dieser letztere könnte auch aus dem gerichteten Graphen O-> OO-> OOO stammen, so dass der Prozess nicht reversibel ist.
Heterotisch

Ich habe ein Bild hinzugefügt, um es klarer zu machen.
AdrianN

-1

Was ist mit der Identitätsfunktion? Dh jeder Digraph kann als ungerichteter, zweiteiliger Graph mit gleich großen Partitionen angesehen werden und umgekehrt.


G=(V,E)(V×{0,1},{(u,0,v,1)(u,v)E})GGGG

-1

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.


xx

Mit "gerichteter Scheitelpunkt" meine ich einen Scheitelpunkt im gerichteten Graphen (im Gegensatz zum äquivalenten nicht gerichteten Graphen). Sie können "echte" Kanten von "Gradcodierungs" -Kanten unterscheiden, da nur "Gradcodierungs" -Scheitelpunkte eine einzige Kante haben. Das war der Grund für die "1 +" in meiner Beschreibung. Ich nehme Ihr Wort über den minensuchenden "kniffligen Teil". Ich weiß nicht, dass es genau gleichbedeutend mit Minensuchboot ist, aber ich kann glauben, dass ich vielleicht nur den Eimer die Straße runter getreten habe :-)
Aaron

Außerdem habe ich Ihre Lösung beim ersten Lesen nicht ganz verstanden, aber ich sehe, wie sie jetzt funktioniert. Klug!
Aaron

xx

(x,y)(x0,x),(x,y),(y,y0)(y,y1)xy(x,y)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.