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

Algorithmes et structures de données Discussion :

Algorithme de recherche


Sujet :

Algorithmes et structures de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 247
    Points : 99
    Points
    99
    Par défaut Algorithme de recherche
    Bonjour,

    Imaginez une liste très longue de mots par exemple. Mon but est de créer un algorithme qui permet de filtrer cette liste à partir de plusieurs caractères afin de trouver la correspondance exacte. Il faut que cet algorithme soit très performant.
    Un exemple pour etre un peu plus clair :
    J'ai une liste de noms (stockée dans une bdd par exemple) et un formulaire ou je dois entrer un nom. Celui-ci doit correspondre à un des noms contenu dans la liste. Au fur et à mesure que je tape le nom, une liste de plus en plus réduite m'est proposé (on peut imaginer que cette liste n'est affichée que lorsque celle-ci se réduit à 10 noms)

    Selon vous quelle est la meilleure manière de procéder ? Auriez vous un algorithme à me proposer ?

    On m'a conseillé de me pencher sur les trigrammes...
    Qu'en pensez-vous ?

    Merci beaucoup pour vos réponses

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Je pense à un tri radix ...

    Tout dépend de la structure de donnée pour stoquer les données. Si tu as un dictionnaire (un arbre), le tout est de parcourir ton arbre pour y descendre au fur et à mesure que tu tappes les lettres ...

  3. #3
    Membre actif Avatar de Betatesteur
    Inscrit en
    Juillet 2003
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 210
    Points : 248
    Points
    248
    Par défaut
    j'opterai pour une recherche par dichotomie. (rapide qui t'éviterai des test à n'en plus finir vu que ces une grosse bdd genre 40000 mots)

  4. #4
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    Citation Envoyé par Betatesteur
    j'opterai pour une recherche par dichotomie. (rapide qui t'éviterai des test à n'en plus finir vu que ces une grosse bdd genre 40000 mots)
    C'est très bien mais une recherche par dichotomie nécessite une liste TRIEE ! Or je ne suis pas certain que sa liste le soit !

  5. #5
    Membre actif Avatar de Betatesteur
    Inscrit en
    Juillet 2003
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 210
    Points : 248
    Points
    248
    Par défaut
    autant pour moi
    http://www.di.ens.fr/~granboul/enseignement/mmfai/algo2000-2001/tp4/tp4.html
    c'est à peu près ça.

    Mais si t'as tes 40000 mots dans une SGBDR ils seront forcement trié. pourquoi ne pas utiliser le sql pour faire ton appli.???

  6. #6
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut
    Un autre moyen pour éviter le tri est de stocker les mots dans un arbre AVL. Ca garantit une optimisation de la recherche (mais au prix d'un peu de gaspillage de mémoire).

    Pour en savoir plus, clique ici, par exemple

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 247
    Points : 99
    Points
    99
    Par défaut
    Ah je vois que c'est un sujet qui attire les réponses. C'est super.
    J'ai oublié de préciser une chose très importante. J'aimerai que la liste des noms qui s'affichent tolère des fautes d'orthographe.
    Par exemple, si "DUPONT" se trouve dans la liste, il doit s'afficher si je commence par taper "DUIPO" (insertion de caractère)
    Voilà l'élément que je voulais rajouter.
    Je vais maintenant regarder plus en détail les solutions que vous me proposez.

    Merci bcp !

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    On a droit aux orthographes voisines ca change tout !!!

    Pour les orthographes exactes, j'ai implémenté du temps où les machines ramaient un arbre avec un niveau par lettre (tout les mots étant terminés par un caractère de fin spécial) qui présentait d'excellente performances.

    Exemple (caractère de fin #) pour les mots A AU AMI BU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <racine>
    |
    A------------B
    |            |
    #-M-U        U
      |          | 
      I          #
      |
      #
    Pour les orthographes approchantes, le problème est d'autant plus complexe qu'on ne connait que le début du mot. Il faudrait vérifier si les caractères dèjà tapés correspondent "à peu prés" au début des mots du dico.

    Pour déterminer l'algorithme de parcours le plus adapté, il faut d'abord définir avec précision le critére de proximité (proportion de lettre communes, ordre des lettres, doublement de lettre, accents, ...) entre le début de mot tapé et un mot quelconque du dictionnaire.

  9. #9
    Membre régulier Avatar de Mucho
    Inscrit en
    Décembre 2005
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 221
    Points : 109
    Points
    109
    Par défaut
    Si j'étais toi j'irais voir du coté de la bio-informatique,

    je me rappelle d'avoir utilisé plein d'algorithmes de reconnaissance de chaîne de caractères pour les recherches dans les chaînes d'acides nucléiques :

    du genre rechercher ACC*GT dans

    AGTTCGGTAAATTGGAAGCCCTAAAGCTAGCTAGCAATAAGCTAAGCTAGAACTAAGATATTTTCGA

    où une étoile peut vouloir dire n'importe quoi ou rien.

  10. #10
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    Est-ce que cet article peut t'intéresser ?

    http://www.codeproject.com/useritems/Soundex.asp

    @+

Discussions similaires

  1. algorithme de recherche
    Par toddy_101 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 25/01/2007, 09h39
  2. Algorithme de recherche
    Par toddy_101 dans le forum Langage
    Réponses: 13
    Dernier message: 23/01/2007, 12h06
  3. Algorithme de Recherche
    Par i.pollux dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 19/10/2006, 09h48
  4. Meilleur algorithme de recherche de chaine?
    Par ryosnake dans le forum Algorithmes et structures de données
    Réponses: 23
    Dernier message: 20/09/2006, 20h34
  5. Algorithme de recherche de chemin
    Par amelie gaya dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 09/06/2002, 15h29

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