INFO : matrices creuses

INFO : matrices creuses - Algo - Programmation

Marsh Posté le 29-07-2003 à 01:03:06    

Imaginez le problème suivant.
 
Vous devez stocker une matrice de 100000 x 100000 enregistrements.
 
De plus, vous savez d'avance, que le 90% de cette matrice contiendra un 0.
 
ça peut paraître bizzare comme concept, mais c'est fréquemment utilisé en Biologie.  
 
Comment pallier à ce problème ?
 
En créant un vecteur (ou tableau) de taille 100000.
Les indices de ce derniers pointeront vers une file de structures.
 
Pour finir, la structure contiendra : l'indice, et la valeur (si celle-ci est différente de 0 bien sûr)
 
Gain de place très important, mais accès aux données fortement ralenti (addition de matrice, recherche, etc...)
 
 
 
 
 
 


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 29-07-2003 à 01:03:06   

Reply

Marsh Posté le 29-07-2003 à 01:12:01    

flag
 
mais sinon la solution que tu proposes est vivable, maintenant reste a savoir si ca vaut la peine de sauver cet espace au détriment de la vitesse


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 29-07-2003 à 01:16:40    

Oui faut pas sauter sur cette soluce à la première occase on est bien d'accord. Mais c'est utilisé en tout cas dans certain cas. Car l'accès est tout de même assez rapide si la matrice est quasi vide


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 29-07-2003 à 01:17:21    

http://www-igm.univ-mlv.fr/~beal/E [...] rices.html


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 29-07-2003 à 01:20:37    

jaime pas le dessin  :lol:  
 
http://www-igm.univ-mlv.fr/~beal/Enseignement/Polytechnique/Td4/representation.gif


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 29-07-2003 à 01:21:43    

ou c'est assez flou je trouve. Je prèfère mon explication


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 29-07-2003 à 01:42:53    

le dessin est correcte et la solution OK. mais essaye plutot avec une std::map si tu fais ça en C++

Reply

Marsh Posté le 29-07-2003 à 01:46:30    

Taz a écrit :

le dessin est correcte et la solution OK. mais essaye plutot avec une std::map si tu fais ça en C++


 
explique? quest-ce que ca fait?
 
