一道面試題,坐標系中查找最近點


最近在看機會,前幾天去面試,又一次碰壁而回。這次一共做了四道題,都沒能夠當時就給出明確的解決方案。

剛剛把其中的一題重新做了一下,現在拿出來跟大家分享一下,也期待大家能幫忙想一下有沒有更好的解決方案。

題目大概是這樣的:

       在一個直角坐標線中,有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