sách gpt4 ai đã đi

c++ - 具有历史的搜索结构(持久性)

In lại 作者:可可西里 更新时间:2023-11-01 18:38:00 28 4
mua khóa gpt4 Nike

我需要一个类似 map 的数据结构(在 C++ 中)来存储具有以下功能的对 (Key,T):

  • 可以在当前结构中插入新元素(Key,T)
  • 可以在当前结构中根据Key搜索元素
  • 您可以制作当前版本结构的“快照”
  • 您可以切换到拍摄快照的结构版本之一,并从那里继续所有操作
  • 完全删除其中一个版本

我不需要的

  • 从结构中移除元素
  • 将不同版本的结构合并为一个
  • 迭代当前存储在结构中的所有(或部分)元素

换句话说,您有一些可以构建的搜索结构,但您可以随时跳转到历史记录,并以不同的方式扩展该结构的早期/不同版本。稍后您可能会在这些不同版本之间跳转。

在我的项目中,Key 和 T 很可能是整数或指针值,但不是字符串。

主要目的是降低时间复杂度;空间消耗是次要的(但也应该是合理的)。澄清一下,对我来说 log(N)+log(S)(其中元素数量为 N,快照数量为 S)就足够了,尽管越快越好 :)

我对如何实现它有一些粗略的想法---例如:作为二叉搜索树的结构,插入一个新元素可以克隆从根到插入位置的路径,同时保留其余部分树完好无损。切换树版本等同于选择不同版本的根节点,其中一些更改根本不可见。

但是,要使这个自定义树高效(例如自平衡),需要一些额外的努力和仔细的编码。我当然可以自己做,但也许已经有现成的库可以做到这一点?

此外,对于这种我根本不知道的数据结构,可能有一个合适的名称,这使得我的 Google 搜索(或 SO 搜索)完全失败......

感谢您的帮助!

1 Câu trả lời

我认为您正在寻找的是一个不可变的 map 。函数式(或受函数启发的)编程语言(例如 Haskell 或 Scala)具有您在 STL 中找到的大多数容器的不可变版本。插入/删除等操作然后返回 map 的拷贝(保留原始 map )以及包含您请求的修改的拷贝。在设计数据结构方面做了大量工作,以便拷贝能够指向尽可能多的原始数据结构,以减少每个操作的时间和内存复杂度。

您可以在一本书中找到更多详细信息,例如这本书:http://www.amazon.co.uk/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504 .

关于c++ - 具有历史的搜索结构(持久性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11133710/

28 4 0
Bài viết được đề xuất: Android:使用 NDK 构建 native GUI 应用程序?
Bài viết được đề xuất: c++ - C++中的扫描线填充OpenGL/GLUT算法
Bài viết được đề xuất: c++ - 用于矩阵运算的 OpenCV GPU 库有多好?
Bài viết được đề xuất: Android:从JNI方法获取随机数
可可西里
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com