¿Qué son buenas estructuras de datos para los algoritmos de autocompletado? ¿Qué estructuras de datos permiten encontrar de manera eficiente las cadenas que contienen una subcadena particular?estructura de datos para finalización automática
Respuesta
Si usted está buscando para hacer algo similar a la forma en que Google implementa es autocompletar, es posible que desee comprobar fuera de un ternario árbol de búsqueda:
http://igoro.com/archive/efficient-auto-complete-with-a-ternary-search-tree/
Sin embargo, si usted quiere encontrar cualquier subserie aleatoria dentro de una cadena, intente con un árbol de sufijo generalizado.
¿Eso no funciona solo si solo quieres unir prefijos? p.ej. un árbol de búsqueda ternario lo ayuda a hacer coincidir "ab" en "abcd", pero no "bc" en "abcd" (puede ser grueso, no sabe mucho sobre árboles de búsqueda ternarios, y solo le dio al enlace una mirada fugaz). –
Creo que sí, en general funciona en una x "comienza con" y más o menos. Sin embargo, en la práctica esto parece ser el funcionamiento de todas las funciones de autocompletar que he usado alguna vez. –
entre algunos de los widgets de autocompletado que uso día a día coinciden en cualquier lugar de la cadena; no obstante, enlace útil, entonces +1. –
Salida suffix array y suffix tree.
¡Hombre, he estado buscando el algoritmo de Ukkonen durante años y nunca lo supe! Tengo una aplicación que necesita una coincidencia eficiente de subcadenas con errores. Incluso he preguntado en foros como este en el pasado y no obtuve ningún buen puntero. ¡Me hiciste el día! – swestrup
@swestrup: me alegra que te haya ayudado a rastrear esa información :) Debes obtener una copia de * The Algorithm Design Manual *, http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref = sr_1_1? Ie = UTF8 & s = books & qid = 1268325877 & sr = 8-1 es una invaluable * compilación * de estructuras de datos, algoritmos y bibliografía/referencias de URL;) –
Si está haciendo prefijos (que es lo que la mayoría de autocompleta) entonces un árbol de búsqueda ternario también es lo que yo recomendaría. Si está haciendo infixes generales, vaya con un árbol de sufijos, como se mencionó anteriormente.
Nah, es una idea tonta. Usa árboles de sufijo. Mucho mejor. – swestrup
si es tonto, edita tu respuesta –
Como alternativa a los Arreglos de Sufijo, Arboles y Tries, eche un vistazo a Directed Acyclic Word Graphs (DAWG) y la variante Comprimida (CDAWG). Se pueden construir en tiempo lineal, ocupar espacio lineal y permitir la búsqueda de subcadenas.
Con una función de búsqueda más complicada, puede incluso admitir un conjunto limitado de comodines.
He creado una aplicación para lo que desea. Es el algoritmo de autocompletado alineado basado en el prefijo más eficiente.
Si el conjunto de sugerencias de autocompletado es jerarquizada, un SuggestTree es una buena estructura de datos. Para cualquier prefijo dado, proporciona acceso rápido a las sugerencias superiores k que comienzan con ese prefijo.
- 1. desactivar Eclipse finalización automática
- 2. Finalización automática En wxPython wxComboBox
- 3. Mala finalización automática con python en pydev?
- 4. NetBeans C automática de código emergente de finalización
- 5. Estructura de datos para datos espaciales
- 6. ¿La finalización automática de NetBeans del archivo incluido no funciona?
- 7. ¿Inhabilita la finalización automática de sucursales remotas en Zsh?
- 8. Cómo habilitar la finalización automática en IRB de Ruby
- 9. Estructura de datos utilizada para la estructura de directorios?
- 10. Finalización automática similar a XCode en vim (sin tabulación)?
- 11. Estructura de datos para representar un laberinto
- 12. Estructura de datos para elegir elementos aleatorios?
- 13. Estructura de datos para un mundo aleatorio
- 14. Estructura de datos bidireccionales para esta situación
- 15. Estructura de datos para dados cargados?
- 16. Estructura de datos para almacenar matrices dispersas
- 17. Estructura de datos eficiente para la inserción
- 18. Estructura de datos para almacenar eventos recurrentes?
- 19. ¿Estructura de datos eficiente para las etiquetas?
- 20. Estructura de datos para almacenar Rangos
- 21. Estructura de datos espaciales para juegos
- 22. Estructura de datos para niveles en juegos
- 23. Documentación automática de conjuntos de datos
- 24. Estructura de la base de datos para estructura de datos de árbol
- 25. ¿Estructura de datos para almacenar una gran cantidad de datos?
- 26. ¿la mejor estructura de datos para datos multidimensionales?
- 27. Biblioteca/estructura de datos para manejar datos enormes
- 28. Clase vs estructura de datos
- 29. Estructura de datos en evolución
- 30. RESTful estructura de datos patrones
http://en.wikipedia.org/wiki/Trie – frankc