可以使哪些类的数据结构持久化?


19

持久数据结构是不可变的数据结构。对它们的操作将返回数据结构的新“副本”,但会被操作更改;尽管旧的数据结构保持不变。通常,通过共享一些基础数据并避免完全复制数据结构来实现效率。

问题:

  • 是否存在关于可以使数据结构类别持久化(同时保持相同或非常相似的复杂性)的结果?

  • 是否可以使所有数据结构具有持久性(同时保持相同或非常相似的复杂性)?

  • 是否已知任何数据结构无法持久化(同时保持相同或非常相似的复杂性)?


1
您不能使向量保持持久性以保持O(1)复杂性来访问随机元素。
smossen 2013年


2
@smossen你能证明吗?
Realz Slaw

1
您的第一个问题是一个非常广泛的问题。可以使数据结构持久的结果很多。一个人可以写一本关于该主题的整本书,有些人则认为:例如,冈崎的书是该主题的经典著作。您是否对此主题进行过研究?您可以缩小问题范围吗?就目前而言,我怀疑它可能太宽泛,无法适合该站点。也许将第三个问题分解为一个单独的问题?
DW

@Realz Slaw:我不能正式证明它,但是我认为这是常识。O(1)对向量(包括哈希表)中元素的访问取决于给定硬件上地址解码的固定时间。持久性除矢量索引外还增加了一维或二维。但是硬件地址仍然是一维的。
smossen 2013年

Answers:


22

积极的结果:持久性并不会花费太多。可以证明,每个数据结构都可以完全持久化,而最多只能降低O(lgn)

证明:您可以使用标准数据结构(例如,平衡的二叉树;请参见此答案的末尾以获取更多详细信息)来获取数组并使其持久化。这招致放缓:每个阵列访问采用ø LG Ñ 时间与持久性数据结构中,而不是Ô 1 时间非持久阵列。现在,采用所有在RAM模型中运行时间为O f n )的命令式算法,其中n表示使用的内存量。将所有内存表示为一个大数组(带有O(lgn)O(lgn)O(1)O(f(n))n元素),并使用持久性映射使其持久化。命令式算法的每一步最多导致 O lg n 减慢,因此总运行时间为 O f n lg n nO(lgn)O(f(n)lgn)

显然可以做得更好:显然,可以使用下面引用的Demaine论文中的技术将减速因子降低为(预期的摊销时间),但是我不熟悉细节这项工作,所以我自己不能保证。感谢jbapple的观察。O(lglgn)


负面结果:对于某些数据结构,您不可避免地会放慢速度。为了回答您的第三个问题,存在一些数据结构,在这些数据结构中,使它们持久化会导致速度降低。

特别是考虑元素的数组。在没有持久性的情况下,每个阵列访问都需要O 1 时间(在RAM模型中)。有了持久性,显然已经证明,没有办法为访问随机元素构建具有O 1 最坏情况复杂度的持久性数组。特别是,显然存在一个下限,表明完全持久性阵列必须具有Ω lg lg n )的访问时间。此下限在以下论文的第3页中声明:nO(1)O(1)Ω(lglgn)

下界归因于Mihai Patrascu,但没有引用任何来源提供此断言下界证明的详细信息。


丰富的研究领域。 如果我们采用任意数据结构或算法,那么是否可以在不超过减慢的情况下使其持久化是一个微妙的问题。我不知道任何一般的分类定理。但是,对有效地使特定数据结构持久化的方法有很多研究。O(1)

与功能编程语言也有很强的联系。特别是,可以以纯粹的功能方式(无任何突变)实现的每个数据结构已经是持久性数据结构。(a然,情况不一定相反。)如果您要quin着眼睛,可以将其视为某种弱的部分分类定理:如果它可以在纯函数式编程语言中实现,并且具有与一种命令式语言,则存在一个持久性数据结构,其时间范围与非持久性数据结构相同。我意识到这可能不是您想要的,这主要只是对情况的琐碎重述。


O(lgn)

dd

nO(lgn)O(lgn)O(lgn)

您可以在以下资源中找到带有漂亮图片的更多说明:

那会给你主要思想。有更多细节需要注意,但是细节超出了此问题的范围。幸运的是,这些都是标准的东西,并且在文献中有很多关于如何构建这样的数据结构的信息。如果上面的资源不够用,请随意提出一个单独的问题,您需要有关构建持久性数组数据结构的详细信息的更多信息。


我不太了解第一段,如何使用红黑树使数组持久化?
G. Bach

@ G.Bach,有一个在标有“二叉搜索树”和“随机存取结构”(具体地讲,树方法)在部分相当不错的解释toves.org/books/persist/index.html。有关另一个很好的描述,请参见netcode.ru/dotnet/?artID=6592#BinaryTrees和一些后续部分。那会给你主要思想。详细信息超出了此问题的范围,但这全是标准的东西。我鼓励您提出一个单独的问题,是否需要有关如何构建这种数据结构的更多信息。
DW

4
O(lglgn)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.