Pour les grands ensembles de données, un bon candidat pour le backend serait les arbres de recherche ternaires. Ils combinent le meilleur de deux mondes : le faible encombrement des arbres de recherche binaires et l'efficacité temporelle basée sur les caractères des essais de recherche numériques.
Voir dans le journal du Dr Dobbs : http://www.ddj.com/Windows/184410528
L'objectif est d'extraire rapidement un ensemble fini de résultats au fur et à mesure que l'utilisateur tape. Considérons d'abord que pour rechercher "informatique", vous pouvez commencer à taper "ordinateur" ou "science" mais pas "ordinateur". Donc, étant donné une phrase, générer les sous-phrases commençant par un mot. Maintenant, pour chacune des phrases, introduisez-les dans le CT (arbre de recherche ternaire). Chaque nœud du TST représentera un préfixe d'une phrase qui a été tapée jusqu'à présent. Nous stockons les 10 meilleurs résultats (disons) pour ce préfixe dans ce nœud. S'il y a beaucoup plus de candidats que la quantité finie de résultats (10 ici) pour un nœud, il devrait y avoir une fonction de classement pour résoudre la compétition entre deux résultats.
L'arbre peut être construit une fois toutes les quelques heures, en fonction du dynamisme des données. Si les données sont en temps réel, alors je pense qu'un autre algorithme donnera un meilleur équilibre. Dans ce cas, l'exigence absolue est la récupération rapide des résultats pour chaque touche tapée, ce qu'il fait très bien.
Les complications seront plus grandes si l'on suggère des corrections orthographiques. Dans ce cas, les algorithmes de distance d'édition devront également être pris en compte.
Pour les petits ensembles de données comme une liste de pays, une simple implémentation de Trie suffira. Si vous avez l'intention d'implémenter une telle liste déroulante d'autocomplétion dans une application web, le widget d'autocomplétion de YUI3 fera tout pour vous après avoir fourni les données dans une liste. Si vous utilisez YUI3 comme simple frontal pour un autocomplétion soutenu par de grandes données, faites le service web basé sur TST en C++, et utilisez ensuite script la source de données du noeud du widget autocomplétion pour récupérer les données du service web au lieu d'une simple liste.