http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.htmlは、クロージャーテーブルの挿入と削除のアルゴリズムを提供します。
ノードに複数の親がある場合を除いて、同様のデータ構造をモデル化したいと思います。
与えられた:
削除する[B, C]
と、次のようになると予想します。
ノードを削除すると、次のようになりますB
。
ただし、リンクまたはノードを削除するために作成者のアルゴリズムを使用すると、[D, C, 1]
削除のタグが付けられることに気付くでしょう。これは望ましくありません。
これまでに試したこと
references
2つのノード間を移動する方法がいくつあるかを示す列を追加することにより、元のデータ構造を適応させてみました。上記の例では、からA
までC
、B
またはを経由して移動できますD
。B
削除されると、A
toへのパスC
が保持され、参照カウントが2から1に減少すると考えられていました。理論的には良かったのですが、実装を機能させる方法を理解できなかったので、それはまったく可能です(データ構造には、削除する行を特定するのに十分な情報が含まれていない可能性があります)。
私が求めていること
複数の親をサポートするために、クロージャテーブルをどのように調整しますか?どの代替データ構造をお勧めしますか?https://stackoverflow.com/q/4048151/14731には、そのようなデータ構造の説得力のあるリストが含まれていますが、複数の親をサポートしている(または最適な)構造は明確ではありません。
references
列は何ですか?