"BloomFilter" (数据结构)
"BloomFilter"
表示测试元素是否绝对不是成员的集合.
更多信息
- Bloom 过滤器通常被用作概率集合 (probabilistic set),可以测试元素是否绝对不是成员.
- 如果一个元素不是集合的成员,则 Bloom 过滤器对其进行测试将始终返回 False.
- 如果一个元素是集合的成员,则 Bloom 过滤器对其进行测试将始终返回 True:
-
CreateDataStructure[ "BloomFilter",capacity] 创建新的指定 capacity 的 "BloomFilter" CreateDataStructure["BloomFilter", capacity,p] 创建新的误报概率为 p 的 "BloomFilter" Typed[x,"BloomFilter"] 指定 x 的类型为 "BloomFilter" - 对于类型为 "BloomFilter" 的数据结构,可进行以下操作:
-
ds["Capacity"] ds 的存储容量 用时:O(1) ds["Copy"] 返回 ds 的副本 用时:O(n) ds["CouldContain",x] 如果 ds 可能含有 x 则返回 True,否则返回 False 用时:O(1) ds["Insert",x] 把 x 插入 ds 用时:O(1) ds["LoadFactor"] ds 的装载因子 用时:O(1) ds["FalsePositiveProbability"] 返回 ds 的误报概率 用时:O(1) ds["Visualization"] 返回 ds 的可视化 用时:O(n) - 还支持以下函数:
-
dsi===dsj 如果 dsi 等于 dsj 则为 True FullForm[ds] ds 的完全形式 Information[ds] 关于 ds 的信息 InputForm[ds] ds 的输入形式 Normal[ds] 将 ds 转换成普通表达式
范例
打开所有单元关闭所有单元基本范例 (1)
可用 CreateDataStructure 创建新的 "BloomFilter":
范围 (2)
信息 (1)
可用 CreateDataStructure 创建新的 "BloomFilter":
可能存在的问题 (1)
非常满的 Bloom 过滤器更有可能在包含测试 (testing for inclusion) 中返回误报.
创建 Bloom 过滤器并插入许多元素. 可视化显示它看起来非常满:
即使元素从未被插入,包含测试也会返回 True. 这是因为过滤器是满的: