糯米

TI DaVinci, gstreamer, ffmpeg
随笔 - 167, 文章 - 0, 评论 - 47, 引用 - 0
数据加载中……

[小程序]给出一个圆,上面有数个点,任取4个点组成四边形,使得此四边形面积最大

这个问题源于POJ 2500。由于看错了题目,我把题意理解成“给出一个圆,上面有数个点,任取4个点组成四边形,使得此四边形面积最大”。
标程给出的方法是O(N^2),是对于点之间距离固定的情况。
我也想出了一个O(N^2)的算法用于解决任意位置的点的情况。

将点按照顺时针排序
假设四边形的四个点A, B, C, D。按照顺时针方向排序。
按顺序枚举A
   按顺序枚举C
      B取最接近弧AC中心的点,D同理

在纸上画画就可以看出,如果C是递增的,则BD也是递增的。
因此C扫了一圈,BD加起来最多也扫两圈。
枚举A是O(N),枚举C是O(N),BD均摊下来也是O(N)
所以总复杂度是O(N^2)

虽然说复杂度跟标程一样,但还是TLE了,哥很久没写C代码了,现在比较挫。

posted on 2011-01-15 11:07 糯米 阅读(790) 评论(0)  编辑 收藏 引用 所属分类: Algorithm


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理