tableau à 2 dimensions sans initialisation? - Java - Programmation
Marsh Posté le 01-07-2003 à 15:27:07
Cherche des algo sur les matrices creuses.
Marsh Posté le 01-07-2003 à 15:33:29
pkoi pas une Map de Map ?
1ere Map : Integer (num de ligne) -> Map
2e Map : Integer(numéro de colone) -> Object
Code :
|
en faisant bien attention d'initialiser tes Map avec une petite capacitée initiale ...
Marsh Posté le 01-07-2003 à 15:33:59
remarque : c'est une implémentation simple des matrice creuses de Leto
Marsh Posté le 01-07-2003 à 15:35:53
LetoII a écrit : Cherche des algo sur les matrices creuses. |
Je me suis peut-être mal exprimé.
Le problème vient du fait que je ne peux pas utiliser un tableau [][] a deux dimensions car je ne peux pas l'initialiser.
Je pourrai alors utiliser un vector de Vector mais certaines lignes ne contiennent que très peu d'élément (souvent un seul) et il est couteux en mémoire/temps de créer un Vector pour y mettre qu'un seul élement.
Je voudrais donc savoir s'il y avait un autre moyen (autre moyen de stockage, Classe java, ...) pour pouvoir sauvegarder une telle "matrice".
Marsh Posté le 01-07-2003 à 15:36:21
benou a écrit : remarque : c'est une implémentation simple des matrice creuses de Leto |
yep
Marsh Posté le 01-07-2003 à 15:37:43
pilou50 a écrit : |
C ce que je dit, t'as une matrice creuse à gérer en mémoire.
Marsh Posté le 01-07-2003 à 15:39:10
LetoII a écrit : |
Très bien. Je vais regarder Map.
Marsh Posté le 01-07-2003 à 15:39:12
LetoII a écrit : |
et j'ai donné un exemple de la façon dont tu pouvait la faire en quelques lignes de code ...
Marsh Posté le 01-07-2003 à 15:57:36
benou a écrit : |
Ok. J'ai regardé.
C'est identique à Vector pour ce que je veux faire. Je ne vois pas l'avantage.. Map est moins lourd que Vector ?
Marsh Posté le 01-07-2003 à 16:10:38
pilou50 a écrit : |
euh tu peux expliquer?
Marsh Posté le 01-07-2003 à 16:20:36
DarkLord a écrit : |
Pour faire ma matrice, je pourrai utiliser une Map de Map, comme l'a suggérée benou, mais aussi je pourrai utiliser un Vector de Vector. Dans les deux cas je résouds le probleme de l'initialisation de la taille max de ma matrice.
Mais vaut-il mieux utiliser une Map de Map, un Vector de Vector, ou autre chose peut-etre ?
Marsh Posté le 01-07-2003 à 17:07:29
ben essaye déjà de comprendre la différence entre une Map et un Vector. parce que NON c'est pas pareil.
une Map ca permet d'associer 2 objets : un objet clef et un objet valeur. La clef permet de retrouver la valeur.
Un Vector, c'est comme un tableau de taille de variable.
Marsh Posté le 01-07-2003 à 17:11:27
benou a écrit : Un Vector, c'est comme un tableau de taille de variable. |
Et j'ajouterais : un Vector implémente l'interface List. Or, List et Map sont deux interfaces bien distinctes et bien différentes dans leur comportement.
Mate la javadoc et quelques exemples, tu comprendras mieux les différences.
Marsh Posté le 01-07-2003 à 17:33:46
Code :
|
J'ai bien compris le principe clé => valeur de Map mais je ne vois pas en quoi c'est une solution à mon problème.
Dans mon cas, je peux aussi utiliser Vector (mais je n'ai jamais dit c'était pareil que Map). Tu es d'accord?
Code :
|
J'ai l'impression que je n'ai pas saisi quelquechose, à moins que j'ai mal expliqué le problème.
Marsh Posté le 01-07-2003 à 19:07:39
quand tu fais this.matrice.get(i); dans un vecteur, ton vecteur doit avoir au moins une taille de i => il prend bcp de place.
quand tu fais this.matrice.get(new Integer(i)); sur une map, elle ne contient que les quelques éléments non-vide de la ligne
prenons un exemple :
voici une ligne (les 0 c'est des trucs vides):
(0 0 0 0 0 A 0 0 0 0 0 0 0 0 0 B 0)
{0, 0, 0, 0, 0, A, 0, 0, 0, 0, 0, 0, 0, 0, 0, B, 0, 0, 0, 0, 0)
pour ne rien arranger, il gardera de la place "en plus" à la fin pour pouvoir s'aggrandir ... => ca prend bcp de place mémoire
{(5 - A), (15 - B)}
Donc ca prend bcp moins de place mémoire dans le cas où le nombre de vide est grand. bien sûr, si il n'y a quasiment pas de vide, ca perndra plus de place qu'un bête tableau
compris ?
Marsh Posté le 01-07-2003 à 19:40:41
Marsh Posté le 02-07-2003 à 17:19:28
Pour clore ce thread :
Beaucoup de lignes de ma matrice ne possèdent qu'un seul objet, ET CET OBJET EST TOUJOURS SITUE AU DEBUT DE CHAQUE LIGNE. Il n'y a pas par conséquent de "trou", i.e. pas d'objet situé après une case vide.
Je m'étais mal exprimé ce qui explique ce dialogue de sourd.
Ceci étant, Benou m'a répondu en pv et je vais suivre son conseil en utilisant une ArrayList.
Merci à ceux qui m'ont aidé. La prochaine fois, j'essaierai d'être plus clair dès le début.
@ +
Marsh Posté le 03-07-2003 à 11:44:12
benou a écrit : |
Tu simplifie beaucoup... tout depend de l'initialisation de ton map (qui n'est pas vide comme tu sembles l'indiquer), etc... Une map est simplement un "double vecteur", donc tu perds beaucoup de place ainsi tant pour les vecteurs que pour les objets clef (perte probablement inutile si les clefs sont des entier). Au niveau de la recherche d'elements , il perdre perdre enormement de temps avec une map (creation d'objets, recherche d'egalite sur les clefs, etc...)
Perso j'utiliserais une hashtable de hashtables maison optimisees(pas les trucs fournis par java.util), mais un vecteur de vecteurs peut etre largement suffisant.
Bref il faut voir ce qui est le plus important : vitesse d'insertion, d'extraction, place memoire, etc...
Le mieux est que tu fasse des benchmarks et que tu prennes les situations extremes et essayes de trouver un compromis (tu fais comme moi : tu te fais ta structure de donnees sur mesure)
Marsh Posté le 03-07-2003 à 12:51:17
Kahyman a écrit : |
C'est Kahyman pareil.
Marsh Posté le 03-07-2003 à 14:27:39
Kahyman a écrit : |
1) j'ai déjà parlé de l'initialisation des Map
2) j'ai déjà indiqué qu'il gagnait de la place que si sa matrice creuse était bien creuse
3) je lui propose une solution qui se code en 3 minutes. bien sûr, en recodant totu à la main et en optimisant pour son problème ca ira plus vite
4) son problème est déjà réglé.
Marsh Posté le 03-07-2003 à 14:59:38
benou a écrit : |
5) tu n'as pas besoin de me prendre de haut... (tu te prends pour qui ?)
Tu indiques certaines choses, mais tu ne les explique pas toujours. Maintenant si tu pense ne pas avoir trop simplifie les choses et donc qu'il a compris ou se trouve la recherche de compromis entre Map et Vecteur / Arraylist tant mieux.
Pour finir : un probleme regle ne signifie pas que la discussion soit close, et une solution codee en 3 minutes n'est pas forcement la bonne.
Marsh Posté le 03-07-2003 à 15:08:09
Kahyman a écrit : |
je me suis dit la même chose en lisant ton mail ...
si tu veux apporter des précisions à ce que je dis, fait le, pas de problème, mais critique pas ce que je fais.
Marsh Posté le 03-07-2003 à 16:57:09
benou a écrit : |
J'ai critique ta solution a quel moment ? Quand t'ai-je critique personnellement ? Tu simplifie beaucoup, oui, j'ai donc mis en avant les points auxquels il faut faire attention AMHA.
Si tu trouve une seule de mes phrases qui signifie "benou c'est un con qui ne sait pas ce qu'il fait et qui propose n'importe quoi" fais moi signe je te presenterai des excuses.
La personne agressive c'est toi, pas moi.
Marsh Posté le 03-07-2003 à 17:16:48
Ce que j'ai pas aprécié c'est "tu simplifies beaucoup" (t'expliques mal, quoi) suivit de choses dont j'avais déjà parlé (point 1 et 2).
Et je n'ai jamais voulu te prendre de haut. J'ai juste répondu sur le même ton que j'avais ressentit dans ton post.
on va en rester là si tu le veux bien. le sujet était déjà clos.
Marsh Posté le 01-07-2003 à 15:25:48
Bonjour,
Je dois représenter un tableau à 2 dimensions contenant exclusivement le même type d'objet MyObject.
Le problème est que je ne connais pas la taille de mon tableau (ni en hauteur, ni en profondeur).
Est-ce que je peux utiliser une autre source de stockage (Vector, List ..) ? Le problème est que beaucoup de lignes de mon tableau ne possède qu'un seul objet. Il serait donc couteux de faire un Vector de Vector par exemple. A moins que je n'ai pas le choix ?
Merci pour vos conseils.