我正在寻找像bitset这样的bitset操作的最佳算法,并且发现了许多链接和类似的问题。
例如:Similar Question on Stack-Overflow
然而,有一件事,我试图理解的是,bit set代表了这一点。例如,Lucene已经采用BitSet操作来提供高性能的设置操作,特别是因为它可以在较低级别工作。
然而,在我看来,比特集将开始执行慢和慢,因为元素的数量增加而且集合是稀疏的,比如set有~10个元素,其中元素的最大数量可以是20亿,因为这将呼吁不必要的匹配。你有什么建议?
答案 0 :(得分:3)
比特集对于密集集确实有意义,即覆盖域的重要部分,因为它们代表每个可能的元素。空间和运行时间要求为O(D)
[D =域大小= 20亿!]。
排序集合操作仅代表给定集合中的元素,并且具有O(E)
行为[E =元素数量= 10],更为合适。
比特集很快,效率不高。我的意思是他们隐藏的常数更小。它们对于小型集合来说非常快(比如D <= 1024),因为它们可以在单个CPU指令中处理32/64个元素。
答案 1 :(得分:0)
对于稀疏位集,您可以使用稀疏位图大大提高性能(并减少内存使用),您可以将数据划分为块,而不是将所有内容存储在单个键下。
使用位图进行分析时,您在任何给定时间(例如一天)都有有限数量的活动用户,稀疏位图使用这一事实对他们有利。
无耻插件:http://github.com/bilus/redis-bitops(如果你使用的是Ruby,但那里也有性能提示)。