- 积分
- 20982
- 明经币
- 个
- 注册时间
- 2013-10-29
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 mahuan1279 于 2025-10-4 09:50 编辑
感觉复杂度可以优化到O(N)。根据推理演算可知,最佳直线必然经过凸包上两点,且与中垂线有交点,必然一顶点在左半图,一顶点在右半图,使用左右指针来依次寻找此两点(左顶点序号1~N/2,右顶点序号N~N/2),不符合要求的顶点依次舍去,最终求得的经过两点的直线就是最佳直线。向左搜点使得直线斜率值减小,向右搜点使得直线斜率值增大。注意收尾时细节处理,左顶点序号不超过N/2,当中间搜到LiRj时,且此时固定Rj,继续依次搜索L(i+1)~L(N/2),均不能使直线斜率值减小时则固定Li直接依次搜索R(j-1)~R(N/2),斜率最大的直线即是最佳直线。同理,右顶点序号不小于N/2,当中间搜到LiRj时,且此时固定Li,继续依次搜索R(j-1)~R(N/2),均不能使直线斜率值增大时,则固定Rj直接依次搜索L(i+1)~L(N/2),斜率最小的直线即是最佳直线。每个点都只搜索了一遍,复杂度为O(N)。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|