在Java中使用Bloom树进行多集成员资格测试

在Java中使用Bloom树进行多集成员资格测试,java,tree,set,membership,bloom-filter,Java,Tree,Set,Membership,Bloom Filter,我需要解决一个多集成员测试问题。每个值都可能有大量的键,而且需要快速。该问题已在理论(和实践)上得到解决,例如硬件路由器也存在类似问题 本文描述了一种优化的解决方案: 但是,除了数学之外,没有其他语言的实现。我能找到的最接近的匹配是: 还有别的吗?任何JVM语言都可以,如果不行,任何其他编程语言都可以,这样我就可以自己翻译它。我想知道,一个条目可以同时在多个集合中吗?如果没有,那么您可以使用“用于检索和近似成员资格的简洁数据结构”一文中描述的数据结构之一。在(布谷鸟和异或过滤器)上有一些实际的实

我需要解决一个多集成员测试问题。每个值都可能有大量的键,而且需要快速。该问题已在理论(和实践)上得到解决,例如硬件路由器也存在类似问题

本文描述了一种优化的解决方案:

但是,除了数学之外,没有其他语言的实现。我能找到的最接近的匹配是:


还有别的吗?任何JVM语言都可以,如果不行,任何其他编程语言都可以,这样我就可以自己翻译它。

我想知道,一个条目可以同时在多个集合中吗?如果没有,那么您可以使用“用于检索和近似成员资格的简洁数据结构”一文中描述的数据结构之一。在(布谷鸟和异或过滤器)上有一些实际的实现——即使是这样,也需要做一些工作来使API变得有用。我可以帮忙,但需要知道更多信息。是的,条目可以是多个集合。在这种情况下,条目无效,但我们需要检测这种情况。我没有看到FastFilter repo中特别提到的多集成员资格,据我所知,这是不仅检查成员资格,而且将键映射到值的唯一方法。我错过什么了吗?(顺便说一句,你可以用布谷鸟过滤器做的是,在添加条目时,不要像平常那样只添加指纹(布谷鸟过滤器使用指纹,不像布卢姆过滤器)。相反,添加一个指纹加上一个有效负载(例如,8位指纹,8位有效负载)。然后,有效负载会告诉您条目属于哪个集合(或多个集合)。在进行查找时,您不仅会得到“true”或“false”,还会得到一个有效负载列表(空列表表示不在集合中)。使用xor过滤器,可以保证获得一个或零个条目。但是xor过滤器是不可变的。所以我不确定这是否适用于你的案例。啊,这很有趣,谢谢你的解释。我来看看布谷鸟过滤器,它们可能符合要求。我想知道,一个条目可以同时包含多个集合吗?如果没有,那么您可以使用“用于检索和近似成员资格的简洁数据结构”一文中描述的数据结构之一。在(布谷鸟和异或过滤器)上有一些实际的实现——即使是这样,也需要做一些工作来使API变得有用。我可以帮忙,但需要知道更多信息。是的,条目可以是多个集合。在这种情况下,条目无效,但我们需要检测这种情况。我没有看到FastFilter repo中特别提到的多集成员资格,据我所知,这是不仅检查成员资格,而且将键映射到值的唯一方法。我错过什么了吗?(顺便说一句,你可以用布谷鸟过滤器做的是,在添加条目时,不要像平常那样只添加指纹(布谷鸟过滤器使用指纹,不像布卢姆过滤器)。相反,添加一个指纹加上一个有效负载(例如,8位指纹,8位有效负载)。然后,有效负载会告诉您条目属于哪个集合(或多个集合)。在进行查找时,您不仅会得到“true”或“false”,还会得到一个有效负载列表(空列表表示不在集合中)。使用xor过滤器,可以保证获得一个或零个条目。但是xor过滤器是不可变的。所以我不确定这是否适用于你的案例。啊,这很有趣,谢谢你的解释。我来看看布谷鸟过滤器,它们可能符合要求。