3 个版本
0.1.2 | 2024年2月29日 |
---|---|
0.1.1 | 2024年2月22日 |
0.1.0 | 2024年2月22日 |
#699 in 数据结构
在 aabel-bloom-rs 中使用
17KB
257 行
Simplee > Aabel > Multi-Hash
一个扩展 Hasher 和 BuildHasher 特性的 crate。这些扩展可以在需要为每个传入项执行多个哈希函数的算法中使用,例如流式算法。例如,bloom filter 和 count-min 使用此类哈希值来表示传入项。
HasherExt 特性
HasherExt 特性通过添加最终化哈希操作和获取无限序列的哈希值的能力来扩展 Hasher 特性。该 crate 提供 PairHasher,它实现了 HasherExt 特性。 PairHasher 是两个单独哈希器的组合器,用于获取哈希值序列,每个值代表一个独立哈希函数的结果。
pub trait HasherExt: Hasher {
fn finish_iter(self) -> impl Iterator<Item = u64>;
}
您可以在 lib.hs 文件中查看 HasherExt 特性的完整定义。
该 crate 提供 PairHasher,它实现了 HasherExt 特性。其实现使用两个哈希器来获取哈希值序列。您可以在 pairhasher.rs 中查看完整定义。
BuildHasherExt 特性
BuildHasherExt 特性扩展了 BuildHasher 特性。它添加了内部构建 HasherExt 特性实例的能力,该实例用于生成哈希值序列。 BuildHasherExt 特性公开了 hashes_one 函数,该函数接受一个项作为输入并返回哈希值序列。您可以在 lib.hs 文件中查看 BuildHasher 特性的定义。
pub trait BuildHasherExt: BuildHasher {
/// Generates the sequece of hash values for a given item.
fn hashes_one<T: Hash>(&self, item: T) -> impl Iterator<Item = u64>;
}
该库提供了实现 BuildHasherExt trait 的 BuildPairHasher。其实例化使用两个哈希构建器,这些构建器用于内部构建一个 PairHasher 实例。您可以在 pairhasher.rs 中找到 BuildPairHasher 的源代码。
BuildPairHasher 是用户获取哈希值序列的主入口点,请参见下面的示例。
示例
use aabel_multihash_rs::{BuildHasherExt, BuildPairHasher};
use std::hash::{BuildHasher, Hash};
// Create the hasher builder
let keys1 = (0, 0);
let keys2 = (1, 1);
let builder = BuildPairHasher::new_with_keys(keys1, keys2);
// The number of hash functions
const HASH_COUNT: usize = 10;
// Compute 10 hash values
let item = "Hello world!";
let hashes = builder
.hashes_one(item)
.take(HASHE_COUNT)
.collect::<Vec<_>>();
assert_eq!(hashes.len(), HASHE_COUNT)
关于
代码在美丽的爱沙尼亚岛屿 Saaremaa 设计和编写。
依赖关系
~370KB