J'utilise l'algorithme de Lengauer et Tarjan avec compression de chemin pour calculer l'arbre dominateur pour un graphe où il y a des millions de nœuds. L'algorithme est assez complexe et je dois admettre que je n'ai pas pris le temps de bien le comprendre, je l'utilise juste. Maintenant, j'ai besoin de calculer les arbres dominateurs des enfants directs du nœud racine et éventuellement recurrencer le graphique à une certaine profondeur en répétant cette opération. C'est à dire. Quand je calcule l'arbre dominateur pour un enfant du nœud racine, je veux prétendre que le nœud racine a été retiré du graphique.Un moyen efficace de calculer récursivement l'arbre dominateur?
Ma question est de savoir s'il existe une solution efficace qui utilise des informations dominantes immédiates déjà calculées dans l'arbre dominateur initial pour le nœud racine? En d'autres termes, je ne veux pas partir de zéro pour chacun des enfants parce que tout le processus prend beaucoup de temps. Naïvement, il semble que cela doit être possible car il y aura beaucoup de nœuds en profondeur dans le graphique qui ont des idoms juste un peu au-dessus d'eux et ne sont pas affectés par les changements en haut du graphique.
BTW à part: il est bizarre que le sujet des arbres dominateurs soit "détenu" par les compilateurs et il n'y a aucune mention de cela dans les livres sur la théorie classique des graphes. L'application pour laquelle je l'utilise - mon analyseur de tas java FindRoots - n'est pas liée à la théorie du compilateur. Clarification: Je parle de graphiques dirigés ici. La "racine" à laquelle je me réfère est en fait le nœud ayant la plus grande accessibilité. J'ai mis à jour le texte ci-dessus en remplaçant les références à "arbre" par "graphique". J'ai tendance à penser à eux comme des arbres parce que la forme est principalement comme des arbres. Le graphique est en fait des objets dans un tas Java et comme vous pouvez l'imaginer est raisonnablement hiérarchique. J'ai trouvé l'arbre dominateur utile lors de l'analyse des fuites du MOO, car ce qui vous intéresse est "qu'est-ce qui maintient cet objet en vie?" et la réponse est finalement son dominateur. Dominator arbres vous permettent de voir le bois plutôt que les arbres. Mais parfois, beaucoup de jonques flottent au sommet de l'arbre, de sorte que vous avez une racine avec des milliers d'enfants directement en dessous. Pour de tels cas, je voudrais expérimenter avec le calcul des arbres dominateurs enracinés à chacun des enfants directs (dans le graphe original) de la racine et puis peut-être aller au niveau suivant et ainsi de suite. (J'essaie de ne pas m'inquiéter de la possibilité de liens de retour pour l'instant :)
Oui, cela peut aider, merci. Je m'inquiète cependant de l'autre partie de l'algorithme qui prend normalement le même ordre de temps que le dfs mais qui est parfois pire (et c'est pourquoi vous avez certainement besoin de la compression du chemin). –