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


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

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

题目大概是这样的:

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

思路一:

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

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

思路二:

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

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

曾经不太好的的思路

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

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

简单写了一下代码

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

测试结果如下:


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM