我需要一種算法來查找同一線上等距離點的最大數量。在線上查找最大等距點
輸入:共線點的名單
例如:我的分數可能是
[(1, 1), (1, 2), (1, 3)]
在這種情況下,我可以做的是那種基於他們從起源和尋找距離點距離順序。但是,在下面的情況下,該情況失敗。所有點都在同一行y=-x+6
,並且彼此等距。
[(3, 3), (2, 4), (4, 2), (5, 1), (1, 5)]
因爲所有的點都與原點等距,並且排序順序可能是任何東西,所以順序遍歷是不可能的。例如,如果最終字典變成這個[(3, 3), (5, 1), (4, 2), (2, 4), (1,5)]
,我們最終將計算(3,3)和(5,1)之間的距離,這是不正確的。理想情況下,我想計算最近點之間的距離,因此順序應該是(1,5),(2,4)。
爲了克服這個問題,我通過使用2個循環迭代,並發現最小距離的頻率的任何2個點之間產生的O(N * N)溶液:
import sys
distance_list=[]
lop=[(1, 3), (2, 4), (3, 5), (4, 6), (10, 12), (11, 13), (12, 14), (13, 15), (14, 16)]
lop.sort(key=lambda x: x[0]*x[0] + x[1]*x[1])
for k in range(0, len(lop)):
min_dist=sys.maxint
for l in range(0, len(lop)):
if k!=l:
temp_dist = ((lop[k][0] - lop[l][0])*(lop[k][0] - lop[l][0]) + (lop[k][1] - lop[l][1])*(lop[k][1] - lop[l][1]))
min_dist= min(min_dist, temp_dist)
distance_list.append(min_dist)
print distance_list.count (max(distance_list,key=distance_list.count))
然而,上述解決方案失敗以下測試案例:
[(1, 3), (2, 4), (3, 5), (4, 6), (10, 12), (11, 13), (12, 14), (13, 15), (14, 16)]
預期的答案應該是:5 但是,我越來越:9
從本質上講,我不能確保,如何我是否區分包含等距點的2個點集合;在上面的例子中,這將是
[(1, 3), (2, 4), (3, 5), (4, 6)] AND [(10, 12), (11, 13), (12, 14), (13, 15), (14, 16)]
你能提供一些代碼來顯示你的嘗試嗎? – Nuageux
你是什麼意思失敗?如果它們與原點等距離,那麼任何順序都是正確的排序順序......這就像排序相同數字的數組 – depperm
而我需要一個算法來解決旅行商問題。 – DeepSpace