1.什么是Kd树,为什么要引入Kd树 knn是寻找k个邻近的点,在这个过程中,需要一个点一个点的与未分类点进行比较,这样的时间复杂度非常高,因此引入了一种原理类似二叉树的Kd树,以减少比较搜索的次数。 kd树的本质思想: A距离B远,B距离C近,那么A距离C也远 出处:黑马程序员: 5.kd树和kd树的构造过程_哔哩哔哩_bilibili 2.大致原理图: 3.具体过程 1>.树的建立 1.构造根结点(即上述的黄色结点),构造包括所有点的超矩形区域(外面的方框)。 2.通过递归的方法,对k维空间进行划分,生成子结点。 在超矩形区域上选择一个坐标轴(找已知点散度较大的分量(最大最小差较大的、方差大的)的方向作为轴),和该方向的一个切分点(已知点中,该方向分量排中间的点(中位数)),过切分点垂直于坐标轴的方向画出一个超平面(垂线、面..),这个超平面将原超矩形区域划分为两个子区域A,B; 对于A,B的划分,选择除了上次选择的分量方向的新轴(也是选择除了上次的,散度最大的),再找划分点,再垂直划分。。。。 3.重复上述过程,直到没有结点为止 举例: 2>.最近邻域搜索 来源黑马程序员的教学视频 例子: 简单不需要跨区域的: 来源黑马程序员的视频 复杂的跨区域的: 来源黑马程序员的视频