news 2026/4/17 12:31:37

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/4/10 17:54:10

黑客必备的网络攻防技术之——Goby+AWVS漏洞扫描

GobyAWVS漏洞扫描 文章目录GobyAWVS漏洞扫描1.什么是AWVS2.AWVS的靶场环境搭建3.靶场搭建4.利用AWVS扫描靶场5.Goby的安装和使用6.近期使用kali遇到的坑&#x1f449;1.成长路线图&学习规划&#x1f448;&#x1f449;2.网安入门到进阶视频教程&#x1f448;&#x1f449;3…

作者头像 李华
网站建设 2026/4/8 20:23:42

网安专业的大学生千万别干这两件事:别让无效消耗毁掉你的竞争力

网络安全行业正处于 “人才缺口 300 万 、薪资年增 15%” 的红利期&#xff0c;但企业招聘的核心门槛始终是 “实战能力”—— 某招聘平台数据显示&#xff0c;80% 的网安岗位要求 “具备项目经验或竞赛获奖经历”&#xff0c;仅 10% 的岗位接受纯理论型求职者。 对于网安专业的…

作者头像 李华
网站建设 2026/4/14 13:14:44

双通信+高精度:网口+隔离485 16位AD模拟量采集模块技术解析

模拟量采集模块作为工业自动化、物联网系统中的关键数据采集单元&#xff0c;核心作用是将温度、压力、流量、液位等物理量转换的电压/电流/热电偶/热电阻等模拟信号精准采集、处理并传输至控制器或上位机&#xff0c;具有精准采集、稳定传输、工业适配、灵活扩展等特性。一、 …

作者头像 李华
网站建设 2026/4/17 8:25:05

Python文件读写全攻略(零基础也能轻松掌握的Python文件操作教程)

在学习Python文件读写的过程中&#xff0c;很多初学者常常感到困惑。其实&#xff0c;只要掌握了基本方法&#xff0c;Python读取文件和Python写入文件是非常简单直观的操作。本文将手把手带你从零开始&#xff0c;全面了解Python文件操作教程中的核心知识点。 一、打开文件&am…

作者头像 李华
网站建设 2026/4/5 10:00:05

RAG入门指南:解决大模型知识更新滞后与幻觉现象的终极方案

RAG&#xff08;检索增强生成&#xff09;是一种结合信息检索和文本生成的技术&#xff0c;通过"先检索后回答"机制解决大模型知识更新滞后和幻觉问题。核心流程包括&#xff1a;从外部知识库检索相关文本片段&#xff0c;将检索内容与用户查询一起输入LLM生成最终答…

作者头像 李华