Use Bloom filters 为集合 membership
Bloom filters probabilistically 测试集合 membership 具有否 假负 但可能假 正. Space-efficient 为大 sets.
- 1
Bloom 过滤是 位数组的 m bits 和 k hash 函数. 到添加元素: 集合 bits 在 positions h1(x), h2(x),。.., hk(x) 到 1. 到测试 membership: 检查如果所有 k positions 是 1. 如果任何是 0, 元素是 肯定不 在集合. 如果所有是 1, 它是 可能在 集合 (假正 速率 p ≈ (1 - e^(-kn/m))^k).
- 2 哈希计算器 →
Use 多个 hash 函数 (或 one hash 具有不同 seeds) 到计算 k positions. 为 k=7, m=10000 bits, n=1000 elements: 假正 速率 ≈ 0.8%. Increase m 或 k 到缩减假 正. Use SHA-256 具有不同 salts 为每个 hash 函数.
- 3 Murmur3 哈希 →
Use MurmurHash3 (non-cryptographic, 快) 为 Bloom 过滤哈希. Bloom filters 不 need cryptographic hash 函数 — 它们 need 速度和 均匀分布. MurmurHash3, FNV-1a, 和 xxHash 是好 choices. Use k independent hash 函数 (或双 哈希: h1(x) + i*h2(x) 为 i = 0..k-1).
常见问题
- 如何 I 选择 m 和 k?
- Given n elements 和 desired 假正 速率 p: m = -n*ln(p)/(ln(2))^2 bits, k = (m/n)*ln(2) hash 函数. 为 n=1M, p=1%: m ≈ 9.6M bits (1.2MB), k ≈ 7. 过滤我们 1.2MB 不管的 元素大小 — far 更少 than storing 1M strings.
- 能够 I 移除 elements 从 Bloom 过滤?
- 不从 标准 Bloom 过滤 — 设置 bits 到 0 可能 affect 其他 elements. Use counting Bloom 过滤 (counter 而非 bits) 到支持 deletion, 或 Cuckoo 过滤 (supports deletion, better space 效率). 为最多用例 (caching, deduplication), 不 supporting deletion 是 acceptable.
解决此任务的工作流
内容哈希并 Base64 编码
计算输入哈希并将摘要编码为 Base64 以便紧凑传输。 管道
哈希并验证完整性
计算输入文本的哈希并与期望哈希比对以验证完整性。 管道
哈希文本并用 CRC32 校验
同时计算加密强度高的 SHA-256 哈希和轻量级 CRC32 校验和,用于数据完整性校验。 管道
MD5 哈希后 Base58 编码
计算 MD5 哈希后编码为 Base58。 管道
多哈希速度比较
对输入哈希并基准测试多种哈希算法,比较速度与输出。 管道
生成密码并哈希
生成随机密码后哈希用于安全存储。 管道
SHA3-256 哈希与 CRC32 校验
计算 SHA3-256 哈希再计算 CRC32 校验和,用于双重完整性校验。 管道
SHA-512 哈希后十六进制编码
计算 SHA-512 哈希后编码为十六进制。 管道
文本反转后哈希
反转文本后计算 SHA-256 哈希。 管道
文本扰乱后哈希
扰乱文本后哈希结果。 管道