Para grandes conjuntos de datos, un buen candidato para el backend serían los árboles de búsqueda de Ternary. Combinan lo mejor de dos mundos: la baja sobrecarga de espacio de los árboles de búsqueda binarios y la eficiencia de tiempo basada en caracteres de los intentos de búsqueda digital.
Ver en el Dr. Dobbs Journal: http://www.ddj.com/windows/184410528
El objetivo es la rápida recuperación de un conjunto de resultados finitos como el usuario teclea Vamos a considerar en primer lugar que para buscar "la informática", se puede empezar a escribir de "ordenador". o "ciencia" pero no "omputer". Entonces, dada una frase, genere las sub-frases comenzando con una palabra. Ahora, para cada una de las frases, introdúzcalas en el TST (árbol de búsqueda ternario). Cada nodo en el TST representará un prefijo de una frase que se haya tipeado hasta ahora. Almacenaremos los mejores 10 (por ejemplo) resultados para ese prefijo en ese nodo. Si hay muchos más candidatos que la cantidad finita de resultados (10 aquí) para un nodo, debe haber una función de clasificación para resolver la competencia entre dos resultados.
El árbol se puede construir cada pocas horas, dependiendo del dinamismo de los datos.Si los datos están en tiempo real, entonces supongo que algún otro algoritmo dará un mejor equilibrio. En este caso, el requisito absoluto es la recuperación de los resultados al instante para cada pulsación de teclado que hace muy bien.
Surgirán más complicaciones si se trata de sugerencias de correcciones ortográficas. En ese caso, los algoritmos de distancia de edición tendrán que ser considerados también.
Para pequeños conjuntos de datos como una lista de países, una simple implementación de Trie servirá. Si va a implementar un menú desplegable de autocompletar en una aplicación web, el widget de autocompletar de YUI3 hará todo por usted una vez que haya proporcionado los datos en una lista. Si usa YUI3 como interfaz para un autocompletado respaldado por datos grandes, cree los servicios web basados en TST en C++ y luego use el origen de datos del nodo de script del widget de autocompletar para obtener datos del servicio web en lugar de una lista simple.
Poco relacionado es descripción de Peter Norvig de Google cómo hacer la corrección ortográfica: http://norvig.com/spell-correct.html –
Un Trie estándar requiere mucha memoria, para los sets más grandes que desea usar un Trie Compactado que reduce enormemente la huella de memoria. Las optimizaciones adicionales incluyen la inicialización diferida de los valores de nodo y las estructuras de datos correctas para los conjuntos de valores/hijos. Hace un tiempo, creé una [biblioteca de autocompletar] (https://github.com/fmmfonseca/completely) capaz de manejar conjuntos de datos muy grandes (10,000,000+) y responde eficientemente búsquedas exactas y aproximadas. –