De l’arbre généalogique à l’algorithme
Un arbre généalogique est un graphe. Dès qu’on le voit ainsi, vérifier un mode de transmission héréditaire revient à effectuer un seul passage sur les nœuds.
Le problème
Un arbre généalogique est un ensemble de personnes, chacune ayant un sexe et un statut atteint ou non atteint, reliées par des liens parent-enfant. Nous voulons une fonction qui prend un arbre généalogique et renvoie true s’il est compatible avec un mode de transmission donné, ou false si une relation le contredit.
Nous allons parcourir un mode de transmission en particulier : la transmission autosomique récessive. Les cinq autres suivent la même structure, avec une seule règle différente à l’intérieur de la boucle.
La règle
La transmission autosomique récessive nécessite deux copies de l’allèle récessif pour produire le phénotype atteint. Le génotype aa est atteint, AA et Aa ne le sont pas. Une combinaison donne une violation certaine : si les deux parents sont aa, chaque enfant doit aussi être aa, puisqu’aucun des deux parents n’a d’allèle A à transmettre. Un couple atteint avec atteint ayant un enfant non atteint enfreint la règle. Deux parents non atteints ayant un enfant atteint ne l’enfreignent pas : ce sont simplement deux porteurs.
Le code
Représentez chaque personne par un enregistrement avec quatre champs : id, affected, father et mother, où father et mother pointent vers d’autres enregistrements, ou vers nil si l’information est inconnue. Il suffit de visiter chaque personne une fois et de vérifier la règle par rapport à ses parents. L’ordre de parcours n’a aucune importance, puisque la règle ne regarde qu’une personne et ses deux parents immédiats.
- pour chaque person dans people
- father = person.father
- mother = person.mother
- si father == nil ou mother == nil
- continuer // rien à vérifier sans les deux parents
- si father.affected et mother.affected et non person.affected
- renvoyer false
- renvoyer true
Huit lignes, une seule vraie vérification. L’algorithme s’exécute en temps O(n), en un seul passage, avec un travail constant par personne.
Les cinq autres modes de transmission
Même fonction, ligne 6 différente. La transmission récessive liée à l’X vérifie le cas d’un fils atteint avec un père atteint et une mère non atteinte, puisque le chromosome X d’un fils ne vient jamais de son père. La transmission autosomique dominante inverse la règle : la violation est une personne atteinte ayant deux parents non atteints, et non une personne non atteinte ayant deux parents atteints. La transmission liée à l’Y et la transmission mitochondriale ne regardent qu’un seul parent, car ces modes ne proviennent que d’un seul côté.
L’outil exécute chacun de ces six contrôles en un seul passage, puis indique lesquels ont renvoyé true. Lorsque plusieurs modes correspondent, c’est la réponse honnête pour un petit arbre généalogique, pas quelque chose qu’il faut trancher en devinant.
Voir l’implémentation réelle
L’outil exécute exactement cette vérification, ainsi que celles des cinq autres modes de transmission, sur tout arbre généalogique que vous construisez.
Ouvrir l’outil d’arbre généalogiqueSi vous voulez une explication des modes de transmission héréditaire depuis le début, lisez notre article sur les bases de la génétique. Pour un exemple détaillé de transmission récessive liée à l’X dans une maladie réelle, consultez la dystrophie musculaire de Duchenne.