Je travaille sur un algorithme TopSort modifié et je n'arrive pas à trouver/créer de grands graphes acycliques dirigés (plus de 1000 nœuds) à utiliser pour les tests. J'ai un graphe d'échantillon non orienté provenant d'un autre projet qui est de bonne taille, mais qui comporte plusieurs cycles. Y at-il un algorithme que je pourrais utiliser pour diriger les bords afin qu'il n'y ait plus de cycles?Comment transformer un graphe très cyclique non orienté en un graphe acyclique orienté?
Répondre
Vous cherchez à convertir le graphique en une forêt d'arbres enracinés. faire une traversée de premier plan ou de première en profondeur de chaque composant du graphe. Pendant la traversée, créez un bord dirigé entre les sommets parent-enfant.
this fournit un moyen d'obtenir des graphiques acyclique. Fondamentalement, une traversée de graphe produit un arbre, qui définit un ordre partiel sur les noeuds d'origine. Ensuite, il suffit de diriger toutes les arêtes afin qu'elles pointent dans une direction cohérente selon l'ordre partiel, ou qu'elles soient entre 2 éléments qui ne sont pas ordonnés (ils peuvent pointer dans n'importe quelle direction).
Je n'ai pas tout lu, mais à ma connaissance: la section 2.1 de cet article décrit un moyen de convertir un graphe orienté en DAG (c'est-à-dire des cycles de rupture). Et vous proposez d'ajouter une étape précédente pour convertir le graphique non orienté en graphique orienté en utilisant (tout) la traversée du graphique. –
Pour garantir que le nouveau graphe orienté est connecté, j'utiliserais la recherche par le biais de la méthode Beadth-First comme suit.
old_undirected graph G
new_directed graph D
dequeue Q
v is any node in G
add v to D
Q.push_back(v)
while(Q is not empty):
v = Q.pop_front()
for all neighbors u to v:
if u in D
add edge u->v to D
else
add u to D and add edge v->u to D
Q.push_back(u)
return D
ce graphique doit contenir tous les bords du graphe original mais doit être orientée qu'il n'y aura pas de cercles.
- 1. Comment vérifier si un graphe orienté est acyclique?
- 2. Transposition sur un graphe orienté
- 3. Comment affecter des "niveaux" aux sommets d'un graphe orienté acyclique?
- 4. Comment utiliser un graphe orienté BGL comme un graphe non orienté (à utiliser dans un algorithme de mise en page)?
- 5. Représentation en treillis du graphe non orienté
- 6. algorithme pour un problème de graphe orienté
- 7. Comment implémenter un graphe non orienté dans Ruby on Rails?
- 8. Un seul chemin le plus court d'un graphe acyclique non orienté déconnecté
- 9. Vérification des cycles impairs dans un graphe non orienté
- 10. Suggestions pour KSPA sur un graphe non orienté
- 11. Nœuds feuille de graphe orienté - Prolog
- 12. Travailler avec un graphe orienté utilisant RGL dans Ruby
- 13. Résoudre un graphe de dépendance pour le composant orienté aspect
- 14. Déterminer si un graphe non orienté peut être coloré en utilisant seulement 2 couleurs
- 15. Traverser un graphe non-orienté non-pondéré avec une torsion: visites minimales sur chaque noeud
- 16. Stockage d'un graphe orienté dans google appengine datastore
- 17. Comment modéliser un réseau bayésien ou, plus généralement, un graphe orienté, en SQL?
- 18. algorithme pour traveral BFS d'un graphe orienté de acylic
- 19. Suppression des dépendances de cycle sur un graphe orienté avec bords fixes
- 20. Comment trouver le sommet mère dans un graphe orienté dans O (n + m)?
- 21. Algorithme à usage général pour la triangulation d'un graphe non orienté?
- 22. wireit: visualiser un graphe orienté avec des noeuds qui peuvent contenir des graphiques imbriqués
- 23. algorithme pour trouver le nombre de chemins distincts dans un graphe orienté
- 24. Est-ce que le graphe orienté point autorise les sous-graphes avec un rangdir différent?
- 25. Traverse graphique non orienté dans prolog
- 26. Algorithmes pour la traversée de graphe cyclique dirigée (JavaScript)
- 27. Comment dessiner un graphe orienté avec des étiquettes sur les arêtes en utilisant les bibliothèques quickgraph et graph #?
- 28. Comment calculer le chemin critique d'un graphe acyclique directionnel?
- 29. Extraire un sous-graphe d'un graphe en utilisant JUNG?
- 30. PHP Objet Orienté ou non?
errm .. il n'essaie pas de faire des arbres. il veut diriger chaque bord de sorte que le graphique résultant soit acyclique. et la méthode proposée supprimera certaines arêtes (créant ainsi un arbre). – lijie