http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html fournit un algorithme pour l'insertion et la suppression d'une table de fermeture.
Je voudrais modéliser une structure de données similaire, sauf que les nœuds peuvent avoir plusieurs parents.
Donné:
Si nous supprimons, [B, C]
je m'attends à me retrouver avec:
et si nous supprimons le nœud, B
je m'attends à finir avec:
Cependant, si vous utilisez l'algorithme de l'auteur pour supprimer des liens ou des nœuds, vous remarquerez qu'il marque [D, C, 1]
pour la suppression, ce qui n'est pas souhaitable.
Ce que j'ai essayé jusqu'à présent
J'ai essayé d'adapter la structure de données d'origine en ajoutant une references
colonne qui indique le nombre de façons de voyager entre deux nœuds. Dans l'exemple ci-dessus, vous pouvez voyager de A
à C
à travers B
ou à travers D
. L'idée aurait été que lors de la B
suppression, le chemin de A
à C
est conservé et le nombre de références diminue de 2 à 1. C'était sympa en théorie, mais je ne pouvais pas comprendre comment faire fonctionner l'implémentation et maintenant je me demande si c'est tout à fait possible (la structure de données peut ne pas contenir suffisamment d'informations pour déterminer les lignes à supprimer).
Ce que je demande
Comment adapteriez-vous les tables de fermeture pour soutenir plusieurs parents? Quelles structures de données alternatives recommanderiez-vous? https://stackoverflow.com/q/4048151/14731 contient une liste exaustive de ces structures de données, mais il n'est pas clair lesquelles prennent en charge (ou sont les meilleures pour) plusieurs parents.
references
colonne?