我尋找一種有效的算法爲以下的問題之間的距離:有效的算法來在集羣組點由每兩個點
給定一組在二維空間,其中每個點由它的X和定義的點的Y座標。需要這組點分裂成一組集羣,使得如果兩個任意點之間的距離小於某一閾值,這些點必須屬於同一羣集:
換句話說,例如簇是一組相互「足夠接近」的點。
天真的算法是這樣的:
- 讓[R是導致集羣名單,初始爲空
- 讓P是點的列表,最初包含的所有點
- 從P中挑選隨機點並創建一個羣集C其中只包含這一點。從P 4a中刪除從P
- 這一點對於每一個點裨。對於每個點Pc from C 4aa。如果距離(PI,PC)<閾然後添加裨到Ç和如果加入在步驟4到簇Ç的至少一個點從P集合中刪除它
- ,轉到步驟4
- 添加簇C至列表R。如果P不爲空,請轉至步驟3
但是,天真的方法效率非常低。我想知道這個問題是否有更好的算法?
P.S.我不知道集羣的數量先驗
如果計算一個矩陣,其中[x] [y]位置是點x和點y之間的距離。然後,迭代它,以便如果距離小於閾值,則用1標記位置,否則爲0.現在我們有一個圖表,我們可以使用DFS或BFS來查找所有的聚類。它可能不是非常有效,但它將它減少到一個更容易的問題 – spyr03
無論您選擇什麼方法,請確保您將距離平方'(x2 - x1)^ 2 +(y2 - y1)^ 2'與閾值平方進行比較,避免必須計算平方根。 – m69
並考慮將這些點存儲在空間分區樹中。 – m69