(mes cours de c remonte à longtemps et jpeux pratiquement dire quon a rien vu sauf comme faire des boucles et le minimum d'objet)


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 29-07-2003 à 01:58:34    

ou dans une hasmap. pas besoin de tout se cogner. il existe déjà des implémentations à base d'arbres ou de table de hashage.
 
apres tu accedes à tes éléments
 
map< pair<unsigned, unsigned>, double> matrice;
 
matrice[pair(0, 0)]; //par exemple
 
tu peux meme wrapper autour si tu veux paremeter la valeur par défaut de retour
 
documenter vous sur les maps, apres je ne saurais pas dire si l'implémentation non ISO sous forme de  hashmap fournit par SGI est plus performante. elle est relativement compatible avec std::map, donc egalement, on wrappe tout ça et on fait des tests pour voi

Reply

Marsh Posté le 29-07-2003 à 01:59:25    

bien sur à implémenter comme montre Jag, c'est pas la mer à boire non plus

Reply

Marsh Posté le 29-07-2003 à 01:59:25   

Reply

Marsh Posté le 29-07-2003 à 02:00:56    

Taz: t un gourrou du C/C++? ou t dans la moyenne?
 
car le 3/4 des trucs que tu lances j'piges rien :D


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 29-07-2003 à 02:03:20    

  [:spamafote] demande, je suis pret à vous aider à fond sur ce truc.
 
pour l'implémentation à la main, on va mettre en pratique nos templates, se poser la question si la taille de la matrice est connue à la compilation.
enfin je sens que ça va partir en std::list< std::vector <double> > >

Reply

Marsh Posté le 29-07-2003 à 02:06:54    

std::list< std::vector <double> > >  
 
rofl, c con mais dans le peu de c que jai fait jai jamais vu ce genre de truc
 
une chance que jai fait du perl un peu et jpige le std::list, mais pour les reste jcrois que jai beaucoup de théorie à faire :D
 
sérieusement présentement jfais un peu de tout, perl de base, php, web, rexx, jai deja fait du c, du progress, vb6( :lol: )
 
tjrs pas de java et mon c/c++ est pas très poussé mais jveux l'améliorer parce que jai possibilité de me brancher les pieds dans une boite de jeu pour mes stages et j'suis plutot quelqu'un pro-optimisation alors codé en couillon ca me tente pas trop


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 29-07-2003 à 02:14:37    

ben tu crois que je me suis démené pour vous faire des petits topics aujourd'hui pour rien?

Reply

Marsh Posté le 29-07-2003 à 02:15:00    

burger je te rassure. Taz est un gourou. T'es pas le seul à pas tout capter  :p


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 29-07-2003 à 02:15:59    

Taz a écrit :

ben tu crois que je me suis démené pour vous faire des petits topics aujourd'hui pour rien?


 
Oui chapeau les topics. ça relève le niveau parce que des fois...


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 29-07-2003 à 02:16:30    

Taz a écrit :

ben tu crois que je me suis démené pour vous faire des petits topics aujourd'hui pour rien?


 
justement, jviens den lire quelques uns, du genre le pré-incrémentation et post-incrémentation
 
jcomprends ton exemple, mais l'appliquer dans un cas concret j'en serait incapable :D


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 29-07-2003 à 02:17:05    

JagStang a écrit :

burger je te rassure. Taz est un gourou. T'es pas le seul à pas tout capter  :p  


 
ouf :D
 
jcrois que jvais m'arranger pour etre copaing copaing avec Taz :D


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 29-07-2003 à 02:24:58    

burgergold a écrit :


 
justement, jviens den lire quelques uns, du genre le pré-incrémentation et post-incrémentation
 
jcomprends ton exemple, mais l'appliquer dans un cas concret j'en serait incapable :D

ben peut etre un jour tu vas décrire un type de donner qui a une arithmétique. Jag travaille sur des matrices. on peut tres bien prévoir une sémantique m+=x incrémente tous les éléments de la matrice de x. donc pour des raccourcis, on veut ecrire m++ et ++m.
 
tu la sens la copie inutile là?

Reply

Marsh Posté le 29-07-2003 à 02:36:07    

jcapte pas mais fait toi en pas, p-e que d'ici 1 an jvais comprendre :D
 
deja que jsavais pas que ca se faisait ++m
 
sémantique ? j'ai deja eu des problemes de semaphore sur linux, jconsidere que c par rapport à l'allocation mémoire


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 29-07-2003 à 02:38:18    

burgergold a écrit :

jcapte pas mais fait toi en pas, p-e que d'ici 1 an jvais comprendre :D
 
deja que jsavais pas que ca se faisait ++m
 
sémantique ? j'ai deja eu des problemes de semaphore sur linux, jconsidere que c par rapport à l'allocation mémoire

la sémantique n'a rien à voir avec les sémaphores qui n'ont rien à voir avec l'allocation mémoire qui n'a rien à voir avec la sémantique....
 
 
tu as eu ton bac de français??? ouvre ton dico    [:tomtom75]  :D

Reply

Marsh Posté le 29-07-2003 à 02:39:13    

Taz a écrit :

la sémantique n'a rien à voir avec les sémaphores qui n'ont rien à voir avec l'allocation mémoire qui n'a rien à voir avec la sémantique....
 
 
tu as eu ton bac de français??? ouvre ton dico    [:tomtom75]  :D  


 
ouais bin jsuis au québec moi, et c pas un mot très utilisé :D


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 29-07-2003 à 02:45:49    

Sémantique -> relatif au sens d'un mot, ou d'une unité linguistique. par extension, on parle donc de sméantique dans les langages informatiques. ça se rapporte à l'interprétation et à la signification. la sémantique donne du sens à la synthaxe.


Message édité par Taz le 29-07-2003 à 02:46:27
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed