No sé si este es el lugar para preguntar acerca de los algoritmos. Pero veamos si recibo alguna respuesta ... :)Trie (árbol de prefijos) en Python
Si algo no está claro, estoy muy contento de aclarar las cosas.
Acabo de implementar un Trie en python. Sin embargo, un poco parecía ser más complicado de lo que debería (como alguien que ama la simplicidad). Tal vez alguien ha tenido un problema similar?
Mi objetivo era minimizar el número de nodos almacenando el prefijo común más grande de un subtitulo en su raíz. Por ejemplo, si tuviéramos las palabras stackoverflow, stackbase y stackbased, entonces el árbol sería algo como esto:
[s]tack
[o]verflow ______/ \_______ [b]ase
\___ [d]
Tenga en cuenta que todavía se puede pensar en los bordes que tienen un carácter (la primero del nodo hijo).
Buscar -query es simple de implementar. inserción no es difícil, pero algo más complejo de lo que quiero .. :(
Mi idea era insertar las teclas una tras otra (partiendo de un trie vacío), por primera vez en busca de la a-ser -Inserted key k (Find (k)), y luego reorganizar/dividir los nodos localmente en el lugar donde se detiene el procedimiento de búsqueda. Resultan ser 4 casos: (Sea k la clave que queremos insertar y k 'ser la clave del nodo, donde terminó la búsqueda)
- k es idéntica a k'
- k es un prefijo "adecuada" de k '
- k' es un prefijo "adecuada" de k
- k y k' compartir algunas prefijo común, pero ninguno de los casos (1), (2) o (3) ocurrir.
Parece que cada uno de los casos son únicos y por lo tanto implican diferentes modificaciones de la Trie. PERO: ¿es realmente tan complejo? ¿Me estoy perdiendo de algo? ¿Hay un mejor enfoque?
Gracias :)
Hay algunas implementaciones de Patricia trata en el Instituto Nacional de Estándares y Tecnología sitio web (http://www.itl.nist.gov/div897/sqg/dads /HTML/patriciatree.html) –
¡Gracias Jason por la referencia y el consejo! Hashing también podría ser una buena técnica cuando se vuelve denso. Pero vamos a mantenerlo simple con respecto a las inserciones :) – jacob
Gracias Kathy por el enlace. – jacob