Representing sparse integer sets?

后端 未结 4 1771
抹茶落季
抹茶落季 2021-01-04 05:47

What is a good way to represent sparse set of integers (really C memory addresses) in a compact and fast way. I already know about the obvious things like bit-vectors and ru

相关标签:
4条回答
  • 2021-01-04 06:05

    You are referring to a judy array. It was a HP project. I think they are used in ruby and are available in c. Very interesting data structure. Making use of the fact that allocations are (at least) word aligned, having separate structures for dense and sparse ranges.

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

    0 讨论(0)
  • 2021-01-04 06:15

    If you want the structure smaller than the data set than you should probably look at some kind of tree arrangement. Make each level of a 4 way the tree key off 2 bits starting at the high end and it might compact quite well (if the pointers have any degree of spacial locality). The trick would be encoding it compactly enough (indexes into arrays of nodes? an array mapped tree?).

    0 讨论(0)
  • 2021-01-04 06:26

    A very compact data structure would be a bloom filter, perhaps a counting bloom filter to support deletions.

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

    The Bloom filter, conceived by Burton H. Bloom in 1970, is a space-efficient probabilistic data structure that is used to test whether an element is a member of a set. False positives are possible, but false negatives are not. Elements can be added to the set, but not removed (though this can be addressed with a counting filter)

    0 讨论(0)
  • 2021-01-04 06:30

    If all you need is insertion, deletion, and test for membership, then a hash table should suit you nicely. You can find some good hash functions for hashing 32-bit integers here.

    0 讨论(0)
提交回复
热议问题