Estoy trabajando en una biblioteca tree, y parte de la funcionalidad requerida, es poder buscar en un nodo nodos secundarios que coincidan con un patrón.algoritmo de coincidencia de árbol?
Un 'patrón' es una especificación (o criterio) que establece la estructura, así como los atributos de los nodos en los subárbol (es) que se emparejarán.
Por ejemplo, supongamos que un árbol representa datos sobre una especie de ave en particular. Supongamos además que los nodos de un árbol como tienen los siguientes atributos:
- ubicación
- sexo
- envergadura
- peso
- brood_size
Dado un nodo padre, lo haría gustaría emitir una búsqueda en inglés común así:
"Tráeme todos los pájaros masculinos que son descendientes de esta ave, y viven en ciudad XXX y tienen un peso> 100g. Cualquier ave que se encuentra también debe tener al menos 2 hermanos y una hermana, y debe tener por sí mismo al menos un hijo"
< nota>
Solo para aclarar, no espero ser capaz para consultar utilizando el inglés sencillo como lo hice anteriormente. Solo utilicé la "consulta en inglés simple" para ilustrar el tipo de coincidencia que me gustaría realizar en el árbol. Espero utilizar símbolos para el emparejamiento (en lugar de simple) texto) en la práctica.
</note>
Estoy pensando en posiblemente el uso de un patrón de tipo regex que coincida con los árboles coincidentes. Una forma sería tener una representación de cadena de cada nodo, así que podría usar una expresión regular normal, pero es probable que sea bastante ineficiente, ya que habrá una gran cantidad de datos repetidos, es decir, la representación de cadena de nodos secundarios será superconjuntos de su representación de los padres, que serán superconjuntos de la cadena de representación de sus padres, y así sucesivamente, recíprocamente, en el árbol (esto podría volverse fácilmente difícil de manejar para árboles de tamaño moderado) tiene que haber una mejor manera.
¿Alguien conoce un algoritmo que me permita seleccionar nodos (subárboles) en un nodo, en función de un patrón?
Aunque pedí un algoritmo general, estoy implementando esto en Python. cualquier fragmento que ilustre tal algoritmo (si se puede escribir) sería inmensamente útil.
Probablemente sea mucho mejor usar una lista recursiva, que en realidad estaría haciendo solo con una lista intermedia ➔ cadena ➔ regexp ➔ lista que probablemente no valga la pena. Un ejemplo más concreto ayudaría a obtener una mejor respuesta. – msw
Tiene * 2 * problemas: a) cómo representar una coincidencia de patrón de árbol como una entidad interpretable formal yb) conversión de una consulta en inglés de texto libre en dicho patrón. a) es bien conocido; ver mi respuesta para una opción. b) sigue siendo un tema de investigación; Dudo que quieras intentarlo por tu cuenta. –
@Ira: solo para ser claros, solo usé la "consulta en inglés simple" para ilustrar el tipo de coincidencia que me gustaría realizar en el árbol. Espero usar símbolos para la coincidencia (en lugar de texto sin formato) en la práctica. Creo que voy a editar mi publicación para aclarar que – morpheous