我们有一套钥匙。
对于成员资格查询(S中是k?),布隆过滤器通常可以帮助我们快速确定密钥不在集合中。
我们如何过滤范围查询(是否存在S中范围[k1,k2]的关键字?)?
答案 0 :(得分:1)
您可以使用Segment Trees或Fenwick Trees在时间O(log n)中解决此问题。
对于分段树,您可以问问题是[a..b]范围内有位设置吗?这个问题可以及时回答O(log n)。此外,您可以在时间O(log n)中设置(或取消设置)单个位。
与Fenwick Trees类似。
假设:密钥k1,k2等是整数 - 我们必须做出这个假设,以便我们能够理解范围[k1..k2]。
答案 1 :(得分:0)
您是否可以控制要测试的范围的长度?如果范围很小(k2 - k1 <某些小数字),那么您可以使用之前的布隆过滤器并检查范围内的每个k。
答案 2 :(得分:0)
您可以通过确保其中一个哈希值的低位字节/位完整地通过哈希函数来更快地测试多个值。
E.g。你有散列函数f(x)和散列函数g(x)。你定义f(x)使得f(x)= hash_function(x div 16)+ x mod 16。
搜索时,可以搜索f(x)结果周围的2个字节(16位)1位。如果找到一个,请测试匹配的相应值。
这意味着您可以使用快速的双字节检索一次搜索匹配16个值。
请注意,以这种方式使用哈希函数可能会以其他方式影响您的结果。