Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3026 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  tableau à 2 dimensions sans initialisation?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tableau à 2 dimensions sans initialisation?

n°445246
pilou50
Posté le 01-07-2003 à 15:25:48  profilanswer
 

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.

mood
Publicité
Posté le 01-07-2003 à 15:25:48  profilanswer
 

n°445248
LetoII
Le dormeur doit se réveiller
Posté le 01-07-2003 à 15:27:07  profilanswer
 

Cherche des algo sur les matrices creuses.


---------------
Le Tyran
n°445255
benou
Posté le 01-07-2003 à 15:33:29  profilanswer
 

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
n°445256
benou
Posté le 01-07-2003 à 15:33:59  profilanswer
 

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


---------------
ma vie, mon oeuvre - HomePlayer
n°445258
pilou50
Posté le 01-07-2003 à 15:35:53  profilanswer
 

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

n°445259
LetoII
Le dormeur doit se réveiller
Posté le 01-07-2003 à 15:36:21  profilanswer
 

benou a écrit :

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


yep  :jap:


---------------
Le Tyran
n°445260
LetoII
Le dormeur doit se réveiller
Posté le 01-07-2003 à 15:37:43  profilanswer
 

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
n°445261
pilou50
Posté le 01-07-2003 à 15:39:10  profilanswer
 

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.

n°445262
benou
Posté le 01-07-2003 à 15:39:12  profilanswer
 

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
n°445289
pilou50
Posté le 01-07-2003 à 15:57:36  profilanswer
 

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 ?

mood
Publicité
Posté le 01-07-2003 à 15:57:36  profilanswer
 

n°445313
darklord
You're welcome
Posté le 01-07-2003 à 16:10:38  profilanswer
 

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
n°445328
pilou50
Posté le 01-07-2003 à 16:20:36  profilanswer
 

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 ?

n°445364
benou
Posté le 01-07-2003 à 17:07:29  profilanswer
 

[: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
n°445367
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 01-07-2003 à 17:11:27  profilanswer
 

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.
n°445389
pilou50
Posté le 01-07-2003 à 17:33:46  profilanswer
 


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.
 
 

n°445509
benou
Posté le 01-07-2003 à 19:07:39  profilanswer
 

: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
n°445532
darklord
You're welcome
Posté le 01-07-2003 à 19:40:41  profilanswer
 

:sweat:


---------------
Just because you feel good does not make you right
n°446581
pilou50
Posté le 02-07-2003 à 17:19:28  profilanswer
 

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:

n°447369
Kahyman
Posté le 03-07-2003 à 11:44:12  profilanswer
 

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  

n°447440
pilou50
Posté le 03-07-2003 à 12:51:17  profilanswer
 

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

n°447564
benou
Posté le 03-07-2003 à 14:27:39  profilanswer
 

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
n°447612
Kahyman
Posté le 03-07-2003 à 14:59:38  profilanswer
 

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.

n°447626
benou
Posté le 03-07-2003 à 15:08:09  profilanswer
 

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
n°447791
Kahyman
Posté le 03-07-2003 à 16:57:09  profilanswer
 

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.

n°447838
benou
Posté le 03-07-2003 à 17:16:48  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  tableau à 2 dimensions sans initialisation?

 

Sujets relatifs
tableau dynamique en VB6 (débutant)[php]tableau alternance couleurs
Comment insérer un tableau en PHPtrier selon la colone d'un tableau
Tableau automatiquetableau de taille variable
[PHP] Question facile : Comment lire un élément d'un tableautableau de structure
La taille maximum d'un tableau en C ?[Perl] Utiliser un tableau d'une subroutine
Plus de sujets relatifs à : tableau à 2 dimensions sans initialisation?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR