http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html fornisce un algoritmo per l'inserimento e l'eliminazione da una tabella di chiusura.
Vorrei modellare una struttura di dati simile, tranne per il fatto che i nodi possono avere più genitori.
Dato:
Se rimuoviamo [B, C]
mi aspetto di finire con:
e se rimuoviamo il nodo B
mi aspetto di finire con:
Tuttavia, se si utilizza l'algoritmo dell'autore per rimuovere collegamenti o nodi, si noterà che viene taggato [D, C, 1]
per l'eliminazione, il che è indesiderabile.
Quello che ho provato finora
Ho provato ad adattare la struttura dei dati originale aggiungendo una references
colonna che indica quanti modi ci sono per viaggiare tra due nodi. Nell'esempio di cui sopra, si può viaggiare da A
a C
sia attraverso B
o tramite D
. L'idea sarebbe stata che quando B
viene rimosso, il percorso da A
a C
viene mantenuto e il conteggio dei riferimenti diminuisce da 2 a 1. In teoria era bello, ma non riuscivo a capire come far funzionare l'implementazione e ora mi chiedo se è assolutamente possibile (la struttura dei dati potrebbe non contenere informazioni sufficienti per capire quali righe rimuovere).
Quello che sto chiedendo
Come adatteresti le Closure Tables per supportare più genitori? Quali strutture di dati alternative consiglieresti? https://stackoverflow.com/q/4048151/14731 contiene un elenco esaustivo di tali strutture di dati, ma non è chiaro quali supportino (o siano i migliori per) più genitori.
references
colonna?