9个版本
0.1.8 | 2024年4月17日 |
---|---|
0.1.7 | 2022年11月3日 |
0.1.6 | 2022年4月23日 |
936 在 数据结构
每月 26次下载
70KB
1.5K SLoC
LSPH - 学习空间哈希表
由哈希表和统计模型驱动的快速二维点查询
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
许可证
许可协议为以下之一
- Apache许可证2.0版本,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖项
~225KB