如何解决给定N点,如何找到一个圆上的最大点数?
| 昨天,我想到一个有趣的问题,Given N points,how do you find the maximum number of points that are on a circle?
除了蛮力外,您还能提出其他建议吗?什么是O(?)?
解决方法
似乎有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)
实际上给定两个点和两个半径通常是可能的,但是考虑到这一点(将每个组拆分为)不会改变算法的复杂性。
,除退化情况外,平面上的任何三个点都在一个圆上。因此,一种显而易见的O(n4)算法是枚举不在一条线上的所有三个点集(O(n3)),计算圆的中心(也许可以有两个,我不确定)通过这三个点,然后遍历其他点并检查哪些点在同一圆上,进行计数,并在算法完成后报告最大值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。