J'ai implémenté un tri topologique basé sur l'article Wikipedia que j'utilise pour la résolution des dépendances, mais il renvoie une liste linéaire. Quel type d'algorithme puis-je utiliser pour trouver les chemins indépendants?
J'ai implémenté un tri topologique basé sur l'article Wikipedia que j'utilise pour la résolution des dépendances, mais il renvoie une liste linéaire. Quel type d'algorithme puis-je utiliser pour trouver les chemins indépendants?
Réponses:
Je suppose qu'un bord signifie que u doit être exécuté avant v . Si ce n'est pas le cas, retournez tous les bords. Je suppose en outre que vous êtes moins intéressé par les chemins (ceux déjà fournis par le DAG) que par une bonne stratégie d'exécution compte tenu des dépendances.
for i=0 to k
parallel foreach T in S_k
execute T
parallel foreach T in S_0
recursive_execute T
où
recursive_execute T {
atomic { if T.count++ < T.indeg then return }
execute T
parallel foreach T' in T.succ
recursive_execute T'
}
et T.count
est un simple compteur contenant le nombre de prédécesseurs T
déjà exécutés, T.indeg
le nombre de prédécesseurs et T.succ
l'ensemble des successeurs.