4 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
24 juil. 2006 à 08:37
24 juil. 2006 à 08:37
Salut.
si tu fait une martice 10^4×10^4, il est clair que tu va avoir des problèmes mémoires.
Une première solution "evidente" est d'optimiser la taille du type de matrice : short à la place d'int, etc.
peut être qu'une matrice de pointeur prendrai moins de place, comme ça tu ne crée pas tout les éléments qui sont nuls, et tu gagne de la place.
Ils sont où tes zéros? réparti, ou tu a une matrice diagonale en block?
si tu fait une martice 10^4×10^4, il est clair que tu va avoir des problèmes mémoires.
Une première solution "evidente" est d'optimiser la taille du type de matrice : short à la place d'int, etc.
peut être qu'une matrice de pointeur prendrai moins de place, comme ça tu ne crée pas tout les éléments qui sont nuls, et tu gagne de la place.
Ils sont où tes zéros? réparti, ou tu a une matrice diagonale en block?
Salut CharSnipeur,
En fais je pense que je viens de trouver la solution: il y a dans la STL une template "map" qui permet d'associer deux types.
Par exemple ici j'aurais
map<int,float> matrice;
matrice[0]=1.5;
matrice[20]=1.687;
Ce qui est super avec les map, c'est que si je fais
float a=matrice[10];
il retourne zero, par ce que je n'ai pas défini l'élément n°10. Donc ça résout parfaitement le problème, à condition que je stocke les éléments de ma matrice "linéairement" (pas de tableau à 2 dimensions), mais ça ne me dérange pas, j'ai déja fait comme ça.
Sinon, j'ai bien pensé à remplacer les double par des float, mais ça prenait encore une place mémoire énorme.
Je vais essayer mon algorithme de résolution matricielle (Gauss) avec les map pour être sûr que ça n'entraîne pas de ralentissement. Si ça ralentit trop, je tenterai ta solution des pointeurs.
A+
En fais je pense que je viens de trouver la solution: il y a dans la STL une template "map" qui permet d'associer deux types.
Par exemple ici j'aurais
map<int,float> matrice;
matrice[0]=1.5;
matrice[20]=1.687;
Ce qui est super avec les map, c'est que si je fais
float a=matrice[10];
il retourne zero, par ce que je n'ai pas défini l'élément n°10. Donc ça résout parfaitement le problème, à condition que je stocke les éléments de ma matrice "linéairement" (pas de tableau à 2 dimensions), mais ça ne me dérange pas, j'ai déja fait comme ça.
Sinon, j'ai bien pensé à remplacer les double par des float, mais ça prenait encore une place mémoire énorme.
Je vais essayer mon algorithme de résolution matricielle (Gauss) avec les map pour être sûr que ça n'entraîne pas de ralentissement. Si ça ralentit trop, je tenterai ta solution des pointeurs.
A+
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
24 juil. 2006 à 16:40
24 juil. 2006 à 16:40
Ok, bonne chance.
Je vien de regarder des aides sur map car je ne m'y suis jamais intéresser.
J'ai l'impression que tu pourrai utiliser map<int[2],float>
ou alors struct pos_mat{unsigned int ligne;unsigned int colonne;...}
puis map<pos_mat,float> matrice.
ensuite matrice[pos_mat(1,10)]=...;
Un point important d'un programme, est de pouvoir le relire facilement.
Je vien de regarder des aides sur map car je ne m'y suis jamais intéresser.
J'ai l'impression que tu pourrai utiliser map<int[2],float>
ou alors struct pos_mat{unsigned int ligne;unsigned int colonne;...}
puis map<pos_mat,float> matrice.
ensuite matrice[pos_mat(1,10)]=...;
Un point important d'un programme, est de pouvoir le relire facilement.