我需要一种算法来查找同一线上等距离点的最大数量。在线上查找最大等距点
输入:共线点的名单
例如:我的分数可能是
[(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