面试算法之范围搜索问题
2017-09-05 11:31
716 查看
例1:平面上百万个点,设计数据结构求每个点最近的k个点
例2:游戏中打怪时已经各个小怪的坐标,你放一个技能是圆形范围,快速求能打到的小怪
k近邻搜索:
参考:
http://blog.csdn.net/dark_scope/article/details/15809445
上文中一直在讲最近邻问题,也就是说只找最近的那唯一一个邻居,但如果现实中需要我们找到k个最近的邻居。该如何做呢?对的,之前blog内曾相近阐述过寻找最小的k个数的问题,显然,寻找k个最近邻与寻找最小的k个数的问题如出一辙。
用大根堆保持K个最小的距离,然后用根的距离(也就是其中最大的一个)来作为判断的依据是否有更近的点不在结果中,这一点很重要!
范围搜索:
以圆心点作为近邻搜索的目标点,以圆的半径作为判断的依据:是否有范围内的点不在结果中。
详见:
http://blog.csdn.net/v_july_v/article/details/6530142
例2:搜索小怪:
先对地图上所有小怪建立R树,小怪的最小外接矩形为叶节点
然后搜索以英雄为中心,大招半径*2为边长的正方形
计算所有搜索到的小怪与英雄的距离,若距离小于大招半径则判为中招。
例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为边长的正方形
计算所有搜索到的小怪与英雄的距离,若距离小于大招半径则判为中招。
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【034-Search for a Range(搜索一个范围)】
- 1.3 面试问题整理:测试网页的搜索功能
- 深度优先搜索1-城堡问题(算法基础 第6周)
- 前端面试中的常见的算法问题
- 面试算法学习-7-跳台阶问题
- C/C++面试之算法系列--约瑟夫环:每隔两个循环删除数组元素,求最后删除者的下标问题
- 青蛙跳台阶问题,常见面试算法题,斐波那契数列(Fibonacci Sequence)
- 前端面试中的最常见的算法问题
- 经典面试问题:12小球问题算法(文档)
- 经典面试问题:12小球问题算法(文档)
- 程序员代码面试指南:IT名企算法与数据结构题目最优解-字符串问题:C/C++语言实现
- Map/Reduce 算法面试问题列表
- 经典面试问题:12小球问题算法(文档)
- 经典面试问题:12小球问题算法(文档)
- 【面试笔试算法】Problem 1 : DP滑雪问题--网易互联网算法实习生2017笔试题
- 前端面试中常见的算法问题总结
- Java企业面试算法新得体会之3二叉树问题24问
- JavaScript 面试中常见算法问题详解
- 从Cheney算法->广度优先搜索->倒酒问题(JAVA实现)
- baidu搜索研发passort面试问题(yanhui)