Que d'encombrement inutile! 30 individus mentionnés dans l'extrait du tableau fourni, comportant 22 lignes et 5 colonnes, soit un taux de remplissage égal à 30/110 = 27% ! Et c'est probablement pire pour le tableau complet ...
La liste des individus inscrits selon l'ordre chronologique de la date de naissance, réduite à la mention des ascendants directs (0 pour le père, 1 pour la mère), occuperait un espace mémoire bien moindre et pourrait jouer le même rôle central quand à la recherche des parents et au calcul du taux de consanguinité : une variable tableau
VAR Liste_Asc: ARRAY[1..N, 0..1] OF Word;
se réduirait à (2*N) éléments, tandis que la matrice que tu proposes
VAR Mat_Asc: ARRAY[1..N, 1..N) OF Word;
en comporterait (N2) ... De fait, je me répète (# 7).
Deux remarques concernant les difficultés que tu évoques:

Envoyé par
Gyamotab
J'ai regardé le soft. Il y a effectivement toute la lignée mais le problème est alors de savoir où "couper" car il n'y a pas d'indication générationnelle ...
En théorie, on devrait avoir 5/16 (0.3125). La même problématique se pose en cas de chaîne de caractères comme dans le logiciel. Dans les deux cas, je n'arrive pas à trouver de condition de ségrégation des ancêtres communs à inclure ou non dans le calcul.
Je viens de tomber sur une formule de calcul dans le cas où un ancêtre commun est lui même consanguin. Je vais regarder de ce coté car c'est ce qui fait buguer le calcul. La formule, c'est Cinduite par l'ancêtre(1+Cancêtre).
1) Les nombres d'ascendants et de générations sont nécessairement finis, puisque tout provient du cheptel initial.
2) Il suffit d'ajouter (1/2g1 + 1/2g2 + ... + 1/2gk) pour tout ascendant commun rencontré (k) fois sur des branches indépendantes de l'arbre complet - sans avoir à remonter plus loin (gi > 0 représente l'écart générationnel).
Partager