problème de mémoire d'un programme
Bonjour,
voici mon problème:
J'ai plusieurs séquences voici un exemple des séquences:
Code:
1 2 3 4 5 6
| >seq1
ABCDEFGHIJKLMANFJFEJFSADFJSDF
>seq2
JGIFJSDGFJSDFJSDOLJFOJDSFOJWERWRWA
>seq3
OSDFISDGSJNVSNLQORUEEJREFJERJ |
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.
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:
Code:
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; |
voici mon programme:
Code:
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
}
}
} |
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.).
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