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 :

Vérifier l'existance d'un mot dans un dictionnaire


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut Vérifier l'existance d'un mot dans un dictionnaire
    Bonjours tout le monde,
    J'ai un petit problème d'algorithme.
    Voilà, j'ai un dictionnaire de mots, et je veux vérifier que les occurrences de lettres fournies en entrées s'y trouve(dans le dictionnaire). Un peu comme dans le jeu "Des chiffres et des lettres" sur France 2.
    Prenons un exemple : Je donne en entré ABC. Les occurrences de ces lettres sont :
    ABC-ACB-BAC-BCA-CAB-CBA.
    Les deux mots existant dans le dictionnaire sont BAC et CAB.
    Comme première idée, j'ai pensé à utiliser la méthode humaine qui justement consiste à lister toutes les possibilités puis de chercher dans le dictionnaire avec une recherche dichotomique.
    Mais là on a un algorithme très complexe. Je ne suis pas expert en complexité d'algorithme, mais pour N lettres fournies en entrées, je croies que nous avons N! possibilités...
    Si vous avez une idée d'amélioration je suis preneur.

  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,

    tous les dictionnaires sont construit sous forme d'une table de hashage (interrogation en 0(1)).
    Donc tu peux lister toutes tes combinaison et faire ton interrogation rapidement.

    Je ne suis pas sûr qu'il existe des clefs de hashage qui prennent en compte la présence de certaines lettres plus que d'autres. Cela ferait perdre la faible complexité d'interrogation du dictionnaire.
    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 éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut
    Et je suis obligé de lister toutes possibilités? N'y a t il pas possibilité de consulter la BD grâce à une regex ou autre?

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par ilys05 Voir le message
    Et je suis obligé de lister toutes possibilités? N'y a t il pas possibilité de consulter la BD grâce à une regex ou autre?
    Heu non. On ne teste que les entrées en BD qui ont le même hash. Et si la BD est bien faite (index btree), lister toutes les entrées qui ont un hash donné est en o(log(n)) ou "n" est le nombre de hash differents.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 43
    Par défaut
    Tu peux avoir 26 compteurs pour chaque mot (si tu n'as que 26 lettres). Chaque compteur donne le nombre d'occurrences d'une lettre dans le mot.
    Ensuite tu recherches tous les mots tel que le nombre de A est 1, le nombre de B 2, le nombre de C 0, ...

    Autre possibilité, dans ta BD tu tries chaque mot (et tu stockes les 2 : le mot d'origine et le mot trié).
    Ensuite, quand tu as un mot en entrée, tu le tries et tu recherches les mots, dans ta BD, qui correspondent à ce mot trié.

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Gie,

    Une solution pourrait être de maintenir une table d'anagrammes.

    Pour chaque mot du dico, faire la suite classée des lettres, sans tenir compte des signes diacritiques (accents, cédille, ...).

    Pour chaque suite de lettres ainsi obtenue, maintenir une liste des mots correspondant.

    Ça ne me paraît pas gigantesque à faire, et ça accélérera très nettement la recherche comme tu veux la faire.

  7. #7
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut
    Merci à vous tous, mais les hash & Co je n'y connais rien du tout.
    La dernière idée me parait très bien.
    Pour info, la longueur des mots sont entre 3 et 6 lettres, avec des caractères allant de 'A' à 'Z'. Donc ni accent ni cédille.
    Pour chaque mot par exemple on pourrait mettre à coté le trie alphabétique de ses lettres.

    AVOIR ===> AIORV
    FAIRE ===> AEFIR

    L'entrée aussi sera trié, pour s'écrire sur la même forme, avant d'être transmise à la requête. Vous en dites quoi?
    Mais par exemple pour AVOIR, dedans il y a aussi le mot AIR, qui a pour signature AIR. Donc il faudra chercher toutes les occurrences de la signature de l'entrée. Vous en dites quoi de l'idée de droggo?

Discussions similaires

  1. Vérifier l'existence d'une valeur dans un ComboBox
    Par logiciel_const dans le forum Composants VCL
    Réponses: 6
    Dernier message: 08/03/2008, 09h07
  2. Vérifier l'existence d'un item dans une listbox
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 23/03/2007, 10h12
  3. [MySQL] Vérifier l'existence d'un nom dans une table
    Par joselito dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/01/2007, 22h49
  4. [MySQL] Vérifier l'existance d'une donnée dans la base avant insertion
    Par Him dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 16/07/2006, 15h47
  5. vérifier l'existance d'une table dans une base de donnée
    Par zidenne dans le forum Bases de données
    Réponses: 1
    Dernier message: 31/10/2005, 11h39

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