怎样快速求出离当前位置最近的点?

zyl910 2007-08-06 03:07:47
已知r维空间中某点集S,怎样快速求出离当前位置最近的点?

最简单的算法就是枚举点集S,逐个逐个与当前位置进行比较,最后输出距离最近的那个点。该算法复杂度为O(n),若点集S有上百万个点,那么查询速度将会很慢。

主要是需要解决2维、3维空间中的最近点查询问题,如果有高维空间算法就更好。主要问题类型:
1.二维平直空间。最简单的模型。
2.二维曲面空面。比如在地图上查找最近的地理标注。一般地理标注的数量极大,至少上百万,可以用于验证算法对大规模数据的效率。
3.三维平直空间。比如色彩量化,匹配与当前颜色最接近的调色板颜色。调色板颜色条目数一般为256,可以用于验证算法对小规模数据的效率。

点集S是固定的,不需要考虑动态添加、删除问题。一般将点集S的数据放在普通的关系型数据库中。
...全文
912 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
medie2005 2007-10-15
  • 打赏
  • 举报
回复
对于2维的情形,有经典的分治算法。
对于3维的情形,还是可以用分治法来设计算法。

有一篇论文就是关于这个的:
http://d.download.csdn.net/down/263756/medie2005
zyl910 2007-08-09
  • 打赏
  • 举报
回复
地理标注是非均匀分布的,在城市附近非常稠密,简单的划分小方格是不够的
可以考虑层次性数据结构,比如四叉树
但是四叉树是非均匀空间划分,搜索邻域比较最近距离的算法我一直没写成功


最近翻了许多《计算几何》方面的书在看,发现这个方法似乎不错:
构造Voronoi图,时间复杂度O(nlogn)
将Voronoi图初始化为区域查询结构,时间复杂度O(nlogn)
查找区域,时间复杂度O(logn)


可是问题在于:
1.这些书都是用文字描述算法的,看了半天我不知道如何编程实现。
2.书上介绍都是二维平直空间里的Voronoi图算法,然后说三维或更高维空间的Voronoi图难度与二维问题不在同一个层次。
3.似乎只找到二维平直空间区域查询算法
llg84 2007-08-08
  • 打赏
  • 举报
回复
说掉了一点...最后的结果与指定点的距离应该不大于正方形边长的一半,否则应该扩大正方形重新寻找
llg84 2007-08-08
  • 打赏
  • 举报
回复
如果点的分布比较平均,而且之前没有划分区域的话,可以考虑人为的添加一个区域,比如二维空间之中,以指定点为中心建立一个合适大小的正方形,然后选择所有在这个正方形内的点,然后计算比较距离
llg84 2007-08-08
  • 打赏
  • 举报
回复
加个索引应该是比较好的方法,如果没有任何参考信息的话,就只能一个一个排除了,能改进的只有排除算法
chai2010 2007-08-08
  • 打赏
  • 举报
回复
我平时在处理大量2维点的时候也是将点分到很多小方格中。
和ls的思想一样。

其他的就不清楚了
superarhow 2007-08-08
  • 打赏
  • 举报
回复
感觉可以用一个索引空间来做。例如在二维空间内,先将之分为10x10的格子,在插入每一个点的时候,同时记录它所在的格子索引。这样在判断最近位置的时候,只在最近的格子里面找点就可以了。当然格子根据大小不同也会多少占些内存的,有个取舍问题。

33,025

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