我有座標數組,我希望通過點的集中區域對它進行排序。我曾嘗試使用格雷厄姆算法(如下所示),但我沒有得到期望的結果。我可以使用哪些算法進行排序的點,如圖所示在此圖像中:用於排列點濃度數組的算法
來源:
def rotate(A,B,C):
return (B[0]-A[0])*(C[1]-B[1])-(B[1]-A[1])*(C[0]-B[0])
def grahamscan(A):
n = len(A)
P = range(n)
for i in range(1,n):
if A[P[i]][0]<A[P[0]][0]:
P[i], P[0] = P[0], P[i]
for i in range(2,n):
j = i
while j>1 and (rotate(A[P[0]],A[P[j-1]],A[P[j]])<0):
P[j], P[j-1] = P[j-1], P[j]
j -= 1
S = [P[0],P[1]]
for i in range(2,n):
while rotate(A[S[-2]],A[S[-1]],A[P[i]])<0:
del S[-1] # pop(S)
S.append(P[i]) # push(S,P[i])
return S
你有什麼時間限制?數據集有多大? –
我想在本週結束之前完成這項任務。數據大小在1範圍內 - 接近5000個座標。 – Dickordia
我應該說「運行時間約束」。你想如何定義「濃度區」? –