2008-11-20 12 views
1

Tout le monde connaît cette fonctionnalité. Si vous ouvrez le carnet d'adresses Outlook et que vous commencez à taper un nom, la liste située sous la zone de recherche filtre instantanément pour ne contenir que les éléments correspondant à votre requête. .NET Reflector a une fonctionnalité similaire lorsque vous parcourez les types ... vous commencez à taper, et quelle que soit la taille de l'assemblage sous-jacent que vous parcourez, il est presque instantané.Liste de filtrage rapide

Je me suis toujours demandé quelle était la sauce secrète ici. Comment est-ce si vite? J'imagine qu'il existe aussi différents algorithmes si les données sont présentes en mémoire, ou si elles doivent être récupérées à partir d'une source externe (par exemple, DB, recherche dans un fichier, etc.). Je ne suis pas sûr que ce serait pertinent, mais s'il y a des ressources là-bas, je suis particulièrement intéressé comment faire avec WinForms ... mais si vous connaissez des ressources générales, je suis intéressé dans ceux aussi bien :-)

Répondre

2

What is the most common use of the trie data structure?

a Trie est essentiellement une structure d'arbre pour stocker une grande liste de chaînes similaires, qui fournit des chaînes rapide recherche (comme une table de hachage) et vous permet de parcourir plus les dans l'ordre alphabétique.

Image de: http://en.wikipedia.org/wiki/Trie:
alt text

Dans ce cas, la Trie stocke les chaînes:
i
dans
auberge
à
thé
dix

Pour n'importe quel préfixe que vous entrez (par exemple, 't ', ou' te '), vous pouvez facilement rechercher tous les mots qui commencent par ce préfixe. Plus important encore, les recherches dépendent de la longueur de la chaîne, et non du nombre de chaînes stockées dans le Trie. Lisez l'article wikipedia que j'ai référencé pour en savoir plus.

+0

Je suis proche de ma limite de 200 rep/jour. Je vous serais reconnaissant si vous avez attendu jusqu'à demain pour upvote ou accepter. :) – Cybis

+0

C'est demain maintenant. – Cybis

1

Le processus est appelé indexation/recherche de texte intégral.

Si vous voulez jouer avec les algorithmes et les structures de données pour cela, je vous recommande de lire Programming Collective Intelligence pour une bonne introduction sur le terrain, si vous voulez juste la fonctionnalité que je recommanderais lucene.