[英]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.