不可变树上的高效随机更新

时间:2013-07-30 01:20:54

标签: c++ data-structures immutability

我在C ++中使用不可变树结构制作可撤销数据结构。通过共享未更改的子节点,我可以非常有效地派生新的不可变树。实际上,在创建撤消快照时,它比可变树更有效。但是,我仍然需要重新创建从root到更新目标的所有节点。这是实惠的,但我想要更好。

我看了拉链结构。据我了解,Zipper专门用于节点的特定位置,如果目标点发生变化则需要重组。会更贵,因为我需要更新随机节点。

我的需求有哪些结构?更有效的随机更新不可变树。

更新

正如@SB所提到的,具有反向操作的可变结构符合我的需要,但我希望避免由于调试的硬度和保持反向操作的正确性而产生的可变结构。所以我不再寻找可变的方法了。

1 个答案:

答案 0 :(得分:1)

如何拥有'转发更改列表'。

因此,当您想要修改树时,只需将操作附加到“更改列表”而不修改树。您可以定期将“更改列表”中的整组更改应用于树并创建新的树快照。只有在每次遍历树时都可以考虑“更改列表”中的更改时,才可以执行此操作。这种方式“撤消”只是在大多数时间从“更改列表”中删除项目。

不知道你在树上做了什么,很难说这种方法是否有意义。

更新:似乎已经发明了这种结构。看看Bw Tree