Ceci est une question de suivi Combinatorics in PythonPython Combinatoire, partie 2
je un arbre ou graphe orienté acyclique si vous voulez une structure:
Où r sont racine nœuds, p sont des nœuds parents, c sont des nœuds enfants et b sont hypothétiques branches. Les nœuds racine ne sont pas directement liés aux nœuds parents, ce n'est qu'une référence.
J'intressted à trouver toutes les combinaisons de branches sous les contraintes:
- Un enfant peut être partagé par un certain nombre de nœuds parents étant donné que ces nœuds parents ne partagent pas le noeud racine.
- Une combinaison valide ne doit pas être un sous-ensemble d'une autre combinaison
Dans cet exemple, seulement deux combinaisons valides sont possibles sous les contraintes:
combo[0] = [b[0], b[1], b[2], b[3]]
combo[1] = [b[0], b[1], b[2], b[4]]
La structure de données est telle que b est une liste d'objets de branche, qui ont les propriétés r, c et p, par exemple:
b[3].r = 1
b[3].p = 3
b[3].c = 2
Avez-vous déjà élaboré un algorithme pour ce faire que vous essayez d'implémenter en Python, ou demandez-vous un algorithme général qui résoudra votre problème? Ou les deux? – katrielalex
@katrielalex - bien, le seul algorithme que je peux penser est de "diviser" la liste des branches où deux branches partagent l'enfant et la racine, mais je ne sais pas comment cela serait efficace. – Theodor
@Theodor quel programme vous utilisez pour faire cela. c'est très propre. – wheaties