Digamos que tengo un grafo dirigido acíclico como una familia "árbol" (no es realmente un árbol ya que un niño tiene 2 padres). Quiero colocar una representación de este gráfico en una base de datos relacional para que sea rápido calcular todos los antepasados de un nodo y todos los descendientes de un nodo. ¿Cómo representarías este gráfico? ¿Cómo consultarías a todos los descendientes? ¿Cómo insertarías y eliminarías nodos y relaciones? ¿Qué suposiciones estás haciendo sobre los datos?consulta de base de datos eficiente para antepasados en un grafo acíclico dirigido
La mejor solución tendrá la mejor gran O para el número de declaraciones select/insert/delete
que ejecuta para consultar ancestros y descendientes, con vínculos interrumpidos por best big O para tiempo de ejecución total, con vínculos interrumpidos por requisitos de espacio.
Mi compañero de trabajo me hizo esta pregunta. Tengo una solución, pero es un tamaño exponencial en el peor de los casos, así que quería ver cómo lo resolverían otras personas.
edición
clarificada base de datos relacional. Esta pregunta es trivial (y aburrida) si usa bases de datos de gráficos con cierres transitivos incorporados.
De hecho, los RDBMS son malos en los gráficos. Aunque no pedí que la pregunta fuera práctica, hice la pregunta porque pensé que era interesante. Estás respondiendo la pregunta incorrecta. –
Ok, bueno que actualizaste la pregunta entonces. – nawroth