您的位置:首页 > 职场人生

面试算法之范围搜索问题

2017-09-05 11:31 716 查看
例1:平面上百万个点,设计数据结构求每个点最近的k个点

例2:游戏中打怪时已经各个小怪的坐标,你放一个技能是圆形范围,快速求能打到的小怪

KD树:http://www.cnblogs.com/v-July-v/archive/2012/11/20/3125419.html

最近邻搜索:



k近邻搜索:

参考:
http://blog.csdn.net/dark_scope/article/details/15809445

上文中一直在讲最近邻问题,也就是说只找最近的那唯一一个邻居,但如果现实中需要我们找到k个最近的邻居。该如何做呢?对的,之前blog内曾相近阐述过寻找最小的k个数的问题,显然,寻找k个最近邻与寻找最小的k个数的问题如出一辙。

用大根堆保持K个最小的距离,然后用根的距离(也就是其中最大的一个)来作为判断的依据是否有更近的点不在结果中,这一点很重要!

范围搜索:
以圆心点作为近邻搜索的目标点,以圆的半径作为判断的依据:是否有范围内的点不在结果中。

R树

R树中的R应该代表的是Rectangle

详见:

http://blog.csdn.net/v_july_v/article/details/6530142

例2:搜索小怪:

先对地图上所有小怪建立R树,小怪的最小外接矩形为叶节点

然后搜索以英雄为中心,大招半径*2为边长的正方形

计算所有搜索到的小怪与英雄的距离,若距离小于大招半径则判为中招。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  范围搜索