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 :

Manipulation de tableaux


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Points : 53
    Points
    53
    Par défaut Manipulation de tableaux
    Bonjour à tous,
    Voici le contexte de mon problème :
    - j'ai une Map<Integer, List<String>> map1 où la clé est un identifiant et le tableau de valeurs une liste de mots
    - de l'autre côté, j'ai une Map<String, String> map2 de correspondance entre des mots

    Je voulais savoir quelle était le meilleur algorithme pour remplacer les mots du tableau de la map1, par leur correspondance dans la map2.

    Pour l'instant, ce que je fais c'est que je parcours les tableaux de chaque identifiant de la map1, et pour chaque mot rencontré, je le remplace par son correspondant, ce qui revient à imbriquer deux boucles for. C'est extrêmement chronophage, et je me demandais donc si il y aurait d'autres façons de faire.

    Merci !

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    A moins que tu n’ai des listes de 3Km de long je ne vois pas pourquoi cette opération prendrai du temps.

    De plus je ne vois pas d'autres manières de faire, tu es obligé de passer sur tous tes éléments pour les remplacer, donc la double boucle me parait obligatoire..

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Si chaque mot a son correspondant, la boucle imbriquée est bien sûr inévitable.

    Deux solutions pour améliorer les performances en évitant la boucle :
    - construire directement map1 avec les bonnes valeurs finales
    OU
    - ne pas convertir map1. À la place, chaque fois qu'on veut utiliser ses mots, prendre ce mot et demander son correspondant à map2.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Points : 53
    Points
    53
    Par défaut
    Malheureusement je travaille sur des textes assez longs que je splitte en mots, et j'arrive vite à des trucs énormes ! Et comme je fais de la lemmatisation, je suis obligé de remplacer tous les mots par leur correspondant.
    Je n'ai pas lu toutes les améliorations apportées à Java 7, mais je me demandais si il n'y aurait pas une nouvelle fonction optimisée du genre replace(array1,array2) comme en php !

  5. #5
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Dans ce cas je pense que la méthode de thelvin est plus adaptée.

    Citation Envoyé par thelvin Voir le message
    - ne pas convertir map1. À la place, chaque fois qu'on veut utiliser ses mots, prendre ce mot et demander son correspondant à map2.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Points : 53
    Points
    53
    Par défaut
    ok, merci !

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tes boucles imbriquées ne sont pas spécialement chronophages. En effet, le temsp de ton algorithme n'est jamais que 0(n*t) n étant le nombre d'éléments au total de ta map+list, t étant le temps nécessaire pour aller chercher des données dans ta map<String,String>


    On peut difficilement réduire le premier paramètre, dans le sens ouù tu ne peux pas changer N valeurs sans passer sur ces N valeurs. Pour le deuxième, tu peux éventuellement essayer de trouver une structure plus optimisée par rapport aux données que tu stocke dans la map.

    Comme dit thelvin, le plus performant, ça reste de ne pas avoir besoin de tout convertir. Quel est le but de l'opération, comment on été remplies ces deux maps, comment ce sera utilisé par la suite?


    Note que, vu que les clés de la première map sont intédpendante, tu peux aussi essayer de paralléliser le code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Manipulation des tableaux
    Par driss80 dans le forum Fortran
    Réponses: 4
    Dernier message: 18/01/2008, 08h51
  2. manipulation des tableaux
    Par amine556 dans le forum Informix
    Réponses: 4
    Dernier message: 26/11/2007, 15h20
  3. Problème de manipulation de tableaux
    Par proff dans le forum Pascal
    Réponses: 8
    Dernier message: 01/04/2007, 10h07
  4. Manipulation de tableaux de tableaux
    Par vargasvan dans le forum Langage
    Réponses: 2
    Dernier message: 26/04/2006, 13h54
  5. [Tableaux] Manipulation de tableaux
    Par orus8 dans le forum Langage
    Réponses: 3
    Dernier message: 04/10/2005, 15h10

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