昨天,我想到了一个有趣的问题,Given N points, how do you find the maximum number of points that are on a circle?
除了蛮力外,你能提出什么建议吗?什么是O(?)?
答案 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>