IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Implementation d'une matrice +sieurs valeurs


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut Implementation d'une matrice +sieurs valeurs
    Bonjour;

    Je cherche une structure pour implementer une matrice dont les lignes et les colonnes sont eux mêmes des valeurs.
    Example :

    Date1 date2 date3 date3 date4 date5 ...
    12 v1 v2 v3 v4 v5 v6
    1 ....................................................
    3 ....................................................
    7 ....................................................
    130 ....................................................
    ...

    Ou Vi sont des valeurs (par exemple des entiers).
    Je dois faire des recherche du stype : TrouveLigne(12) renvoi la ligne égale à la valeur 12 (v1, v2, etc..)

    Merci

  2. #2
    Membre expert
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    Un object[][] ???

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par moritan
    Un object[][] ???

    Bonjour;

    pourquoi un objet [][] ? attention ce n'est pas une matrice T[i, j] ?
    J'ai une ligne (i) et des colonnes (j) avec des valeurs (pas des indexes) et pour chacune d'elles (intersection) j'ai une troisème valeur.

    Merci

  4. #4
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Bonjour,
    Quelles sont les recherches possibles sur cette structure de donnés ? trouveLigne() ? trouveColonne() ? trouveCase() ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par herve91
    Bonjour,
    Quelles sont les recherches possibles sur cette structure de donnés ? trouveLigne() ? trouveColonne() ? trouveCase() ?
    Bonjour;

    Exactement, j'ai en entrée une valeur et je dois la rechercher dans la ligne , si elle existe je renvoi toute la ligne. Même recherche sur la colonne je renvoi toute la colonne et même pour la case.
    et je cherche un bon design pour cette structure ?


    Merci

  6. #6
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Ca ne serait pas pour faire un guide TV par hasard?

    Si c'est ça, je conseillerais de ne stocker qu'un seul "sens" du tableau (par exemple une liste par chaine, et dans cette liste, chaque émission avec ses heures, dans l'ordre).
    Evidemment, le parcours dans l'autre sens peut être coûteux (même si tu peux l'optimiser en découpant les listes "par jour" en plus de "par heure").

    Sinon tu fais un "modèle relationnel" en objet...

  7. #7
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Ou alors tu met en place 2 maps que tu gère en parallele...

    Une map pour référencer à partir des dates tous les elements qui correspondent en colonne (une map date/map d'element indexés sur le nombre)
    Une map pour référencer à partir des nombres tous les elements qui correspondent en ligne (une map nombre/map d'element indexés sur la date)


    Ca permettra d'avoir des methodes aussi rapides que tu fasse une recherche avec trouveLigne ou trouveColonne, mais ca demandera un peu plus de boulot pour le remplissage de la matrice en elle même (mais ca sera nettement moins prise de tete pour faire une recherche)

    Mais commence par faire une gestion avec un sens de lecture unique du tableau, puis met en place le deuxieme

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par ®om
    Ca ne serait pas pour faire un guide TV par hasard?

    Si c'est ça, je conseillerais de ne stocker qu'un seul "sens" du tableau (par exemple une liste par chaine, et dans cette liste, chaque émission avec ses heures, dans l'ordre).
    Evidemment, le parcours dans l'autre sens peut être coûteux (même si tu peux l'optimiser en découpant les listes "par jour" en plus de "par heure").

    Sinon tu fais un "modèle relationnel" en objet...

    Bonjour;

    La première solution est très couteuse par contre tu veux dire quoi avec
    "Sinon tu fais un "modèle relationnel" en objet..." ?

    Merci

  9. #9
    Membre expert
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    As-tu obligatoirement besoin d'un tableau?

    Sinon, tu pourrais utiliser une HashMap, ou la clé serait un objet complexe l(igne, colonne) et la valeur ben ta valeur.

  10. #10
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par yanis97
    Bonjour;

    La première solution est très couteuse par contre tu veux dire quoi avec
    "Sinon tu fais un "modèle relationnel" en objet..." ?

    Merci
    Non, en fait ça serait encore plus coûteux...

    Sinon le problème avec l'accès par colonne pour le guide TV, c'est que si une émission est entre 10h30 et 12h par exemple, et que tu recherches toutes les émissions à 11h, elle doit apparaître...

    Donc pour moi je ferais une HashMap<Chaine,List<Emission>>, ou en découpant encore plus, une classe GuideTVChaine, qui contient une HashMap<Date,List<Emission>> (découpée par jour), ainsi la recherche en colonne est optimisée...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par ®om
    Non, en fait ça serait encore plus coûteux...

    Sinon le problème avec l'accès par colonne pour le guide TV, c'est que si une émission est entre 10h30 et 12h par exemple, et que tu recherches toutes les émissions à 11h, elle doit apparaître...

    Donc pour moi je ferais une HashMap<Chaine,List<Emission>>, ou en découpant encore plus, une classe GuideTVChaine, qui contient une HashMap<Date,List<Emission>> (découpée par jour), ainsi la recherche en colonne est optimisée...
    Bonjour;

    J'ai implementé la solution que tu proposes mais c'est la galére pour le remplissage et la recherche ca rame.
    Je pense que la solution des 2 maps (Eulbobo) est plus simple.
    Peut être je me suis mal pris !

    A+;

  12. #12
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Le problème, c'est que pour un guideTV, la clé de ta map par colonne, tu mets quoi?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par ®om
    Le problème, c'est que pour un guideTV, la clé de ta map par colonne, tu mets quoi?

    Salut;

    Il s'agit pas d'un guideTV mais d'autre chose :

    colonnes => des dates
    lignes => des identifiants (type long)
    et les valeurs => des entiers (integer)

    j'ai un paramètre en entrée un identifant => je dois parcourir les lignes pour retrouver la ligne qui match cet identifiant et une fois trouvé je dois renvoyer la ligne correspdante + la colonne des dates (qui ne bouge pas).

    Voila en gros.

    Merci

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut
    Bonjour;


    Je souhaite revenir sur ce sujet : j'ai implementé la soution de Eulbobo qui semblait la plus simple :

    1- Une map pour référencer à partir des dates tous les elements qui correspondent en colonne (une map date/map d'element indexés sur le nombre)
    2- Une map pour référencer à partir des nombres tous les elements qui correspondent en ligne (une map nombre/map d'element indexés sur la date)

    Mais j'ai des trop pb de performance pour le remplissage de la matrice.
    Quelqu'un aurait'il une autre idée ?

    Merci



    Citation Envoyé par yanis97
    Bonjour;

    Je cherche une structure pour implementer une matrice dont les lignes et les colonnes sont eux mêmes des valeurs.
    Example :

    Date1 date2 date3 date3 date4 date5 ...
    12 v1 v2 v3 v4 v5 v6
    1 ....................................................
    3 ....................................................
    7 ....................................................
    130 ....................................................
    ...

    Ou Vi sont des valeurs (par exemple des entiers).
    Je dois faire des recherche du stype : TrouveLigne(12) renvoi la ligne égale à la valeur 12 (v1, v2, etc..)

    Merci

  15. #15
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Si ton tableau est de taille fixe, la solution la plus rapide serait de l'implémenter comme un tableau à 2 dimensions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object[][] tab = new Object[nbLignes][nbColonnes];
    Ensuite, tu prévois deux map pour faire la correspondance Date -> indice colonne, Integer -> indice ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Map dateToColonne = new HashMap();
    dateToColonne.put(..., ...);
     
    Map integerToLigne = new HashMap();
    integerToLigne.put(..., ...);
    Ensuite, pour accéder à une ligne donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Integer indiceLigne = (Integer) integerToLigne.get(...);
    Object[] ligne = tab[indiceLigne.intValue()];
    et à une case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Integer indiceLigne = (Integer) integerToLigne.get(...);
    Integer indiceColonne = (Integer) dateToColonne.get(...);
    Object[] ligne = tab[indiceLigne.intValue()][indiceColonne.intValue()];
    Reste que l'accès en colonne pose problème, à moins de prévoir un second tableau organisé en colonne/ligne.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut
    Salut;

    Pour la taille, la matrice je la remplie à partir de data, par contre pour le moment j'ai besoin de récupérer juste la ligne qui match un nbre :

    En entrée comme parametre j'ai un nbre (entier), je parcours la première colonne qui contient les Nbres et si je le trouve je renvoi toute la ligne.
    Pour la première ligne qui contient les dates je la récupére comme elle est (pas de recherche).

    Merci;

    Citation Envoyé par herve91
    Si ton tableau est de taille fixe, la solution la plus rapide serait de l'implémenter comme un tableau à 2 dimensions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object[][] tab = new Object[nbLignes][nbColonnes];
    Ensuite, tu prévois deux map pour faire la correspondance Date -> indice colonne, Integer -> indice ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Map dateToColonne = new HashMap();
    dateToColonne.put(..., ...);
     
    Map integerToLigne = new HashMap();
    integerToLigne.put(..., ...);
    Ensuite, pour accéder à une ligne donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Integer indiceLigne = (Integer) integerToLigne.get(...);
    Object[] ligne = tab[indiceLigne.intValue()];
    et à une case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Integer indiceLigne = (Integer) integerToLigne.get(...);
    Integer indiceColonne = (Integer) dateToColonne.get(...);
    Object[] ligne = tab[indiceLigne.intValue()][indiceColonne.intValue()];
    Reste que l'accès en colonne pose problème, à moins de prévoir un second tableau organisé en colonne/ligne.

Discussions similaires

  1. Concaténer des cellules de strings avec une matrice de valeurs
    Par procrastination dans le forum MATLAB
    Réponses: 3
    Dernier message: 16/10/2014, 13h25
  2. Récupérer une matrice si valeur dans feuille
    Par silenk dans le forum Excel
    Réponses: 1
    Dernier message: 12/06/2013, 16h00
  3. code pour le calcul d'une matrice de valeur
    Par sihamus87 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/05/2011, 16h23
  4. Réponses: 1
    Dernier message: 30/10/2009, 09h48
  5. valeurs propres d'une matrice et vecteurs propres
    Par la_fantomas dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 01/05/2005, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo