3

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

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

什么样的结构可以满足我的需要?更有效的不可变树随机更新。

更新

正如@SB 提到的,具有反向操作的可变结构将适合我的需求,但由于调试的难度和保持反向操作的正确性,我想避免可变结构。所以我不再寻找可变的方法了。

4

1 回答 1

1

拥有“更改的转发列表”怎么样。

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

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

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

于 2013-07-30T05:21:01.043 回答