
Envoyé par
bacelar
La solution de @stendhal666 ne fonctionne pas parce que l'indice de démarrage du remplacement n'est pas strictement croissant.
@white_tentacle a parfaitement expliqué la solution, de manière bien plus simple que je ne l'aurais fait.
Bin non, si tu a un décalage qui vient en début de chaine, il y aura la valeur du décalage dans la map à un indice faible.
Et lors du calcul du décalage sur le nouveau remplacement, ce décalage sera ajouter systématiquement si l'indice de démarrage du nouveau remplacement est supérieur à l'indice/clé de la map (indice de démarrage du remplacement ayant provoqué ce décalage).
"ATTTAAGTGCCTGGGCCCCTTTGGAACCGTTTAAACCGTTGTGTGGTGTTGAAATTTTTT" => 60 de long
on ajoute dans la map {3,-2821}
Donc si un remplacement commence après l'indice 3, on soustrait 2821 à l'indice de départ.
On calcul le vrai indice de départ :
8547 + (-2821) = 5726
On remplace donc la chaine commençant à 5726 de longueur 10456 par "CTTGCTTAACCGTTGGCCCGGGGGGGGGAAACGTGTGTGTGTAAAACCCCCCCTGGGAAAAA" (62 de long)
10456 - 62 = 10394
on ajoute dans la map {8547,-10394}
Donc si un remplacement commence après l'indice 3, on soustrait 2821 à l'indice de départ.
et si un remplacement commence après l'indice 8547, on soustrait 10394 à l'indice de départ.
On calcul le vrai indice de départ :
4498 + (-2821) = 1677
On n'utilise pas l'offset en "8547" car il est supérieur à 4498.
On remplace donc la chaine commençant à 1677 de longueur 6926 par "GTGGGTTCCCAAAACGTTGGGCCACACACACACAGGGGGGGGGGTTTGGGGGGCCCCACCC" (61 de long)
on ajoute dans la map {4498,(-6926+61)}
Donc si un remplacement commence après l'indice 3, on soustrait 2821 à l'indice de départ.
si un remplacement commence après l'indice 4498, on soustrait 6865 à l'indice de départ.
et si un remplacement commence après l'indice 8547, on soustrait 10394 à l'indice de départ.
etc....
Bon, on pourra pas vous faire cette transformation à votre place, surtout que vous ne dite rien des règles qui président à cette "élimination".
S'il n'y plus de chevauchement, l'ordre des remplacements n'est plus contraignant, on peut donc réordonner ces remplacements et donc ordonner correctement ces remplacement pour que l'algorithme de @stendhal666 fonctionne.
Partager