#哈希 #哈希 #内部 #算法 #rustc #哈希器 #衍生

未维护 fxhash

一个快速、不安全的哈希算法,由Firefox和Rustc内部使用的哈希器衍生而来

4个版本

使用旧的Rust 2015

0.2.1 2017年7月29日
0.2.0 2017年7月29日
0.1.2 2017年6月26日
0.1.1 2017年6月26日
0.1.0 2017年6月26日

#1128算法

Download history 365469/week @ 2024-03-29 329982/week @ 2024-04-05 346505/week @ 2024-04-12 347501/week @ 2024-04-19 327604/week @ 2024-04-26 312194/week @ 2024-05-03 345295/week @ 2024-05-10 354411/week @ 2024-05-17 344386/week @ 2024-05-24 361568/week @ 2024-05-31 347824/week @ 2024-06-07 366814/week @ 2024-06-14 375567/week @ 2024-06-21 340392/week @ 2024-06-28 358088/week @ 2024-07-05 338318/week @ 2024-07-12

1,473,352 每月下载量
用于 4,289 个crate (393直接)

Apache-2.0/MIT

16KB
291

Fx Hash

此哈希算法是从Rustc编译器中提取出来的。这是Firefox内部某些操作使用的相同哈希算法。该算法的优势在于在64位平台上每次处理8个字节,而FNV算法每次处理一个字节。

免责声明

这不是一个加密安全的哈希,因此强烈建议您不要将此哈希用于加密目的。此外,此哈希算法并非旨在防止任何攻击,以确定可能用于在HashMap中造成二次行为的碰撞。因此,不建议在可能存在碰撞或DDoS攻击的地方公开此哈希。

示例

构建基于Fx的哈希映射。

extern crate fxhash;
use fxhash::FxHashMap;

let mut hashmap = FxHashMap::new();

hashmap.insert("black", 0);
hashmap.insert("white", 255);

构建基于Fx的哈希集。

extern crate fxhash;
use fxhash::FxHashSet;

let mut hashmap = FxHashSet::new();

hashmap.insert("black");
hashmap.insert("white");

基准测试

通常在fxhash上优于fnvu32u64或任何长度大于等于5的字节序列上。然而,请注意,哈希速度并不是唯一值得考虑的特性。话虽如此,当从基于fnv的哈希映射切换到基于fx的哈希映射时,Rustc的速度有所提升。

bench_fnv_003     ... bench:      3 ns/iter (+/- 0)
bench_fnv_004     ... bench:      2 ns/iter (+/- 0)
bench_fnv_011     ... bench:      6 ns/iter (+/- 1)
bench_fnv_012     ... bench:      5 ns/iter (+/- 1)
bench_fnv_023     ... bench:     14 ns/iter (+/- 3)
bench_fnv_024     ... bench:     14 ns/iter (+/- 4)
bench_fnv_068     ... bench:     57 ns/iter (+/- 11)
bench_fnv_132     ... bench:    145 ns/iter (+/- 30)
bench_fx_003      ... bench:      4 ns/iter (+/- 0)
bench_fx_004      ... bench:      3 ns/iter (+/- 1)
bench_fx_011      ... bench:      5 ns/iter (+/- 2)
bench_fx_012      ... bench:      4 ns/iter (+/- 1)
bench_fx_023      ... bench:      7 ns/iter (+/- 3)
bench_fx_024      ... bench:      4 ns/iter (+/- 1)
bench_fx_068      ... bench:     10 ns/iter (+/- 3)
bench_fx_132      ... bench:     19 ns/iter (+/- 5)
bench_seahash_003 ... bench:     30 ns/iter (+/- 12)
bench_seahash_004 ... bench:     32 ns/iter (+/- 22)
bench_seahash_011 ... bench:     30 ns/iter (+/- 4)
bench_seahash_012 ... bench:     31 ns/iter (+/- 1)
bench_seahash_023 ... bench:     32 ns/iter (+/- 6)
bench_seahash_024 ... bench:     31 ns/iter (+/- 5)
bench_seahash_068 ... bench:     40 ns/iter (+/- 9)
bench_seahash_132 ... bench:     50 ns/iter (+/- 12)

依赖关系

~120KB