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

Java Discussion :

Tri de Vecteur


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut Tri de Vecteur
    Bonjour,
    Juste pour un conseil sur un tri, en performance.

    Donc pour faire simple, je suis en stage dans un laboratoire et je bosse sur une appli bizarrement codée. j'ai une classe qui "implements" une interface qui déclare une fonction sortByfreq.

    En gros l'instance de ma classe, c'est une Liste de vecteur. Chaque vecteur contient un String et un vecteur d'occurrences de ce String dans un texte étudié.
    Je dois trié cette liste en fonction des occurrences de chaque chaine par ordre croissant et je voudrais savoir quelle est la manière la plus performante ne prenant pas trop de mémoire qui pourrait traiter cela

    Merci d'avance

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Ce serait peut-être plus simple avec un ptit bout de code non? Parce que là je me représente pas très bien ton graph d'objets...

    Tu as un truc comme ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<Vector> list=...;
    et dans chaque Vector, 2 entrées, la première est une string, la deuxième un Vector?

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut
    Non c'est l'instance de la classe qui est un vecteur, c'est pour ça qu'il n'y a pas vraiment de code à montrer.

    mais ma classe est déclaré de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class SEGINCONTEXTSLIST extends SortableDataVector implements ClickableVector
    tout cela "extends" une classe nommé DataVector qui elle "extends" Vector

    J'espère m'être fait comprendre.
    Merci

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Ok... et les champs String et Vector ils sont comment?

    donne-nous un peu plus de code stp

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut
    Ce vecteur contient des objects de cette classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class SEGINCONTEXTS
    qui elle, a pour attribut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
         /**
          * The String representation of the segment
          */
         private String segString;
         /**
          * The list of relative OffsetPairs for each occurence of the segment
          */
         private OffsetPairList occList;
    OffsetPairList c'est mon vecteur d'occurrences.

  6. #6
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Ok... alors un comparateur de ce genre devrait faire l'affaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Comparator<SEGINCONTEXTS> comparator = new Comparator<SEGINCONTEXTS>() {
                public int compare(SEGINCONTEXTS o1, SEGINCONTEXTS o2) {
                    if((o1==null && o2==null) || o1==o2) {
                        return 0;                    
                    }
     
                    if(o1==null) {
                        return +1;
                    }
                    if(o2==null) {
                        return -1;
                    }
     
                    return o1.occList.size().compareTo(o2.occList.size());
                }
            };
    et le tri:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Conversion vers une liste pour faire le tri (tri impossible sur des vecteurs)
    Vector<SEGINCONTEXTS> v = ...;
    List l = Arrays.asList(v.toArray(new SEGINCONTEXTS[v.size()]));
    Collections.sort(l, comparator);
    // Maintenant, la liste 'l' est triée en fonction des critères définis dans le comparator

  7. #7
    Membre éprouvé
    Profil pro
    Devops
    Inscrit en
    Août 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Devops

    Informations forums :
    Inscription : Août 2006
    Messages : 107
    Par défaut
    Poypoypoy... Je n'arrive pas trouver la source mais je croix me rappeler qu'il est important que la fonction compare retourne une valeur plus représentative de la différence entre deux objets. Pourtant :

    In the foregoing description, the notation sgn(expression) designates the mathematical signum function, which is defined to return one of -1, 0, or 1 according to whether the value of expression is negative, zero or positive.
    Dixit la JavaDoc1.6. (MAIS DIFFERENTE DE LA JavaDoc1.3 !!)

    Mais :
    Note: The return value does not have to be -1, 0, or 1. Only the sign is important, not the value. In this case, the code just returns the difference in years, without worrying about the magnitude.
    Dixit ce document

    Et je n'arrive pas a trouver le lien sur une autre discution qui expliquai les optimisations algorithmiques dans l'API Java utilisant des valeurs autre que -1,0 et 1... Damned... On m'aurai mentis ?

  8. #8
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par Iyoiyo Voir le message
    Damned... On m'aurai mentis ?
    probablement... y'a plein de légendes urbaines sur java (qui disent que c'est lent, etc.)

  9. #9
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut
    ça marche !
    Juste un petit problème avec le compareTo, il lui faut des Integer, les Int il peut pas.
    Merci Beaucoup

  10. #10
    Membre éprouvé
    Profil pro
    Devops
    Inscrit en
    Août 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Devops

    Informations forums :
    Inscription : Août 2006
    Messages : 107
    Par défaut Wooups tapé trop vite moi... pas sur que ça marche...
    Problème d'autoboxing ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return new Integer(o1.occList.size()).compareTo(new Integer(o2.occList.size()));
    Facile quand même non ?

  11. #11
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par fanzyride Voir le message
    Juste un petit problème avec le compareTo, il lui faut des Integer, les Int il peut pas.
    Oui, problème d'autoboxing. Vérifie que ton compilateur est bien en mode Java5+

    Sinon, la solution Iyoiyo peut aussi fonctionner (juste remplacer new Integer par Integer.valueOf, afin d'optimiser).

  12. #12
    Membre éprouvé
    Profil pro
    Devops
    Inscrit en
    Août 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Devops

    Informations forums :
    Inscription : Août 2006
    Messages : 107
    Par défaut
    Citation Envoyé par Pill_S Voir le message
    Sinon, la solution Iyoiyo peut aussi fonctionner (juste remplacer new Integer par Integer.valueOf, afin d'optimiser).
    +1

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

Discussions similaires

  1. Tri sur vecteur
    Par degseb dans le forum Débuter
    Réponses: 4
    Dernier message: 06/07/2008, 13h04
  2. Tri d'un vecteur
    Par killer75 dans le forum C++
    Réponses: 22
    Dernier message: 30/01/2007, 20h14
  3. [Tableaux] Algorithme tri de vecteurs
    Par pelloq1 dans le forum Langage
    Réponses: 3
    Dernier message: 30/01/2007, 19h07
  4. Tri d'objets dans un vecteur
    Par Jahjouh dans le forum C++
    Réponses: 5
    Dernier message: 26/01/2006, 19h23
  5. [débutant] tri vecteur string ordre alphabétique
    Par Tom Sawyer dans le forum SL & STL
    Réponses: 2
    Dernier message: 26/07/2004, 18h40

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