kd树
kd树是一种二叉树形数据结构和一种查找算法的结合,kd树有好几种,但是思想相同实际应用起来的差异不大,可以只了解其中一种即可。它常用于解决最近邻搜索问题,它能提升k近邻的效率。暂时不需要知道它的详细步骤,会应用即可。
kd树的构建:它的大致流程是依次选择方差大的维度进行划分,为了使构建的树比较平衡会选择中位数进行划分(有的kd树不用中位数进行划分),让中位数作为每一维的节点(它是非叶子节点),这样就形成了二叉树形结构。注意每个非叶子节点都代表一个超平面的一部分用于将数据进行划分,每个叶子节点代表的数据可能不只一个,叶子节点可以理解成根据非叶子节点划分出来的区域,而叶子节点中的数据就是这个区域中的数据。
使用kd树进行查找最近邻:比如要查找2个近邻,它的思想是先找一个最近邻,找到后将它排除后再找第二个。如何寻找第一个近邻可以看b站收藏夹。有空再看。
球树
球树是一种二叉树形数据结构和一种查找算法的结合。暂时不需要知道它的详细步骤,会应用即可。
kd树和球树对比:1、kd树构建一般比球树快。
2、球树比kd树查找快,尤其对于高维数据。