表示稀疏整数集?

时间:2008-12-11 21:31:41

标签: algorithm set

以紧凑而快速的方式表示稀疏整数集(真正的C内存地址)的好方法是什么。我已经知道像位向量和行程编码这样的显而易见的事情了。但我想要比每组元素一个词更紧凑的东西。我需要添加和删除元素并测试成员资格。我不需要其他的集合操作,比如union。

多年前我读过一个这样的图书馆,但后来忘记了它的名字。我认为它是由HP发布的,并且有一个女人的名字。

4 个答案:

答案 0 :(得分:10)

你指的是judy阵列。这是惠普项目。我认为它们用于红宝石,可用于c。非常有趣的数据结构。利用分配(至少)字对齐的事实,为密集和稀疏范围提供单独的结构。

http://judy.sourceforge.net/index.html

答案 1 :(得分:4)

非常紧凑的数据结构将是布隆过滤器,可能是计数布隆过滤器以支持删除。

http://en.wikipedia.org/wiki/Bloom_filter

  

Bloom过滤器由Burton H. Bloom于1970年构思,是一种节省空间的概率数据结构,用于测试元素是否是集合的成员。假阳性是可能的,但假阴性则不然。元素可以添加到集合中,但不会被删除(尽管可以通过计数过滤器来解决)

答案 2 :(得分:1)

如果您只需要插入,删除和测试成员资格,那么哈希表应该很适合您。你可以找到一些好的散列函数来散列32位整数here

答案 3 :(得分:0)

如果您希望结构小于数据集,那么您应该查看某种树排列。将每个级别的4个方向的树键从高端开始从2位开始,它可以很好地压缩(如果指针具有任何程度的空间局部性)。诀窍是将它紧凑地编码(索引到节点数组?数组映射树?)。