http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html proporciona un algoritmo para insertar y eliminar de una tabla de cierre.
Me gustaría modelar una estructura de datos similar, excepto que los nodos pueden tener múltiples padres.
Dado:
Si eliminamos [B, C]
, espero terminar con:
y si eliminamos el nodo B
, espero terminar con:
Sin embargo, si utiliza el algoritmo del autor para eliminar enlaces o nodos, notará que se etiqueta [D, C, 1]
para su eliminación, lo que no es deseable.
Lo que he probado hasta ahora
Intenté adaptar la estructura de datos original agregando una references
columna que indica cuántas formas hay de viajar entre dos nodos. En el ejemplo anterior, puede viajar de A
a C
través B
o a través D
. La idea habría sido que, cuando B
se elimina, se mantiene el camino de A
a C
y el recuento de referencias disminuye de 2 a 1. Fue agradable en teoría, pero no pude averiguar cómo hacer que la implementación funcione y ahora me pregunto si es posible (la estructura de datos puede no contener suficiente información para determinar qué filas eliminar).
Lo que pregunto
¿Cómo adaptaría las tablas de cierre para apoyar a varios padres? ¿Qué estructuras de datos alternativas recomendarías? https://stackoverflow.com/q/4048151/14731 contiene una lista exhaustiva de tales estructuras de datos, pero no está claro cuáles admiten (o son mejores para) varios padres.
references
columna?