#hash #hashing #twisted #integer #tabs #64-bit #tabulation

tab-hash

32位和64位无符号整数的简单和扭曲表哈希

6个版本

0.3.0 2020年2月12日
0.2.1 2019年10月25日
0.1.2 2019年4月29日

#3 in #twisted

MIT许可证

22KB
376

Build Status creates.io-version License: MIT docs.rs

tab-hash - Rust的表哈希

此crate为32位和64位整数值提供简单和扭曲表哈希的Rust实现。

实例化Tab32SimpleTab32Twisted(或其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