Graphe de sérialisation
Je suis à la recherche d'un algorithme simple de "sérialiser" un graphe orienté. En particulier, j'ai un ensemble de fichiers avec des interdépendances sur leur ordre d'exécution, et je veux trouver le bon ordre au moment de la compilation. Je sais que cela doit être assez fréquent - les compilateurs de le faire tout le temps mais mon google-fu a été faible aujourd'hui. Quel est le "go-to" de l'algorithme pour cela?
Vous devez vous connecter pour publier un commentaire.
Tri Topologique (Tiré De Wikipedia):
Pseudo-code:
Je m'attends à des outils qui ont besoin de simplement à pied de l'arbre en profondeur d'abord de la manière et quand ils ont frappé une feuille, juste de processus (par exemple, la compilation) et de le supprimer du graphe (ou la marquer comme traitées, et de traiter les nœuds avec toutes les feuilles traitées comme des feuilles).
Tant que c'est un DAG, cette simple basée sur la pile marche devrait être trivial.
Si le graphe contient des cycles, comment peut-il exister permis d'exécution d'ordres pour vos fichiers?
Il me semble que si le graphe contient des cycles, alors vous n'avez pas de solution, et ce
est correctement signalée par l'algorithme ci-dessus.
Je suis venu avec une assez naïfs algorithme récursif (pseudo-code):
Le plus gros problème avec cela est qu'il a pas la capacité de détecter cyclique dépendances - il possible d'aller dans une récursion infinie (c'est à dire de débordement de pile ;-p). Le seul moyen de contourner ce que je vois serait de renverser l'algorithme récursif dans un interative un avec un manuel de la pile, et de vérifier manuellement la pile pour les éléments répétés.
Quelqu'un a quelque chose de mieux?