纯功能数据结构中有哪些尚待解决的问题?


51

自1998年冈崎(Okasaki)的书出版以来,有关PFDS的新问题又激发了这个问题。

我将从两个问题开始:

  • 是否有一种纯粹的功能集数据结构可以接近哈希表的速度?尝试还不存在。
  • 是否有O(1)附加的纯功能手指树?迄今为止最好的是由Kaplan和Tarjan设计的O(lg lg n)。

还有哪些其他纯粹的功能数据结构问题?


我认为您的意思是像在哈希树中那样尝试,而不是更常见的具有顺序键的字典?FWIW,我认为这里不可能处理好的旧哈希表。
乔恩·哈罗普

Answers:


19

我会比较宽容地解释这个问题。对于Okasaki风格的数据结构,备注是隐式突变的一种形式,会对运行时间产生副作用。因此,我将考虑严格意义上的持久性数据结构,而不是具有纯功能实现的数据结构,后者是前者的子集。严格来说,我的意思是您应该能够访问数据结构的旧版本而不会受到任何损失,版本树可以任意分支,等等。

在这种情况下,我认为持久的UNION-FIND是一个重要的开放问题。在另一线程中提到了Conchon-Filliâtre论文。评论者已经提出了他们所谓的持久数组的问题:它实际上只是半持久的。但是,假设您将其替换为哈希树或其他真正持久的数组,这些数组在最坏(且可以说是平均)的情况下表现更好,而在最佳情况下的表现则更差。这仍然留下了一个重要的问题:

本文提供了Coq中正确性的形式证明。但是他们无法正式或非正式地解决摊销的复杂性。这是非常明确的,我认为在预期的复杂的幕后的突变导致在所有情况下摊销的复杂性。当我上一次想到它时,我感到有些自信,如果我付出努力的话,我可以构建一个反例。即使我在最后一部分上做错了,也缺乏适当的分析是一个重大差距。显然,Trajan对UNION-FIND进行的经典摊销分析并没有直接转移。


5
有效版本控制的融合持续尝试中介绍了一种完全持久(但不是融合持久)数组的候选对象。作者声称O(lg lg n)减慢,胜过Dietz等人的O(lg lg m)减慢,其中m是对阵列执行的操作数。
jbapple

1
我还要补充一点,尽管Okasaki的惰性摊销结构通常比其他方法要简单得多,但我不知道任何可以以同样方式实现的数据结构也无法实现(在相同的时间范围内,但是最坏的情况)。
jbapple

12

还有哪些其他纯粹的功能数据结构问题?

这是一个:

什么是弱哈希表的纯功能等效项?


15
嗯...。OP请求了未解决的问题,因此这可能是OP的问题的潜在答案。
杰森S

6
好吧,我咬。什么是弱哈希表?
Jeffε

4
这是一个哈希表,如果只有它(和其他弱映射)包含对它的引用,则允许对其元素进行垃圾回收。
Havvy 2012年

3
@JonHarrop:很容易证明弱引用的纯版本是不可能的,因为弱引用使语言的语义变得不确定,而纯粹的功能性语言则是确定性的。如果您另外在类型中标记了不确定性,则通常的实现方式起作用。如果要安全地掩盖效果,则需要依赖类型(以证明不管引用的内容如何,​​实现都给出相同的答案)。
Neel Krishnaswami 2012年

5
@NeelKrishnaswami,我认为情况并非如此。您可以创建不会创建不确定性的弱数据结构,例如不支持枚举(或计数)的弱表。有关示例,请参见wiki.ecmascript.org/doku.php?id=harmony:weak_maps
山姆·托宾·霍斯塔特
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.