4 个稳定版本
2.0.1 | 2021年3月26日 |
---|---|
2.0.0 | 2021年3月22日 |
1.0.1 | 2019年12月31日 |
1.0.0 | 2019年11月28日 |
在 算法 中排名第 791
每月下载量 4,768 次
被 4 个 crate 使用
51KB
730 行
摩顿编码(Z-order 编码)
简介
morton-encoding
crate 提供了方便的函数,可以将原始无符号整数数组转换为摩顿键,并通过同名的编码过程将其转换回来。该过程基本上将所有相同顺序的位分组在一起,这有助于线性化数据点,同时保持一定的局部性。
这个 crate 最初是为了进行分形分析而构建的。尽管如此,摩顿编码也可以用于其他用例,例如高效地搜索数据库。
lindel
crate 是这个 crate 的扩展,还包含希尔伯特函数。
用法
对于大多数用例,morton_encode
和 morton_decode
函数应该足够了。它们的使用方法如下:
let input = 992;
let output: [u8; 5] = morton_decode(input);
assert_eq!(output, [2u8; 5]);
let input = [543u32, 23765];
let encoded_input: u64 = morton_encode(input);
let reassembled_input: [u32; 2] = morton_decode(encoded_input);
assert_eq!(input, reassembled_input);
有关更详细的信息以及有关其他类似 crate 的信息,请参阅 文档。
优点
摩顿编码可以非常高效且无分支地计算。对于需要递归地将可用空间分割成两半的用例,它无与伦比;四叉树和八叉树就是很好的例子。
缺点
与希尔伯特编码等相比,摩顿编码通常不擅长保持局部性。此外,该 crate 仅实现了对每个坐标具有相同数量有效位的用例;对于这种情况不成立的用例,建议用户使用 lindel
。
依赖项
~475KB