给定N点如何找到圆上的最大点数?

时间:2011-04-14 04:51:48

标签: algorithm math graph

昨天,我想到了一个有趣的问题,Given N points, how do you find the maximum number of points that are on a circle?

除了蛮力外,你能提出什么建议吗?什么是O(?)?

2 个答案:

答案 0 :(得分:16)

似乎有O(N ^ 3 * log N)算法:)

iterate through all pairs of points - O(N^2)
    for each point of the rest compute radius of circle including that point and the selected pair of points - O(N)
    sort points by this radius - O(N*log N)
    select from the resulting array the biggest group with same radius - O(N)

实际上给定两个点和半径通常是两个圆,但考虑到这一点(将每个组拆分为)将不会改变算法的复杂性。

答案 1 :(得分:9)

除了退化情况外,平面上的任何三个点都在一个圆上。所以一个明显的O(n 4 )算法是枚举不在一条线上的所有三个点的集合(O(n 3 )),计算中心的圆(可能有两个,我不确定)通过三个点,然后迭代其他点并检查哪些是在同一个圆上,计数,并在算法完成后,报告最大值。 / p>