2016-10-22 35 views
3

只要距離小於常數t,是否有任何算法比O(n^2)更好地通過直線連接任意兩點?在二維空間中連接任意兩點

我在考慮根據x座標對點進行排序,然後在[x-t,x + t]內尋找另一個點。但最糟糕的情況仍然是O(n^2)。任何想法?我們有什麼特殊的數據結構來加速嗎?

+2

搜索「最接近的對問題」。 –

+0

對t有限制嗎?否則,如果所有點都在彼此的t內,那麼你必須將每個點與每個其他點連接起來,這個點總是O(n^2)。 – TilmannZ

+0

此外,搜索「空間連接」,例如[TOUCH](https://infoscience.epfl.ch/record/186338/files/sigfp132-nobari_1.pdf)算法會查找所有點連接點在最大距離內。但是,您可以通過良好的通用多維索引實現類似的性能(如果需要,我可以推薦一個)。 – TilmannZ

回答

2

一種方法,可以幫助是計算每個點如鬥:

int(x/t),int(y/t) 

即點(0.1,0.9),(0.5,0.5),(0.8,0.2)將全部進入同一個桶。

將所有點放入這些桶中,然後再次迭代點。

這個組織的原因是你只需要檢查一個點對同一個桶或8個相鄰桶中的點。

在壞的情況下,這仍然可能是O(n^2)(例如,如果所有的點都在彼此的t之內),但它在某些情況下可能會有所幫助。

相關問題