tableau à 2 dimensions sans initialisation?

tableau à 2 dimensions sans initialisation? - Java - Programmation

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.

Reply

Marsh Posté le 01-07-2003 à 15:25:48   

Reply

Marsh Posté le 01-07-2003 à 15:27:07    

Cherche des algo sur les matrices creuses.


---------------
Le Tyran
Reply

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 :
  1. public get(int i, int j) {
  2.    Map line = (Map) this.matrice.get(new Integer(i));
  3.    if (line == null) {
  4.       return null;
  5.    }
  6.    return line.get(new Integer(j));
  7. }


 
en faisant bien attention d'initialiser tes Map avec une petite capacitée initiale ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 01-07-2003 à 15:33:59    

remarque : c'est une implémentation simple des matrice creuses de Leto [:benou_jap]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

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".

Reply

Marsh Posté le 01-07-2003 à 15:36:21    

benou a écrit :

remarque : c'est une implémentation simple des matrice creuses de Leto [:benou_jap]


yep  :jap:


---------------
Le Tyran
Reply

Marsh Posté le 01-07-2003 à 15:37:43    

pilou50 a écrit :


 
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".


 
C ce que je dit, t'as une matrice creuse à gérer en mémoire.


Message édité par LetoII le 01-07-2003 à 15:37:56

---------------
Le Tyran
Reply

Marsh Posté le 01-07-2003 à 15:39:10    

LetoII a écrit :


 
C ce que je dit, t'as une matrice creuse à gérer en mémoire.


 
Très bien. Je vais regarder Map.

Reply

Marsh Posté le 01-07-2003 à 15:39:12    

LetoII a écrit :


C ce que je dit, t'as une matrice creuse à gérer en mémoire.


et j'ai donné un exemple de la façon dont tu pouvait la faire en quelques lignes de code ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 01-07-2003 à 15:57:36    

benou a écrit :


et j'ai donné un exemple de la façon dont tu pouvait la faire en quelques lignes de code ...


 
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 ?

Reply

Marsh Posté le 01-07-2003 à 15:57:36   

Reply

Marsh Posté le 01-07-2003 à 16:10:38    

pilou50 a écrit :


C'est identique à Vector pour ce que je veux faire. Je ne vois pas l'avantage.. Map est moins lourd que Vector ?


 
 :ouch:
 
euh tu peux expliquer?
 


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-07-2003 à 16:20:36    

DarkLord a écrit :


 
 :ouch:
 
euh tu peux expliquer?


 
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 ?

Reply

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

[:mlc2]  
 
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.


---------------
ma vie, mon oeuvre - HomePlayer
Reply

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.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 01-07-2003 à 17:33:46    


Code :
  1. public get(int i, int j) {
  2.    Map line = (Map) this.matrice.get(new Integer(i));
  3.    if (line == null) {
  4.       return null;
  5.    }
  6.    return line.get(new Integer(j));
  7. }


 
 
 
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 :
  1. public get(int i, int j) {
  2.    Vector line = (Vector) this.matrice.get(i);
  3.    if (line == null) {
  4.       return null;
  5.    }
  6.    return line.get(j);
  7. }


 
J'ai l'impression que je n'ai pas saisi quelquechose, à moins que j'ai mal expliqué le problème.
 
 

Reply

Marsh Posté le 01-07-2003 à 19:07:39    

:sweat:  
 
 
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)
 

  • dans un vecteur tu devras tout stocker :

{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
 
 

  • dans une map, tu stockeras juste les endroits (index) où il y a un truc non vide :  

{(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 ? :sweat:


Message édité par benou le 01-07-2003 à 19:43:36

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 01-07-2003 à 19:40:41    

:sweat:


---------------
Just because you feel good does not make you right
Reply

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.  :)  
 
@ +  :hello:

Reply

Marsh Posté le 03-07-2003 à 11:44:12    

benou a écrit :

:sweat:  
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 ? :sweat:


 
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)
 
 :D  

Reply

Marsh Posté le 03-07-2003 à 12:51:17    

Kahyman 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)
 
 :D  
 


 
C'est Kahyman pareil.  :D

Reply

Marsh Posté le 03-07-2003 à 14:27:39    

Kahyman 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...)


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  :sarcastic:  
4) son problème est déjà réglé.


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 03-07-2003 à 14:59:38    

benou 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  :sarcastic:  
4) son problème est déjà réglé.
 


 
5) tu n'as pas besoin de me prendre de haut... (tu te prends pour qui ?)
 
:pfff:  
 
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.

Reply

Marsh Posté le 03-07-2003 à 15:08:09    

Kahyman a écrit :


 tu n'as pas besoin de me prendre de haut...


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.


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 03-07-2003 à 16:57:09    

benou 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.


 
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.

Reply

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.


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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