Conversion d'un digraphe en graphique non orienté de manière réversible


10

Je cherche un algorithme pour convertir un digraphe (graphe orienté) en graphe non orienté de manière réversible, c'est-à-dire que le digraphe devrait être reconstructible si on nous donne le graphe non orienté. Je comprends que cela se fera au détriment du graphique non orienté ayant plus de sommets, mais cela ne me dérange pas.

Sait-on comment faire cela ou peut-il suggérer des références? Merci d'avance.


Mise à jour: Concernant la réponse d'AdrianN ci-dessous. Ce pourrait être un bon point de départ, mais je ne pense pas que cela fonctionne sous sa forme actuelle. Voici une image de pourquoi je pense que ce n'est pas le cas: entrez la description de l'image ici


Mise à jour après le commentaire de DW: je considère que les sommets des graphiques ne sont pas étiquetés. Si une solution implique l'étiquetage des sommets (comme le fait AdrianN), elle devrait donner le même graphe non orienté (isomorphe), quelle que soit la manière dont l'étiquetage est effectué. Ma définition de "isomorphe" pour les graphes avec des sommets étiquetés est qu'il y a une permutation de l'étiquetage qui relie les deux graphes, mais je ne suis pas sûr de la définition exacte des graphes non étiquetés ...


1
Je pense que cette question est trop large. Quelles sont vos contraintes?
adrianN

Je ne peux pas vraiment penser à des contraintes pour l'instant. J'imagine que n'importe quel moyen de coder les informations d'un graphique dirigé en un graphique non dirigé ferait l'affaire, tant qu'il est réversible. Je suppose que ce à quoi je pense est le type le plus simple de graphiques non orientés, donc je cherche une solution qui n'utilise pas de couleurs ni pour les sommets ni pour les bords.
Heterotic

