Arbre généalogique
Découvrir Ouvrir l’outil
Méthodologie

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.

EST-COMPATIBLE-AVEC-AR(people)
  1. pour chaque person dans people
  2. father = person.father
  3. mother = person.mother
  4. si father == nil ou mother == nil
  5. continuer // rien à vérifier sans les deux parents
  6. si father.affected et mother.affected et non person.affected
  7. renvoyer false
  8. 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éalogique

Si 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.

← Bases de la génétique Dystrophie musculaire de Duchenne →