Un graphique mixte est un graphique qui peut avoir à la fois des bords orientés et non orientés. Son graphe non orienté sous-jacent est obtenu en oubliant les orientations des arêtes dirigées, et dans l'autre sens, une orientation d'un graphe mixte est obtenue en affectant une direction à chaque arête non orientée. Un ensemble d'arêtes forme un cycle dans un graphique mixte s'il peut être orienté pour former un cycle dirigé. Un graphique mixte est acyclique si et seulement s'il n'a pas de cycles.
Tout cela est standard et de nombreux articles publiés mentionnent des graphiques mixtes acycliques. Il faut donc connaître l'algorithme suivant pour tester l'acyclicité des graphes mixtes:
Répétez les étapes suivantes:
- Supprimez tout sommet sans arêtes dirigées entrantes et sans arêtes non dirigées incidentes, car il ne peut faire partie d'aucun cycle.
- Si un sommet n'a pas d'arêtes dirigées entrantes mais qu'il a exactement une arête non orientée incidente, tout cycle utilisant l'arête non dirigée doit arriver sur cette arête. Remplacez le bord non dirigé par un bord dirigé entrant.
Arrêtez lorsque plus aucune étape ne peut être effectuée. Si le résultat est un graphe vide, alors le graphe d'origine doit nécessairement avoir été acyclique. Sinon, à partir de n'importe quel sommet restant, on peut revenir en arrière dans le graphique, à chaque étape suivant en arrière à travers un bord entrant ou en suivant un bord non orienté qui n'est pas celui utilisé pour atteindre le sommet actuel, jusqu'à voir un sommet répété. La séquence d'arêtes suivie entre la première et la deuxième répétition de ce sommet (dans l'ordre inverse) forme un cycle dans le graphique mixte.
L'article de Wikipedia sur les graphiques mixtes mentionne les graphiques mixtes acycliques mais ne mentionne pas comment les tester, donc je voudrais y ajouter quelque chose à propos de cet algorithme, mais pour cela j'ai besoin d'une référence publiée. Quelqu'un peut-il me dire où il (ou tout autre algorithme pour tester l'acyclicité) apparaît dans la littérature?
la source
Réponses:
Trouver des cycles mixtes dans un graphe mixte équivaut à trouver des cycles dirigés élémentaires (de longueur> = 3) dans le graphe dirigé correspondant. Le graphique dirigé correspondant est obtenu à partir du graphique mixte en remplaçant chaque bord non dirigé par deux bords dirigés pointant dans des directions opposées. Preuve: (1) Chaque cycle élémentaire dirigé (de longueur> = 3) dans le digraphe correspond directement à un cycle mixte dans le graphique mixte. (2) Chaque cycle mixte dans le graphique mixte contient un cycle mixte élémentaire de longueur> = 3, et chaque cycle de ce type correspond directement à un cycle élémentaire dirigé (de longueur> = 3) dans le graphique dirigé. (1) et (2) prouvent ensemble les deux directions de la déclaration, qed. Nous recherchons donc des références pour calculer (tous?) Des cycles élémentaires (de longueur> = 3) dans un graphe orienté.
Les commentaires indiquent que cs.stackexchange contient des réponses à cette question, mais il n'est pas clair comment organiser les résultats en une réponse concise. Ce billet de blog semble résumer joliment les (les plus?) Références importantes:
Le test d'acyclicité lui-même semble être facile: calculez les composants fortement connectés du graphique. Tout cycle (élémentaire) est entièrement contenu dans un composant fortement connecté. Un composant fortement connecté contient un cycle élémentaire si ce n'est pas un arbre non orienté.
L'algorithme proposé par David Eppstein calcule en outre un cycle élémentaire comme preuve, et les algorithmes ci-dessus énumèrent tous les cycles élémentaires. Tout sommet ou bord non contenu dans un cycle élémentaire pourrait être supprimé comme étape de prétraitement pour améliorer la vitesse des algorithmes ci-dessus. L'algorithme de David Eppstein pourrait être utilisé à cette fin, mais même s'il n'est utilisé que sur les composants fortement connectés, il ne supprimera pas tous les sommets ou arêtes possibles qui peuvent être supprimés. Mais même s'il pourrait être étendu pour ce faire (le calcul de l' arbre de coupe en bloc permet au moins de supprimer tous les sommets possibles qui peuvent être supprimés), il n'est pas clair si cela améliorerait vraiment la vitesse des algorithmes ci-dessus.
la source