classiquement, tu as une matrice N lignes M colonnes que tu representes comme une liste chainées de N éléments, chacun étant une liste chainées contenant des structures du style :
Code :
- struct element
- {
- int col;
- int ligne;
- double val;
- };
|
Ainsi, la matrice 3000x3000 :
Code :
- [-1 0 0 ... 0 0 1
- 0 0 0 ... 0 0 0
- ...
- 0 0 0 ... 0 0 0
- -1 0 0 ... 0 0 1]
|
est stockée comme une liste chainées de deux éléments (la ligne 0 et la ligne 2999) qui contiennent chacune
deux éléments :
- pour la ligne 0 : {0,0,-1}, {0,2999,1}
- pour la ligne 2999 : {2999,0,-1}, {2999,2999,1}
Faire des opérations la dessus (genre a+b) nécessite de parcourir les éléments des listes des deux matrices
et de vérifier si les éléments correpondent en terme de col/lig et d'éffectuer l'opérations nécessaire. En fonction de l'opérations, il sera pe nécessaire d'ajouter des éléments dans la matrice résultats.
Si tu fais A+B avec A qui contient seulement une ligne non-vide de N éléments et B seulement une colonne non-vide de N éléments, c'est 2N-1 valeurs à stockées dans A+B
Message édité par Joel F le 03-06-2007 à 14:51:56