[問題] 求N點最短距離

看板C_and_CPP (C/C++)作者 (Alfred)時間16年前 (2010/05/13 22:58), 編輯推噓8(806)
留言14則, 10人參與, 最新討論串1/1
這題目是說 在座標上有N個點 求出最短的兩個點的座標 如果有多對一樣最短 就顯示所有最短的座標對 我的想法大致上是 1.先將N個點依序當作圓心 從1為半徑開始創出 圓的方程式 如(4,3)->(X-4)^2+(Y-3)^2 = 1 2.把其他點帶入該方程式 若沒有點落在該圓上或是圓內 便逐漸擴大圓之半徑(每次+1) 直到有點滿足以上條件 3.紀錄滿足其條件的點的座標 以及當時圓的半徑 4.換到下一個點 一樣創方程式 不同的是 半徑從前一次紀錄的長度開始察找 當都無滿足的點 則換到下個點作1. 當有滿足的點 則每次縮小1/2半徑 直到沒有點滿足為止 當在比前一次紀錄的半徑小或是等於時 就找到有滿足的點 則先前紀錄的半徑更新 而先前滿足的點座標一刪除 5.最後剩下的座標在互相比較即得最短距離 問題1:代入方程式的次數大約為N*(N-1) 時間複雜度相當高 問題2:當各點距離遙遠(如:>=100)第一次做察找也會相當費時 問題3:最後候選的點過多(如每個點距離都小於一)就要比上N*(N-1)/2次 综合以上的問題 我絕這不是個好的演算法 不知道版上有沒有高手可以指點迷津 PS:只講演算法即可 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.230.112.251

05/13 23:08, , 1F
Nearest Neighbor Problem?
05/13 23:08, 1F

05/13 23:09, , 2F
任兩點間距離算出來, 資料存到BST裡, 最後再找樹裡最
05/13 23:09, 2F

05/13 23:09, , 3F
左邊幾筆資料
05/13 23:09, 3F

05/14 08:06, , 4F
Closest pair of points problem,維基有,可以做到 O(nlgn)
05/14 08:06, 4F

05/14 08:09, , 5F
答案的組數應該不多?? (我不會估QQ)
05/14 08:09, 5F

05/14 09:49, , 6F
如果要估組數的話, 考慮一下正六邊形
05/14 09:49, 6F

05/14 11:46, , 7F
Divide and Conquer
05/14 11:46, 7F

05/14 11:59, , 8F
KD tree結構試試
05/14 11:59, 8F

05/14 12:00, , 9F
如果今天座標軸不是在二維空間的話你的方法還可以用嗎?
05/14 12:00, 9F

05/14 13:56, , 10F
考慮先對一軸投影
05/14 13:56, 10F

05/14 15:37, , 11F
關鍵字是四樓 楓葉本algo裡面也有
05/14 15:37, 11F

05/14 16:00, , 12F
Thanks
05/14 16:00, 12F

05/14 18:38, , 13F
只要二維的而已
05/14 18:38, 13F

05/14 21:53, , 14F
一樓神速破梗
05/14 21:53, 14F
文章代碼(AID): #1Bx1E4kJ (C_and_CPP)
文章代碼(AID): #1Bx1E4kJ (C_and_CPP)