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 :

Comparateur souple d'objets


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 29
    Par défaut Comparateur souple d'objets
    Bonjour, mon but est le suivant :

    - Une interface de recherche d'un ordinateur en indiquant les critères que l'on veut : taille du disque dur, nombre de gigas de ram etc...
    - L'application va en base de donnée et renvoie une liste des 10 ordinateurs trouvés les plus pertinents (et pas exactement les même critères forcément).

    Je cherche des idées pour réaliser l'algorithme de comparaison en fonction de la pertinence des résultats.

    Une idée ?

    J'ai trouvé quelques solutions pour des recherches textuelles mais dans mon cas c'est plusieurs critères dont des valeurs.

    Merci!

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par défaut
    Citation Envoyé par Teebus Voir le message
    Bonjour, mon but est le suivant :

    - Une interface de recherche d'un ordinateur en indiquant les critères que l'on veut : taille du disque dur, nombre de gigas de ram etc...
    - L'application va en base de donnée et renvoie une liste des 10 ordinateurs trouvés les plus pertinents (et pas exactement les même critères forcément).

    Je cherche des idées pour réaliser l'algorithme de comparaison en fonction de la pertinence des résultats.

    Une idée ?

    J'ai trouvé quelques solutions pour des recherches textuelles mais dans mon cas c'est plusieurs critères dont des valeurs.

    Merci!
    Un moyen assez simple est de passé par un système de score, je m'explique; Tu vas effectuer des comparaisons pour chaque ordinateur. Si par exemple, le disque dur à les mêmes caractéristiques que celui entré par l'utilisateur alors, tu mémorise l'identifiant de cette ordinateur et tu lui donne un score de 50. Si le processeur est le même alors tu lui rajoute 100 points.

    En code ça donnerai cela :
    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
     
     
    HashMap<Computer,int> found;
    int limit = 10;
    ArrayList<Computer> computers = bdd.getAllComputer()
    ...
     
    for( Computer c : computers )
    {
        int score = calculScore(c);
        if( found.size() < limit )
           found.put(c,score);
        else
           // test  -> si le score de c est plus grand que le plus petit score d'un Computer dans found alors tu remplace celui-ci par c ainsi que son score.
    }
    Cette méthode est simple et te permet de donner des "poids" à tes différentes caractéristiques. Par exemple trouver le bon processeur est plus important que de trouver le bon disque dur alors, le poids d'un processeur sera de 100 et celui d'un disque dur sera de 50.
    Bien sûr si aucune des caractéristiques rentré par l'utilisateur ne correspondes avec t'es ordinateurs alors, tu pourras toujours faire comme ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Si le HDD est exactement le même alors le score sera de 50
    Sinon
    Si le HDD fait 500Go et que le HDD rentré par l'utilisateur fait 700Go alors le score sera de 40
    Si le HDD fait 300Go et que le HDD rentré par l'utilisateur fait 700Go alors le score sera de 20
    etc...
    Il y a surement mieux mais cette méthode a l'avantage d'être à la portée de tous.
    Bonne chance pour la suite

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 29
    Par défaut
    Bonsoir, excusez-moi d'avoir mis si longtemps à répondre !
    Tout d'abord merci beaucoup d'avoir pris le temps de me répondre de manière si complète !

    J'avais en effet pensé au système de score, mais votre réponse a conforté mon idée.

    Cependant il me reste encore quelques points noirs.

    En effet j'aimerai réaliser une application maintenable et extensible. C'est pourquoi le fait de réaliser le test de chaque critère en dur avec des if/else, me paraît un peu limitée et j'aimerai développer ce point.

    Voici comment j'ai structuré mon application :

    - Une classe Ordinateur (ou finalement un objet de quelconque type), composé d'une simple ArrayList<Criteres>
    - Une classe Critere, composée d'un libellé et d'un poids.

    J'aimerai trouver le moyen de rendre cela dynamique en mettant les niveaux de score (dans votre exemple 50, 40, 20) par exemple pourquoi pas directement dans la classe Critère ?

    De ce fait je pourrais écrire des instructions du type :

    ordinateur1.getScore(ordinateur2)

    où getScore comparerai les critères un a un et ferait en quelque sorte :

    critere1.getScore(critere2) (critere1 de l'ordinateur1 ...)

    Cependent il me reste une zone de flou : comment associer les multiples valeurs possibles d'un critère, à différent niveaux de score ? Et comment réaliser la comparaison ?

    Qu'en pensez-vous ?

    Merci

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par défaut
    Je te répond d'ici quelques heures, pas mal de boulot là

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par défaut
    Donc, concernant mon exemple avec des if/else c'était juste pour expliquer le principe mais, bien-sûr, il vaux mieux utiliser une formule, un simple produit en croix, ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HDD parfait.score = 50pts
    HDD recherché = 700Go
    HDD trouvé = 600Go
    HDD trouvé.score = 600*50/700
    Tu fait le calcul de tout tes critères, ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ArrayList<Critere> crit = ordi.critere();
    crit.forEach((c) -> 
    {
       ordi.addScore(ScoreCalculator.Calcul(c));
    });
    J'ai enregistré le score directement dans l'ordi mais bien-sûr ce n'est pas une bonne idée, c'est juste pour l'exemple, cette aprem je te passe un exemple de code

Discussions similaires

  1. [XL-2010] objet itemMail - Recipients.ResolveAll - recherche stricte au lieu de recherche souple
    Par Kathary dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/07/2017, 09h29
  2. Comparateur d'objets java
    Par Yasiño dans le forum Général Java
    Réponses: 1
    Dernier message: 28/11/2013, 23h52
  3. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53
  4. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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