Bonjour,
J'utilise python pour trouver à partir d'une séquence de départ A contenant plus de 5 000 000 de nucléotides (c'est-à-dire 5 000 000 de lettres qui sont soit A, C, G, T) les sous-régions unique possédant une taille minimum de 20, le tout par rapport à une séquence B de plus ou moins la même taille.
Pour cela, je créé une hashmap<clé, valeur> ayant comme clés toutes les sous-séquences de taille 20 que j'ai dans ma séquence A et comme valeur les positions ou elles ont été trouvée. Ensuite je supprime les doublons par rapport à B.
Pour avoir les régions, il me faut rassembler toutes les valeurs consécutives.
Exemple d'entrées dans ma hashmap:
<"AAAAAAAAAAAAAAAAAAAA", [1555, 18474]>
...
<"CAAAAAAAAAAAAAAAAAAA", [1554]>
...
<"AAAAAAAAAAAAAAAAAAAG", [1556]>
=> on sait que l'on a une region qui est CAAAAAAAAAAAAAAAAAAAAG
Étant donné que je travaille avec de grande quantité de données, les performances peuvent facilement chuter...
Par exemple, au départ j'étais parti sur une idée ou les entrées de ma hashtable auraient comme clé la sous-séquence de taille 20 et comme valeur un vecteur de positions.
<"AAAAAAAAAAAAAAAAAAAA", [1555, 18474]>
Constation, j'ai du remplacer le vecteur de positions par une chaine de caractères:
<"AAAAAAAAAAAAAAAAAAAA", "1555_18474">
Ainsi je passe de + de 300 sec à 7sec!
(pour récupérer les position je split sur "_")
Une autre anomalie que j'ai constaté est que lorsque je veux trier un vecteur de + 3 000 000 d'entrées, je mets plus de 350sec (avec un comparateur que j'ai implémenté : mon_array.sort(monComparateur)).
Comme solution, il est plus rapide de construire une nouvelle hashmap avec 3 000 000 entrées où les clés représentent les indices. Ensuite on incrémente un indice jusque 3 000 000 en testant si la clé existe dans la hashmap. Ainsi je passe à 19sec.
Que pouvez-vous me dire de ces 2 problèmes rencontrés?
Merci