news 2026/5/1 10:40:58

KDTree原理介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
KDTree原理介绍

KDTree 之所以快,核心原因是通过空间划分将「暴力遍历」的线性时间复杂度,优化为「分层搜索」的对数时间复杂度,尤其在三维点云近邻搜索场景中优势显著。结合你提供的 FAST-LIO 代码(使用ikd-Tree这个增量式 KDTree 实现),我们可以从原理和工程实现两方面拆解速度优势:

一、 核心原理:空间二分 + 剪枝搜索

KDTree(K-Dimensional Tree)是一种高维空间数据的索引结构,核心思想是「分而治之」,把高维空间划分为多个子空间,搜索时只在目标子空间内查找,避免遍历所有点。

以三维激光点云(x/y/z 三维)为例:

  1. 构建阶段:递归划分空间

    • 选择一个维度(如 x 轴)作为分割轴,找到该维度的中位数点作为分割节点
    • 以分割节点为界,将所有点划分为「左子空间(x <中位数)」和「右子空间(x> 中位数)」;
    • 对左右子空间递归执行上述操作,直到子空间内的点数小于设定阈值(如 10 个点),形成叶子节点。
    • 最终得到一棵二叉树,每个节点对应一个子空间,叶子节点存储少量点。
  2. 搜索阶段:剪枝减少无效遍历当要找某一点的最近邻时,过程如下:

    • 快速定位目标子空间:从根节点出发,根据查询点的维度值(如 x 坐标),逐层向下比较,找到查询点所在的叶子节点;
    • 初步找最近邻:计算该叶子节点内所有点与查询点的距离,记录当前最近邻;
    • 剪枝回溯:向上回溯到父节点,判断「另一子空间是否可能存在更近的点」(通过比较「查询点到分割面的距离」和「当前最近邻距离」):
      • 如果不可能,直接跳过该子空间(剪枝);
      • 如果可能,进入该子空间重复搜索流程。
    • 最终得到全局最近邻。
  3. 复杂度对比(关键!)

    搜索方式时间复杂度适用场景
    暴力遍历所有点O(N)点数极少(<1000)
    KDTree 搜索O(logN)点数多(>10000)

    在 FAST-LIO 中,局部地图点数通常在1 万~10 万级别,KDTree 能将单次近邻搜索时间从毫秒级压缩到微秒级,这也是算法能实时运行的核心保障。

二、 工程优化:ikd-Tree 让增量更新更快

你代码中使用的ikd-Tree是 FAST-LIO 团队优化的增量式 KDTree,相比传统 KDTree 进一步提升了速度,适配激光 SLAM 的「动态增删点」场景:

  1. 增量式更新,而非重建传统 KDTree 是「静态」的,新增 / 删除点需要重建整棵树(时间复杂度 O(NlogN));ikd-Tree支持增量增删:新增点时,直接插入到对应的子空间并调整树结构;删除点时,标记节点状态而非立即重构,仅在树失衡时局部调整。在你代码的map_incremental()函数中,调用ikdtree.Add_Points()就是增量插入,时间复杂度接近 O(logN)。

  2. 结合局部地图的范围约束lasermap_fov_segment()函数中,FAST-LIO 会根据当前位姿维护一个局部立方体空间(参数cube_len控制大小),只保留立方体范围内的点,超出范围的点通过ikdtree.Delete_Point_Boxes()批量删除。这种「局部地图 + 增量 KDTree」的组合,既减少了 KDTree 中的总点数,又避免了全局地图的冗余计算,进一步提升速度。

  3. 并行化搜索(可选)代码中使用了#pragma omp parallel for指令,支持多线程并行搜索多个点的近邻(如h_share_model函数中对所有特征点的近邻搜索),充分利用多核 CPU 算力。

三、 为什么在 FAST-LIO 中快得「恰到好处」

FAST-LIO 是激光 - 惯性里程计,对实时性要求极高(通常需要 10Hz 以上输出)。如果不用 KDTree:

  • 假设局部地图有 5 万个点,当前帧有 1 万个特征点,暴力搜索的总时间为 10000×50000=5×108 次距离计算,耗时秒级,完全无法实时;
  • 用 KDTree 后,总时间为 10000×log2​(50000)≈10000×16=1.6×105 次计算,耗时毫秒级,满足实时性要求。

简单来说:KDTree 把「大海捞针」变成了「按图索骥」,而 ikd-Tree 则让「更新地图」和「捞针」一样高效

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 1:21:10

软件逆向工程框架—Ghidra逆向分析工具使用与实战教程建议收藏!

简介 Ghidra 是由美国国家安全局研究局创建和维护的软件逆向工程 (SRE) 框架 。该框架包括一套功能齐全的高端软件分析工具&#xff0c;使用户能够在包括 Windows、macOS 和 Linux 在内的各种平台上分析编译代码。功能包括反汇编、汇编、反编译、绘图和脚本&#xff0c;以及数百…

作者头像 李华
网站建设 2026/5/1 8:43:35

跨平台场景下Java如何处理大文件上传的版本兼容问题?

大文件传输解决方案设计与实施建议 需求分析与现状评估 作为上海IT行业软件公司项目负责人&#xff0c;针对贵司提出的大文件传输功能需求&#xff0c;我进行了全面分析&#xff1a; 核心需求&#xff1a; 单文件100G传输能力文件夹层级结构保持高可靠性断点续传(支持浏览器刷…

作者头像 李华
网站建设 2026/5/1 2:10:47

3 小时搭一个 AI 打工人:自动发日报、盯数据、推消息

读完本文&#xff0c;你将收获&#xff1a; 理解 n8n 是什么、能做什么、为什么值得选择掌握三种 Docker 部署方案&#xff1a;快速体验版、单机持久化版、生产就绪版学会配置 PostgreSQL 数据库、Nginx 反向代理、HTTPS 证书避开时区、Webhook、数据库膨胀等常见踩坑点拥有一套…

作者头像 李华
网站建设 2026/5/1 7:25:17

云计算与大数据实训室系列产品介绍

在数字经济加速渗透的今天&#xff0c;云计算与大数据技术已成为驱动产业升级的核心引擎&#xff0c;市场对具备实战能力的专业人才需求日益迫切。唯众深耕职业教育与实训领域多年&#xff0c;精准把握行业发展脉搏与教学痛点&#xff0c;打造出涵盖“教、学、练、评”全流程的…

作者头像 李华
网站建设 2026/4/28 11:39:40

产品经理转AI产品经理:5步转行指南+2万学习资源免费送_如何从传统产品经理转行成为顶尖的AI产品经理?

文章讲述了产品经理如何转行成为AI产品经理&#xff0c;强调学习与实践的重要性。AI产品经理需理解AI技术&#xff0c;而不仅是传统产品的需求分析能力。转行需先成为优秀产品经理&#xff0c;系统学习AI知识&#xff0c;在当前业务中寻找AI应用机会&#xff0c;参与AI项目&…

作者头像 李华