Je pense que vous devriez spécifier dans la question ce que vous entendez par "le même graphique". Voulez-vous dire que les sommets sont étiquetés ou que les sommets ne sont pas étiquetés? Voulez-vous dire que est le même pour les deux, ou que les deux graphiques sont isomorphes? On dirait que tu veux dire ce dernier. Êtes-vous sûr que c'est une exigence dans votre candidature? Si vous êtes autorisé à conserver les étiquettes, le problème devient plus facile et la réponse d'AdrianN fonctionne (car le bord n'est pas le même que le bord ). ( 3 , 4 ) ( 1 , 2 )(V,E)(3,4)(1,2)
DW

2
Veuillez incorporer vos mises à jour dans la question. À tout moment, les messages SE doivent être lisibles de haut en bas sans se soucier de l'histoire; qui est archivé séparément.
Raphael

Réponses:


6

Pour chaque arête dirigée , ajoutez de nouveaux sommets et remplacez par les arêtes , , , , , .v e 1 , , v e 5 e x v e 1 v ee=(x,y)v1e,,v5eexv1e v e 1 v e 3 v e 3 v e 4 v e 4 v e 5 v e 3 yv1ev2ev1ev3ev3ev4ev4ev5ev3ey

Pour décoder, chaque feuille (sommet de degré 1) dont le voisin a le degré 2 doit être  pour une arête ; son voisin est  et l'autre voisin de  est  .  a un voisin unique qui a à la fois le degré 3 et est adjacent à une feuille: le voisin est  et sa feuille est  (si a deux voisins de feuille, choisissez-en un arbitrairement pour être ). L'autre voisin de est  et l'autre voisin de est  . Restaurer le bord dirigé e = ( x , y ) v e 4 v e 4 v e 3 v e 3 v e 1 v e 2 v e 1 v e 2v5ee=(x,y)v4ev4ev3ev3ev1ev2ev1ev2e x v e 3 y ( x , y ) v e 1 , , V e 5v1exv3ey(x,y) et supprimez les sommets .v1e,,v5e


7

La réponse de David Richerby (qui a été acceptée) est bonne.

J'ai suivi ses instructions sur un exemple de digraphe simple, et j'espère que cela aide quelqu'un.

digraphe a <-> b, c -> a, b -> c

(J'aurais posté cela comme un commentaire sur la réponse de David, mais je n'ai pas les points de réputation requis.)


1
La représentation graphique est une énorme amélioration par rapport à la réponse originale. Merci de l'avoir posté comme réponse et non comme commentaire.
OrangeSherbet

1
Je me sens toujours dépassé lorsque je regarde une explication ou une formule formelle dans un papier mathématique. Je dois juste surmonter cette anxiété et regarder chaque phrase lentement - en regardant les choses vers le haut, je ne suis pas familier au fur et à mesure. Ensuite, je gribouille un exemple comme celui-ci pour être sûr de bien comprendre. À la fin, je suis toujours abasourdi de voir à quel point tout cela a été simple et horrifié de l'effort qu'il m'a fallu pour le comprendre. On dirait que je viens d'une planète différente parfois. Heureux que je puisse vous aider à le comprendre plus rapidement. Une fois que vous le voyez, c'est facile.
William

2

Pour convertir un graphe orienté en un graphe non orienté procédez comme suit:GDG

  1. Numéroter les nœuds deD
  2. Créez deux graphiques non dirigés , sur le même sommet défini commeG GGD
  3. Pour chaque arête , dans ajouter l'arête à si , sinon ajouter l'arête àv D G u < v G uvDGu<vG
  4. G est l'union disjointe de etG GG

Lors de l'union disjointe, il faut veiller à la rendre réversible.

Exemple


C'est une bonne tentative et c'est dans le sens que j'avais en tête pour une réponse, mais cela ne fonctionne pas car l'inverse n'est pas unique. Par exemple, le graphe O <-> OOO sera converti en graphe OO OO OO OO mais ce dernier pourrait aussi provenir du graphe orienté O-> O O-> OOO, donc le processus n'est pas réversible.
Heterotic

J'ai ajouté une photo pour la rendre plus claire.
adrianN

-1

Et la fonction d'identité? C'est-à-dire que chaque digraphe peut être vu comme un graphe bipartite non orienté avec des partitions de taille égale et vice versa.


Je suppose que vous voulez coder le digraphe avec le graphique . Cela ne fonctionne pas car, il ne peut pas gérer les bords bidirectionnels et, si est le résultat de l'inversion de tous les bords dans , alors et ont des codages isomorphes mais ne sont pas nécessairement isomorphes eux-mêmes. G=(V,E)(V×{0,1},{(u,0,v,1)(u,v)E})GGGG
David Richerby

-1

Voici un coup de poignard à ceci:

Remplacez les informations de direction par des sommets supplémentaires dans le graphique non orienté. En d'autres termes, utilisez les sommets supplémentaires dans le graphique non orienté pour "coder" les informations de direction. Par exemple, pour chaque sommet dirigé avec au moins une arête, ajoutez un nombre de sommets non orientés égal à 1 + le nombre d'arêtes "entrantes". Les sommets avec des arêtes nulles restent inchangés.

Pour effectuer la direction inverse, créez un sommet dirigé pour chaque sommet qui a 0 ou plus d'une arête. (Les sommets avec exactement un bord sont les sommets de "codage de direction"). Chaque arête qui relie un autre sommet à arêtes multiples est une connexion dans le graphe orienté. C'est maintenant la partie délicate pour laquelle je ne peux pas expliquer un algorithme (mais je pense qu'il en existe un): Vous devez déduire la direction des flèches étant donné uniquement le nombre de flèches entrantes pour chaque sommet.

Je pense que la partie délicate est un peu comme jouer au dragueur de mines :-) Déterminez où les bombes (bords entrants) reçoivent le nombre de bombes adjacentes pour chaque carré (sommet).


Qu'est-ce qu'un "sommet dirigé"? Dans tous les cas, ce n'est pas uniquement décodable. Supposons qu'un sommet possède un tas de sommets de degré 1, ainsi qu'un tas de sommets d'autres degrés. Comment diriez-vous combien d'entre eux représentent les bords entrants des sommets de degré 1 et combien codent le degré de ? Dans tous les cas, résoudre Démineur est NP-difficile, la solution n'est pas toujours unique et il n'est pas évident qu'elle puisse être résolue du tout lorsque les carrés ne sont pas nécessairement disposés dans une belle grille. xxx
David Richerby

Par "sommet dirigé", je veux dire un sommet dans le graphe orienté (par opposition au graphe non orienté équivalent). Vous pouvez distinguer les arêtes "réelles" des arêtes "à codage de degrés" car seuls les sommets à "codage de degrés" ont une seule arête. C'était la raison du "1 +" dans ma description. Je vais vous croire sur la "partie délicate" du démineur. Je ne sais pas si c'est exactement équivalent au dragueur de mines, mais je peux croire que je n'ai peut-être fait que botter le seau sur la route :-)
Aaron

De plus, je n'ai pas bien compris votre solution lorsque je l'ai lu pour la première fois, mais je vois comment cela fonctionne maintenant. Intelligent!
Aaron

Soit un sommet du graphe d'origine sans arêtes entrantes et exactement une arête sortante. Dans le graphique codé, apparaît comme un sommet avec exactement une arête qui en sort. Comment distinguez-vous ce type de sommet de degré 1 du type de sommet de degré 1 qui code en degrés? xxx
David Richerby

Je pense que c'est "minesweeper-moot" maintenant, mais mon idée était de prendre le bord dirigé et de le convertir en et . Donc aura deux arêtes, pas 1. Tout sommet qui n'a qu'une arête est codé en degrés. a deux sommets de codage de degré, indiquant un degré de 1. Dans cet exemple simple, le décodage est facile parce que nous savons qu'il n'y a que deux sommets, et qu'ils ont respectivement un degré de 0 et 1, donc( x 0 , x ) , ( x , y ) , ( y , y 0 ) ( y , y 1 ) x y ( x , y )(x,y)(x0,x),(x,y),(y,y0)(y,y1)xy(x,y)
Aaron
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.