簡體   English   中英

在3D中找到最大數量的共線點

[英]Finding biggest number of collinear points in 3D

我得到了一個任務,我必須找到一條直線,通過給定集合中的大多數點(> 5000)。

我能夠解決連接2個點並檢查每個其他點的問題,如果它是共線的,但這是一個O(N ^ 3)算法。

我想知道是否有辦法使我的程序比O(N ^ 3)運行得更好

您可以使用哈希在O(n^2)操作。

  • 對於每對2點找到由它們定義的線方程O(n^2)

    • 將這些等式放在散列O(1) (平均復雜度)中,以計算每個等式的出現次數。
  • 遍歷所有哈希方程並找到計數最多的一個O(n ^ 2) 這是您要搜索的行。

alg的總時間復雜度: O(n^2) * O(1) + O(n^2) = O(n^2)

棘手的一點是,由於浮點精度,同一條線看起來似乎有2個不同的方程。 您需要找到考慮到這一點的哈希函數。


另一種方式是:

  • 將方程放在向量O(n^2)
  • 對向量進行排序O(n^2 log(n^2) = O(n^2 log n)
  • 然后最終找到等長方程O(n ^ 2)的最長序列。

這將具有O(n^2 log n)的最終復雜度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM