6个版本
0.3.0 | 2020年2月12日 |
---|---|
0.2.1 | 2019年10月25日 |
0.1.2 | 2019年4月29日 |
#3 in #twisted
22KB
376 行
tab-hash - Rust的表哈希
此crate为32位和64位整数值提供简单和扭曲表哈希的Rust实现。
实例化Tab32Simple
或Tab32Twisted
(或其64位对应版本)将初始化一个表并从相应的哈希族创建一个随机哈希函数。整数键的哈希值是通过调用其hash
方法来计算的。
示例
use tab_hash::Tab32Simple;
fn main() {
let keys = vec![0, 8, 15, 47, 11];
let simple = Tab32Simple::new();
for k in keys {
println!("{}", simple.hash(k));
}
}
为了重现哈希值,保存哈希函数使用的表。可以使用with_table
构造函数重新创建该函数。
use tab_hash::Tab64Twisted;
fn main() {
let key = 42;
let twisted_1 = Tab64Twisted::new();
let twisted_2 = Tab64Twisted::with_table(twisted_1.get_table());
let twisted_3 = Tab64Twisted::new();
assert_eq!(twisted_1.hash(key), twisted_2.hash(key));
assert_ne!(twisted_1.hash(key), twisted_3.hash(key));
}
注意
这些哈希函数没有实现std::hash::Hasher
特质,因为它们不适用于任意长度的字节流。
扭曲表哈希的64位版本(Tab64Twisted
)需要128位操作(见此处)。
文献
此实现基于Mihai Pătraşcu和Mikkel Thorup的文章
变更日志
版本0.3.0 [2020-02-12]
使所有结构体可序列化和反序列化。
依赖项
~1.5–2.5MB
~46K SLoC