http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html fornece um algoritmo para inserir e excluir de uma tabela de fechamento.
Eu gostaria de modelar uma estrutura de dados semelhante, exceto que os nós podem ter vários pais.
Dado:
Se removermos [B, C]
, espero terminar com:
e se removermos o nó B
, espero terminar com:
No entanto, se você usar o algoritmo do autor para remover links ou nós, notará que ele marca [D, C, 1]
para exclusão, o que é indesejável.
O que eu tentei até agora
Tentei adaptar a estrutura de dados original adicionando uma references
coluna que indica quantas maneiras existem para viajar entre dois nós. No exemplo acima, você pode viajar de A
para C
através B
ou através D
. A idéia seria que, quando B
removida, o caminho de A
para C
é mantido e a contagem de referência diminui de 2 para 1. Foi legal em teoria, mas não consegui descobrir como fazer a implementação funcionar e agora me pergunto se é possível (a estrutura de dados pode não conter informações suficientes para descobrir quais linhas remover).
O que estou perguntando
Como você adaptaria as tabelas de fechamento para apoiar vários pais? Quais estruturas de dados alternativas você recomendaria? https://stackoverflow.com/q/4048151/14731 contém uma lista exaustiva dessas estruturas de dados, mas não está claro quais suportam (ou são melhores para) vários pais.
references
coluna?