一道面试题,坐标系中查找最近点

最近在看机会,前几天去面试,又一次碰壁而回。这次一共做了四道题,都没能够当时就给出明确的解决方案。

刚刚把其中的一题重新做了一下,现在拿出来跟大家分享一下,也期待大家能帮忙想一下有没有更好的解决方案。

题目大概是这样的:

       在一个直角坐标线中,有10万个点,现在给出一个坐标(x,y),快速的找出离这个坐标最近的3个点。       

思路一:

       计算出所有点与这个坐标(x,y)的距离,再排序,取出前三个。

       优缺点分析:这个思路无疑是程序员见到这个题目最直接的反应。但仔细想想,如果坐标点的数量增加到百万千万,再加上大并发的话,服务的压力可想而知。

思路二:

       以(x,y)为中心不断向外画正方形,正方形的面积增量,通过点的密度及一个修正值决定。在找到超过3个点时,调用思路一中的方法。

       优缺点分析:如果让一个人去做这件事,他一定拿起一个圆规,然后目测一下点的分布密度,然后再以(x,y)为中心,画一个圆。这样就大大的缩小了刷选范围。此思路就是来源于此。

曾经不太好的的思路

       1、本来想画圆来着,但是仔细考虑了一下,计算距离需要平方相加再开方,还不如直接比较xy值的大小。

       2、另外也考虑过了二分法确定面积增量,但是考虑到遍历的次数会太多,就放弃了。

简单写了一下代码

       没有写注释,见谅:http://files.cnblogs.com/fantong/Lm.Test.rar

测试结果如下:

转载于:https://www.cnblogs.com/fantong/archive/2013/05/11/3072819.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值