设置数据结构以有效地重复插入


11

我正在寻找一种节省空间的数据结构,该结构可保存wordize元素的集合(无重复)并支持快速插入(摊销O(1))。理想情况下,“节省空间”是指存储n个元素的n+o(n)单词。n

作为一组是问题的一个重要组成部分:如果每个元素添加logn次使用不能成为空间nlogn

该结构还应支持列出其要素(合理有效);任何理智的结构在这里都应该没有问题。(快速的成员资格查询是一个加号。)


2
哈希表不能解决问题吗?
戴夫

@Dave:我认为这不能满足空间要求,但是我认为足够严格的动态调整大小时间表可以使其起作用。但是总的来说,我想在实际编写代码之前先了解一下。
查尔斯

1
要获得具有动态调整大小的摊销O(1),您必须将大小增加一定的比例,如果您要严格满足,那么我认为这不满足空间要求n+o(n)
戴夫

O(1)

@Magnus:我想这意味着问题中O-和O-标记后面的实际功能不取决于字长。
伊藤刚(Tsuyoshi Ito)

Answers:


10

我认为Raman和Rao的“简洁的动态词典和树” 可以满足您指定的范围。从摘要:

SU={0,,m1},|S|=nO(1)SO(1)B+o(B)B=lg(mn)是表示的信息理论最小空间。S


看起来很棒。(不过,您会理解我是否在接受之前阅读了该论文,对吗?)
查尔斯(Charles

1

如果您的应用程序可以容忍一些误报,那么您应该考虑使用Bloom过滤器

维基百科的解释:布隆过滤器是一种节省空间的概率数据结构,用于测试元素是否为集合的成员。误报是可能的,但误报是不可能的。元素可以添加到集合中,但不能删除。添加到集合中的元素越多,误报的可能性越大。


我的不能,但是+1是一个很好的数据结构。
查尔斯
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.