算法5-6:Kd树
来源:互联网 发布:linux c编程 编辑:程序博客网 时间:2024/05/22 05:08
问题
给定一系列的点,和一个矩形。求矩形中包含的点的数量。
解答
这个问题可以通过建立矩阵来进行求解。首先将一个空间分割成矩阵,将点放置在对应的格子中,再计算矩形覆盖的格子,再判断格子中的点是否包含在矩形中
这种方法的问题是,可能这些点全都集中在一个格子中。这种情况下算法的效率比较低。
这种问题在地图的应用中非常常见。
因此需要引入2D树的概念,使得矩阵的分解会根据点的密度自动适应。
2D树
下图展示了2D树的样子。
2D树的构建
每次加入一个点时,将平面分成两半。
加入第二个点时,由于第二个点在第一个点的右侧,因此在第一个点的右子节点创建一个新的节点。由于父节点是竖直的,所以子节点需要水平分割。
增加更多的点之后,就会形成如下的二叉树。
搜索操作
搜索矩形中包含的点。
搜索的时候需要从根节点开始。从根节点知道,矩形在节点的左侧,因此只需要搜索左侧即可。到了点3,由于矩形覆盖了两边的区域,因此需要搜索两边。一直迭代循环,直到节点搜索完毕为止。
这种算法的平均复杂度是logN,最坏复杂度是sqrtN。
问题
给定一系列点,和一个待测点。求与待测点最近的点。
用2D树的数据结构时,有时可以将搜索范围缩小到一半。
Kd树就是2D树的推广形式,处理二维以上的数据时非常高效。
N体模拟算法
关键思想就是对于单个质点来说,将距离较远的那些点看成一个质点。
具体实现可以参考论文
http://www.cs.montana.edu/courses/spring2005/580/papers/0906008.pdf
0 0
- 算法5-6:Kd树
- KD树算法
- KNN算法,KD树实现
- KNN算法与Kd树
- KNN算法与Kd树
- KD树详解及KD树最近邻算法
- KD树详解及KD树最近邻算法
- KD树详解及KD树最近邻算法
- KD树在knn算法中的应用
- k近邻算法的实现:kd树
- 数据结构和算法——kd树
- k近邻算法的实现:kd树
- K近邻算法及kd树简介
- k-近邻算法与kd树优化
- KD树
- kd树
- KD树
- kd树
- C/C++ struct初始化/复制/内存分配技巧
- hdu4523威威猫系列故事——过生日
- 摄像机标定技术
- 翻译The compact Org-mode Guide 8.2.7
- zig-zag旋转
- 算法5-6:Kd树
- poj 2524 Ubiquitous Religions——我感觉是并查集(分类是分治)
- Run-Time Check Failure #3 - The variable 'comstat' is being used without being initialized
- 主activity按返回键弹出确认退出对话框
- swift基础(一) 变量和常量和函数
- shuzu
- 算法5-7:区间搜索
- 算法5-8:矩形相交
- UglyNumbers