Voici la réponse théorique du graphique et la réponse du programmeur. Je suppose que vous pouvez gérer la partie programmeurs vous-même. Pour le graphique theorethical réponse:
- Un DAG est un ensemble de modules où il ne se produit jamais que A besoin B, et en même temps, B (ou l'un des modules besoins B) a besoin A, Modules- speak: pas de dépendance circulaire. J'ai vu des dépendances circulaires (recherchez des exemples sur les forums Gentoo), donc vous ne pouvez même pas être sûr à 100% que vous avez un DAG, mais supposons que vous l'ayez fait. Il n'est pas très difficile de vérifier les dépendances circulaires, donc je vous recommande de le faire quelque part dans votre chargeur de module.
- Dans un arbre, quelque chose qui ne peut jamais arriver est que A dépend de B et C et que B et C dépendent de D (un diamant), mais cela peut arriver dans un DAG.
- En outre, un arbre a exactement un nœud racine, mais un DAG peut avoir plusieurs nœuds "racine" (c'est-à-dire des modules dont rien ne dépend). Par exemple un programme comme GIMP, le programme GIMP sera le nœud racine de l'ensemble des modules, mais pour GENTOO, presque n'importe quel programme avec une GUI est un nœud "racine", alors que les bibliothèques etc. en dépendent. (IE et Konqueror à la fois Kmail dépendent Qtlib, mais rien ne dépend de Konqueror, et rien ne dépend de Kmail)
Le graphique theorethical répondre à votre question, comme d'autres l'ont souligné, est qu'un DAG ne peut pas être converti à un arbre, alors que chaque arbre est un DAG.
Cependant, (les programmeurs de haut niveau répondent) si vous voulez l'arbre pour les représentations graphiques, vous êtes seulement intéressé par les dépendances d'un module spécifique, pas ce qui dépend de ce module. Permettez-moi de donner un exemple:
A depends on B and C
B depends on D and E
C depends on D and F
Je ne peux pas le montrer comme un arbre art ASCII, pour la simple raison que cela ne peut être converti en un arbre. Cependant, si vous voulez montrer ce que A dépend, vous pouvez afficher ceci:
A
+--B
| +--D
| +--E
+--C
+--D
+--F
Comme vous le voyez, vous obtenez des entrées doubles dans votre arbre - dans ce cas, « seulement » D mais si vous faites un " expand tout "sur l'arbre Gentoo, je vous garantis que votre arbre aura au moins 1000 fois plus de nœuds que de modules. (il y a au moins 100 paquets qui dépendent de Qt, donc tout dépend de Qt sera présent au moins 100 fois dans l'arbre).
Si vous avez un arbre "grand" ou "complexe", il est préférable de développer l'arborescence de manière dynamique, pas à l'avance, sinon vous risquez d'avoir un processus très gourmand en mémoire.L'inconvénient de l'arbre ci-dessus est que si vous cliquez sur ouvrir B, alors D, vous voyez que A et B dépendent de D, mais pas que C dépend aussi de D. Cependant, selon votre situation, cela peut ne pas être important du tout - si vous maintenez une liste de modules chargés, en chargeant C vous voyez que vous avez déjà chargé D, et ce n'est pas grave ce n'était pas chargé pour C, mais pour B. Il est chargé, c'est tout c'est important. Si vous gérez dynamiquement ce qui dépend directement d'un certain module, vous pouvez également gérer le problème inverse (déchargement). Cependant, ce que vous ne pouvez pas faire avec un arbre est ce qui est dans votre dernière phrase: préserver l'ordre topologique, c'est-à-dire si B est chargé dans le même conteneur que C, vous ne pourrez jamais charger C dans le même conteneur ainsi que. Ou vous pourriez être mis en place avec tout mettre dans un conteneur (pas que je comprends parfaitement ce que vous entendez par "chargement dans le même conteneur")
Bonne chance!
comment voulez-vous faire face à des diamants ... A -> B, A -> C, B & C -> D – ShuggyCoUk
C'est une bonne question, je vois un problème, mais je ne sais pas comment le résoudre, ce qui serait tu fais? Mon expérience avec la théorie des graphes est très limitée. –
Vous soit 1) choisir le premier, 2) choisir les 3 derniers) dupliquer le nœud. Le plus approprié dépend entièrement de l'application, 3 est le plus facile suivi de 1 suivi de 2 ... il est difficile de dire ce que vous voulez pour l'arbre en fonction de la question. les dépendances de diamant sont une chienne en général – ShuggyCoUk