1 个不稳定版本

0.1.0 2023 年 5 月 19 日

数据结构 中排名第 1081

MIT 许可证

29KB
514

KD 树

License: MIT Version

用于在 k 维空间中高效查找点的数据结构。

这是 Rust 中 KD 树的一个开发中实现。以下是当前已实现的功能和计划实现的功能列表。

  • 构建树
  • 查找半径内的所有点
  • 查找最近邻
  • 插入新点
  • 查找 N 个最近邻
  • 删除点
  • 重新平衡树
  • 序列化树
  • 发布包
  • 添加 K 维度(目前仅支持 2D)
  • 添加示例

最初开发这个项目是为了学习 Rust 并为鸟群模拟实现 KD 树。尽管模拟还在进行中,但我计划随着对 Rust 的了解加深以及时间的允许继续完善这个项目。

性能

KD 树的性能尚未优化。我计划在实现所有功能后进行性能优化。当前的性能是通过 rustup run nightly cargo bench 获取的,如下所示

大小 构建树
O(n)
查找半径内的所有点
O(n log n)
查找最近邻
O(log n)
插入
O(1)
10000 5,798,8 84ns 4,167,605n s
10000 0.005799s 0.004176s
100000 89,055,903ns 473,910,975ns
100000 0.05799s 0.4176s

用法 - TODO

发布正在进行中

use kd_tree::KDTree;

fn main() {
    let mut node: KdNode<i32> = KdNode::new();
    // Tree Root
    node.insert(1, 1);
    node.insert(2, 2);
    node.insert(2, -12);

    assert_eq!(node.nearest_neighbor(Point{x: 1, y: 1}, 1.0), vec![Point{x: 1, y: 1}]);
}

以下是 KD 树结构的示意图。KD 树是一种二叉树,其中每个节点是 k 维空间中的一个点。树的每一层交替由不同的维度分割。根节点由第一个维度分割,根节点的子节点由第二个维度分割,通常在 2D 空间中是 x 和 y 维度。3D 空间将由 x、y 和 z 维度分割。

ImageImage

贡献

欢迎提交拉取请求。对于重大更改,请首先提交一个 issue 以讨论您希望进行的更改。

参考

许可证

MIT

无运行时依赖