Fonction de recherche

trublue Messages postés 37 Date d'inscription vendredi 24 juillet 2009 Statut Membre Dernière intervention 25 mai 2010 - 17 avril 2010 à 12:50
trublue Messages postés 37 Date d'inscription vendredi 24 juillet 2009 Statut Membre Dernière intervention 25 mai 2010 - 18 avril 2010 à 15:47
salut à tous,

je veux faire une fonction de recherche qui fonctionne comme suite:
j'ai une zone de texte à chaque fois que l'utilisateur tape un caractère une liste triée de noms s'affiche
ces noms sont contenus dans un fichier.

j'espère bien que j'étais clair

Si vous pouvez m'aider n'hésitez pas

Merci d'avance

6 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 avril 2010 à 12:55
Salut,

En application lourde (J2SE) ou en client web (J2EE) ?

Qu'est-ce que tu n'arrives pas à faire ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
trublue Messages postés 37 Date d'inscription vendredi 24 juillet 2009 Statut Membre Dernière intervention 25 mai 2010
17 avril 2010 à 13:01
salut,

En application lourde.
je n'ai pas encore commencer à coder mais je veux faire des idées à propos du codage de ce genre de fonction
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 avril 2010 à 13:07
Salut,

Il y a beaucoup de noms dans ton fichier ?

Pourquoi un fichier ? Tu ne peux pas passer par une base de données ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
trublue Messages postés 37 Date d'inscription vendredi 24 juillet 2009 Statut Membre Dernière intervention 25 mai 2010
17 avril 2010 à 23:45
salut,

Oui il y a beaucoup de noms même des milliers et je dois utiliser un fichier pour les stocker.
J'espère que tu as bien compris ce que je veux faire comme dans google par exemple an tapant un caractère une liste de noms s'affiche et elle se met à jour à chaque fois qu'on tape un autre caractère.

Merci de m'aider si vous pouvez
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 avril 2010 à 07:40
Salut,

Ok, ton problème principal va être la performance : il faut que tu puisse trouver en un temps records les termes qui correspondent le mieux aux caractères tapés par l'utilisateur (si l'utilisateur tape vite, il faut vite chercher...).

Ce que je te conseille de faire (des astuces pour y gagner beaucoup en performance) :
Tu charges tout tes mots en mémoire (dans un ArrayList par exemple), que tu tries (méthode sort de la classe Collections).
Lorsqu'un utilisateur tape un caractère, tu te construis une liste des mots correspondant.

Sachant que ta liste est triée, tu peux gagner énormément de temps en la parcourant par moitié : tu commence par le milieu de ta liste, si le mot trouvé est supérieur aux quelques caractères saisis, alors tu teste le mot au quart de ta liste, sinon, tu teste le mot au 3/4 de ta liste, etc. (c'est le principe du tri rapide, tu y gagnera énormément en temps de traîtement).

Tu n'es pas obligé de faire la recherche à chaque caractères tapé : tu mets un timer dès qu'un nouveau caractère et tapé (de 250 ms par exemple), et tu ne déclenche la recherche qu'au bout de ces 250 ms. Ainsi si l'utilisateur tape 3 caractère en 250 ms, tu ne feras pas 3 recherches, mais une seule avec les 3 caractères, ca donnera le même résultat pour l'utilisateur, mais ca t'économisera pas mal de ressources).

Tu stocke 3 listes, une contenant tout les mots, une correspondant à la recherche précédente, et une correspondant à la recherche courante.
Un exemple : l'utilisateur tape "t", alors tu as :
* ListeComplète (contient tout les mots : 10000 mots)
* ListePrécédente = ListeComplète (contient tout les mots : 10000 mots)
* ListeCourante = Liste des mots commencant par "t" : 200 mots

L'utilisateur tape ensuite "e", alors tu as :
* ListeComplète (contient tout les mots : 10000 mots)
* ListePrécédente = Liste des mots commencant par "t" : 200 mots
* ListeCourante = Liste des mots commencant par "te" : 15 mots, récupérée à partir de la ListePrécédente (donc tu ne parcourts plus que 200 mots au lieu des 10000 !)

L'utilisateur tape ensuite "n", alors tu as :
* ListeComplète (contient tout les mots : 10000 mots)
* ListePrécédente = Liste des mots commencant par "te" : 15 mots
* ListeCourante = Liste des mots commencant par "ten" : 5 mots, récupérée à partir de la ListePrécédente (donc tu ne parcourts plus que 15 mots au lieu des 10000 !)

Ensuite, lorsque l'utilisateur efface une lettre, tu remonte dans ton historique :
L'utilisateur efface la lettre "n", alors tu as :
* ListeComplète (contient tout les mots : 10000 mots)
* ListePrécédente = Liste des mots commencant par "te" : 15 mots
* ListeCourante = ListePrécédente (pas besoin de relancer la recherche).

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
trublue Messages postés 37 Date d'inscription vendredi 24 juillet 2009 Statut Membre Dernière intervention 25 mai 2010
18 avril 2010 à 15:47
salut,

Ok merci beaucoup pour ton aide tu es toujours le 1er a répondre. Je vais commencer à coder et si je rencontre des problèmes je te contacterai ici.

Merci encore une fois
0
Rejoignez-nous