9个版本

0.1.8 2024年4月17日
0.1.7 2022年11月3日
0.1.6 2022年4月23日

936数据结构

每月 26次下载

MIT/Apache

70KB
1.5K SLoC

LSPH - 学习空间哈希表

由哈希表和统计模型驱动的快速二维点查询

Github Workflow crates.io version dos.io dependency status

LSPH的原始论文可以在这里找到。

LSPH使用如线性回归模型等学习模型作为哈希函数来预测哈希表中的索引。因此,学习模型更符合哈希表中存储的数据,并减少了哈希冲突的机会。此外,如果学习模型是单调函数(例如线性回归),随着输入数据的增加,哈希索引也会增加。这一特性可以用于创建哈希表桶的排序顺序,使我们能够对哈希表进行范围搜索。

LSPH支持

  • 点查询
  • 矩形查询
  • 半径范围查询
  • 最近邻查询

示例

use lsph::{LearnedHashMap, LinearModel};
let point_data = vec![[1., 1.], [2., 1.], [3., 2.], [4., 4.]];
let (mut map, points) = LearnedHashMap::<LinearModel<f32>, f64>::with_data(&point_data).unwrap();

assert_eq!(map.get(&[1., 1.]).is_some(), true);
assert_eq!(map.get(&[3., 1.]).is_none(), true);
assert_eq!(map.range_search(&[0., 0.], &[3., 3.]).is_some(), true);
assert_eq!(map.radius_range(&[2., 1.], 1.).is_some(), true);
assert_eq!(map.nearest_neighbor(&[2., 1.]).is_some(), true);

运行基准测试

cargo bench

许可证

许可协议为以下之一

任选其一。

依赖项

~225KB