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 :

Recherche de mot commençant par une chaine dans un dictionnaire


Sujet :

Algorithmes et structures de données

  1. #1
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut Recherche de mot commençant par une chaine dans un dictionnaire
    Bonjour,

    Je cherche un algorithme permettant de trouver le premier mot dans un dictionnaire (trié alphabétiquement, c'est la moindre des choses pour un dictionnaire) commençant par une chaine de caractères donnée en paramètre.


    Par exemple avec le dictionnaire suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    abdiquer
    absenter
    abstentionniste
    abuser
    la recherche de "abs" doit retourner "absenter" et pas "abstentionniste"

    J'étais parti sur une idée de recherche dichotomique modifiée afin de prendre en compte ce type de recherche mais je me demande s'il n'y a pas un autre algo plus performant que ce que je pourrais bien faire.

    Merci d'avance de vos éclairages

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Peut-être devrais-tu construire un arbre préfixe de ton dictionnaire avec les fils ordonnés dans l'ordre lexicographique

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Alexis.M Voir le message
    Peut-être devrais-tu construire un arbre préfixe de ton dictionnaire avec les fils ordonnés dans l'ordre lexicographique
    Le dictionnaire est assez gros (21 000 mots) et je ne suis pas sûr d'avoir assez de mémoire pour le construire, c'est pour une application sur un Android.

  4. #4
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Salut,
    21.000 mots c'est pas énorme, en plus avec un arbre préfixe tu "factorises" beaucoup, tu peux aussi "factoriser" les suffixes dans une certaine mesure. Jette un coup d'oeil sur les dawg : http://en.wikipedia.org/wiki/Directe...lic_word_graph


    EDIT: suite à la réponse de Alexis.M, il est évident qu'il faut sérialiser ta structure et non la construire sur place à partir d'une liste de mots.

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    en fait si tu ne stockes que l'arbre, ça devrait prendre moins de mémoire que le fichier texte et au niveau de la rapidité de recherche tu es linéaire avec le nombre de lettres du préfixe.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Personellement je pense que :

    Citation Envoyé par ram-0000 Voir le message
    J'étais parti sur une idée de recherche dichotomique modifiée afin de prendre en compte ce type de recherche mais je me demande s'il n'y a pas un autre algo plus performant que ce que je pourrais bien faire.
    une recherche dichotomique bien programmée est supérieure, sans mémoire supplémentaire.. (log(n) pour 1 coup, log2(n) pour plus, voire 26 fois moins si on a déjà les limites des lettres).

    Mais je ne suis pas spécialiste des arbres..

  7. #7
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Salut,

    Je pense qu'avec une bonne implémentation d'un arbre préfixe avec les enfants triés lexicographiquement comme le propose Alexis.M, sans pousser jusqu'au dawg, sera plus compacte qu'un tableau de chaînes triées (surtout pour un dictionnaire de 210000 mots).
    Les proportions dans lesquels ont peut profiter de la compression par prefixe (voire par suffixe) est variable et dépend non seulement des mots (ici un dictionnaire propose un grand nombre de mots ayant des préfixes communs), l'alphabet utilisé (on ne garde que des majuscules, ou on garde majuscules, minuscules, caractères accentués, ...), l'encodage utilisé (iso8859, utf8, ...).
    Ça fait du boulot avant, mais faut voir à l'usage et faire des tests je pense.

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Pour l'instant, j'ai réalisé une recherche par dichotomie avec une modification spécifique pour rechercher le premier mot commençant par la chaine recherchée. Avec un dico de 250 mots (pour l'instant), je trouve en 8 coups (ce qui est nettement mieux que mon 1er algo "brutal" qui itérait sur l'ensemble du dictionnaire.

    Par contre, je vais regarder vers l'algo dawg, cela à l'air intéressant. Ce qui me pose problème, c'est le fait que je soit obligé de reconstruire cet arbre à chaque lancement (et aussi peut être le temps de construction.

    De toute façon, je suis obligé d'emmener le dictionnaire dans l'application. Je ne peux pas me contenter uniquement de l'arbre (même s'il est construit extérieurement).

    En tout cas, merci à tous pour vos réponses.

  9. #9
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Effectivement, si tu as de l'information supplémentaire comme des définitions cela peut être moins intéressant ... à moins d'utiliser l'arbre comme index ... mais ça peut compliquer les choses surtout si c'est pour une petite plateforme.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/10/2013, 22h57
  2. [RegEx] Trouver un mot commençant par une lettre donnée
    Par Arget dans le forum Langage
    Réponses: 7
    Dernier message: 18/09/2011, 17h41
  3. Réponses: 3
    Dernier message: 09/05/2011, 14h10
  4. Réponses: 9
    Dernier message: 21/07/2009, 17h45
  5. Réponses: 2
    Dernier message: 06/03/2009, 08h32

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