对不可变树进行有效的随机更新
Efficient random update on immutable tree
我正在用C++制作不可变树结构的可撤消数据结构。通过共享不变的子节点,我可以非常有效地派生出新的不可变树。实际上,在创建撤消快照时要比可变树高效得多。然而,我仍然需要重新创建从根到更新目标的所有节点。这是负担得起的,但我想做得更好。
我看了看Zipper结构。据我所知,Zipper专门用于节点的特定位置,如果目标点发生变化,则需要进行重组。会更贵,因为我需要更新随机节点。
什么样的结构可以满足我的需求?更有效的不可变树的随机更新。
更新
正如@SB所提到的,具有反向操作的可变结构适合我的需求,但由于调试的困难和保持反向操作的正确性,我希望避免可变结构。所以我不再寻找可变的方法。
拥有"转发更改列表"怎么样。
因此,当您想修改树时,只需将操作附加到"更改列表"中,而不修改树。您将定期将"更改列表"中的整套更改应用于树,并创建新的树快照。只有当您每次遍历树时都能考虑到"更改列表"中的更改时,这才有可能实现。这种"撤消"方式在大多数情况下只是从"更改列表"中删除项目。
不知道你在用这棵树做什么,很难说这种方法是否有意义。
更新:这样的结构似乎已经被发明了。查看Bw Tree
相关文章:
- 从C++本机插件更新Vector3数组
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么 Serial.println(<char[]>);返回随机字符?
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 字符串-C++后显示的随机字符
- 循环中的随机函数
- 在c++构造函数中使用随机字符串生成器
- cmake更新缓存的变量
- 更新到莫哈韦后出现cmath错误
- 使用std::mt19937从字符串中返回一个随机单词
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 如何在C++中高效地构造随机骰子
- 在类中使用随机生成器时出现性能问题
- OpenMP:并行更新数组总是需要减少数组吗
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 为什么我的数组值会更新为随机值?
- lognormal随机生成器中的参数更新
- 对不可变树进行有效的随机更新
- 为什么要基于随机值更新计时器?