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 :

Meilleur algorithme de recherche de chaine?


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut Meilleur algorithme de recherche de chaine?
    Bonjour,

    Je souhaiterai implémenter un algo de recherche qui me renverrai true si il a trouvé la chaine de caractère que je lui ai passé en paramètre dans ma base de donnée de mots.(une sorte de dictionnaire).

    Il faut que ça soit le plus optimiser possible, donc très rapide tout en requierant le minimum d'espace mémoire. (je sais, c'est beau de rèver )

    Et également, comment organiser la base de donnée pour qu'elle soit optimiser pour l'algorithme. Par exemple, ranger les mots par leur longueur et en plus dans l'ordre alphabétique?

    Merci par avance.

    PS:Attention, je parle bien de chaine et pas de sous-chaine, il faut, si il existe qu'il me trouve le mot recherché pil poil tel que je lui ai donné

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    ce que tu demandes est implémenté dans les dictionnaires electroniques : une table de hashage !!!

    - Recherche en O(1).
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut
    ok, merci, mais je pensais plutôt utiliser un vecteur dynamique car une table de hachage c'est pour faire un vrai dictionnaire, genre mot / définition. Quand j'ai parlé d'une sorte de dictionnaire, je voulais dire, juste des mots.

  4. #4
    Membre émérite
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Par défaut
    de memoire, pour avoir un resultat optimal il faut transformer la chaine a rechercher en un automate fini. par exemple, si tu recherche dans un texte une chaine sans repetiton, tu peux passer en O(n) facilement. exemple : chercher abc dans ababc.



    tu compares a et a, c'est bon, tu compare b et b c'est bon. tu compares c et a, la ca coince. dans l'approche naive, tu te decalerais jste d'un cran, et tu comparerais a et b, or comme tu sais qu'il n'y a pas 2 lettres identiques dans la chaine recherhée, tu pex directement passer a la comparaison de a et a... c'est pas clair ?? j'essaie de detailler.

    1
    a b a b c
    a b c -> pas bon

    2
    a b a b c
    a b c -> pas bon, mais tu le savais deja vu que a!=b donc tu pouvais passer direct a

    2 bis
    a b a b c
    a b c -> c'est bon, soit 2 etapes au lieu de 3.

    en gros, tu n'a jamais a revenir en arriere.

    l'idee est donc d'etendre ca en transformant ta chaine en automate pour sauter des etapes.

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut
    oui, ok, mais moi, c'est plus simple que ça puisque je ne cherche pas une sous-chaine dans une chaine, je veux juste savoir si le mot que je passe en paramètre est dans ma base de mots.

    si j'envois le mot abc, et que je rencontre le mot abca ou dabc, c'est pas bon, c'est bon que quand je rencontre abc et rien d'autre.

    Là où je me pause des questions, c'est sur la manière de ranger ma base et comment faire mes recherches, sachant que j'aurai des milliers de mots et il faut donc que ça soit le plus optimisé possible.

    On pourrai juste les ranger par ordre alphabétique, puis chercher dedans, mais je pensais à ranger mes mots par leur longueurs, et chaque groupe de mots de même longueurs serait rangés dans l'ordre alphabétique, déjà, cela pourrait certainement améliorer la recherche, puisqu'on récupere la longueur du mot passer en parametre et on cherhche dans le bon groupe.

    Maintenant, je me demande dans quoi stocker ma base (vecteur dynamique?) et quel algo serait le plus approprié pour la recherche.

  6. #6
    Membre confirmé
    Homme Profil pro
    Analyste
    Inscrit en
    Août 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2003
    Messages : 85
    Par défaut
    Les meilleurs moteurs de recherche sont basés sur les expressions régulière il me semble...

Discussions similaires

  1. meilleur algorithme de recherche
    Par momedalhouma dans le forum Général Java
    Réponses: 2
    Dernier message: 08/05/2013, 11h23
  2. Comment rechercher une chaine dans plusieurs tables ?
    Par tsing dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/11/2005, 18h04
  3. Recherche de chaine (TFindDialog)
    Par PoOky dans le forum Composants VCL
    Réponses: 10
    Dernier message: 30/08/2005, 07h59
  4. Recherche de chaine ...
    Par Metal3d dans le forum C
    Réponses: 8
    Dernier message: 27/07/2002, 01h20
  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