点云最邻近问题–二叉树
- Knn & Fixed Radius NN
-
概述
- 核心思想:空间分割
二叉树
-
特点:key(表达特征):左子树 < root <右子树
-
代码实现:
- value可以是这个节点的一些信息 比如在原来数组的索引,节点颜色…
插入
- 递归插入
-
鉴于时间复杂度的问题 如果二叉树建的不好有时候插入需要遍历整棵树
-
要是采用平衡二叉树时间复杂度会变小
查找
-
递归
-
递归和循环比较
- 递归空间复杂度会大一点 递归多少次就需要多少个变量去储存
- 但现在递归内部实现可能会是循环
二叉树实现1NN
- 找跟11最近的值
- 查找根节点8 那么最坏的结果就会worst distance = 11-8 = 3 现在的查找范围是【8,14】
- 再查找8的右子树 然后得到worst distance = 11-10 = 1 查找的范围就是【8,10】
- 循环上面步骤
实现KNN
-
建立K大小的数组 初始化为无限大 将找到的数字放入 新插入的数字替换其中的数字
-
比如3.5会替换4
- 代码: