Bonjour,
voici mon problème:
J'ai plusieurs séquences voici un exemple des séquences:
Je veux découper chaque sequence en des sous-chaine de taille k et recupérer la position position de chaque sous chaine dans sa séquence id.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 >seq1 ABCDEFGHIJKLMANFJFEJFSADFJSDF >seq2 JGIFJSDGFJSDFJSDOLJFOJDSFOJWERWRWA >seq3 OSDFISDGSJNVSNLQORUEEJREFJERJ
j'ai utilisé une fonction qui retourne une valeur val de chaque sous-chaine et je vais les stockés dans un tableau (de taille N avec N la taille du tableau) suivant leurs valeurs.
pour cela j'ai crée un tableau de liste chainées. Donc chaque noeud de la liste contient cette structure:
voici mon programme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 typedef struct Tnoeud{ char* id; // id du séquence char* kmer; // sous-chaine unsigned int position; //position dans id struct Thash * next; }Tnoeud_t;
J'ajoute à chaque fois dans la tete de la liste pour qu'il ne parcours pas toute la liste est insère le nouveau noeud à la fin (gagner du temps.).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 //... pour les initialisations tout va bien while(fgets(sequence1,TAILLE_MAX, fichier1)!= NULL) // recupère la ligne du fichier de séquences { if(sequence1[0]=='>'){ strcpy(id,sequence1); printf("%s",id); // pour afficher l'id de la séquence } if(sequence1[0]!='>') { for(i=0;i<longseq-k;i++) { strncpy(Kmer,sequence1+i,k); Value= hash(Kmer); //la fonction qui retourne une valeur à partir une sous-chaine de taille k c'est Kmer Value=Value%lenght; TThash[Value]=ajouteteteliste(TThash[Value],id,Kmer,i); // le tableau de liste chainées de taille lenght est TThash } } }
Mon problème est que j'ai enormément de séquence (20000 séquences) et en moyenne la taille des séquences est 40000 caractères.
J'ai essayé d'éxécuter mais à un certain temps le processus s'arrete j'ai cru que c'est un problème de mémoire puisque je vais avoir (20000*40000) noeuds donc le tableau est très grand.
Est ce que vous avec une idée?
Merci
Partager