使用VLists的哈希表

时间:2009-05-19 09:56:15

标签: data-structures haskell functional-programming hashtable complexity-theory

Phil Bagwell在他的2002 paper on the VList data structure中表示可以使用VList来实现持久性哈希表。然而,他对如何运作的解释并没有包含太多细节,我也不理解。任何人都可以给我一个更详细的解释,甚至是例子吗?

此外,在我看来,我可以看到这个数据结构虽然可能具有与Hashtable相同的大O复杂性,但它会更慢,因为它会进行额外的查找。是否有人关心如何慢慢地进行详细分析,最好包括缓存行为?在没有碰撞或多次碰撞的情况下,两者之间的绩效关系如何变化?

2 个答案:

答案 0 :(得分:4)

我看了一下这篇论文,它似乎非常初步。事实上,没有更新的版本已经发布,并且原件出现在IFL(这是一种正在进行的工作会议中),这表明你可能在浪费你的时间。

答案 1 :(得分:1)

对于该论文提出的数据结构,似乎存在许多问题。

关闭袖口,首先提到的幼稚vlists似乎需要独特的引用,以便获得接近时间保证的任何建议。你失去了大部分分享尾巴的能力。您可以将小节点共享到列表的后面,但是当您将某些内容复制到仍处于活动状态的vlist的cdr时,您最终必须复制最大的vlist节点。该成本与复制整个列表的成本成正比。

随着后面提到的2d修改它再次变得不变,但是它是一个非常大的常量,因为你至少复制了一个页面列表(或者更糟的是,一个vlist)的头部和列表中的第一页。

事实上,那里的功能哈希列表对我来说似乎没有多大意义。这只是一个简短的模糊,似乎用螺栓固定在另一张不相关的纸上,没有足够的细节来真正弄清楚它是多么实用。