搜索
bottom↓
回复: 13

问一个算法问题

[复制链接]

出0入55汤圆

发表于 2012-1-13 12:15:55 | 显示全部楼层 |阅读模式
在XY坐标上,已知一些点(大于8小于20且都在第一象限,也就是x>0,y>0),求能将这些点包围的面积最小的长方形。
这怎么弄?

出0入0汤圆

发表于 2012-1-13 12:21:24 | 显示全部楼层
肯定是minX,maxX,minY,maxY

出0入55汤圆

 楼主| 发表于 2012-1-13 12:30:08 | 显示全部楼层
回复【1楼】NJ8888  NJ8888
肯定是minx,maxx,miny,maxy
-----------------------------------------------------------------------

不一定,你这个没旋转。

出0入0汤圆

发表于 2012-1-13 13:24:53 | 显示全部楼层
你看看计算几何的凸包问题吧

我认为可以先求出凸包再根据每个边去找最小的矩形,不过求凸包就把这题目搞得很复杂,我记得有简单的方法,一下子忘了。

PS 我只是知道有二维凸包这个东西的存在 没写过代码 可以参考《算法导论》

——————————

其实不用求凸包

我有点理解错误

我认为可以先枚举一对点,使其他的点都在这一对点形成的直线的一边,再找出离直线最远的那个点,剩下的就好办了

当然这个方法对大数据应该不适用

出0入0汤圆

发表于 2012-1-13 13:56:37 | 显示全部楼层
瞎想了下,不知对不:
(1)找到最小X点以及最小Y点,
(2)然后其他点分别与这两点算距离,得到最大距离,两端点分别为A、B,线AB作为对角线;
(3)再分别算其他点到A、B的值,得到一个最大值,假设有另外一点C到A的距离是最大;
(4)连接B、C两点,从A向BC及其延长线做垂线,得到垂点D;
(5)ABD三点是所求长方形的三个顶点,可求得最后一顶点。

出0入55汤圆

 楼主| 发表于 2012-1-13 14:10:34 | 显示全部楼层
回复【3楼】aheadlead  高中SB
你看看计算几何的凸包问题吧
我认为可以先求出凸包再根据每个边去找最小的矩形,不过求凸包就把这题目搞得很复杂,我记得有简单的方法,一下子忘了。
ps 我只是知道有二维凸包这个东西的存在 没写过代码 可以参考《算法导论》
——————————
其实不用求凸包
我有点理解错误
我认为可以先枚举一对点,使其他的点都在这一对点形成的直线的一边,再找出离直线最远的那个点,剩下的就好办了
当然这个方法对大数据应该不适用
-----------------------------------------------------------------------

算了一下,不同的一对点就会产生不一样的长方形。这样算应该是不对的。

出0入55汤圆

 楼主| 发表于 2012-1-13 14:23:00 | 显示全部楼层
回复【4楼】memo1999  
瞎想了下,不知对不:
(1)找到最小x点以及最小y点,
(2)然后其他点分别与这两点算距离,得到最大距离,两端点分别为a、b,线ab作为对角线;
(3)再分别算其他点到a、b的值,得到一个最大值,假设有另外一点c到a的距离是最大;
(4)连接b、c两点,从a向bc及其延长线做垂线,得到垂点d;
(5)abd三点是所求长方形的三个顶点,可求得最后一顶点。

-----------------------------------------------------------------------

好像第三点有问题,是不是应该改成到c到AB的距离最大。
还有第二点,ab线是否真的是对角线呢?

我试一下。谢谢

出0入0汤圆

发表于 2012-1-13 15:07:33 | 显示全部楼层
很容易
方法很多种:

1. 凸包
2. 椭圆拟合
3. 投影法
4. PCA

出0入0汤圆

发表于 2012-1-13 16:25:18 | 显示全部楼层
回复【5楼】jssd  龙
-----------------------------------------------------------------------

所以说要枚举嘛
枚举的时候记一下最小值

出0入0汤圆

发表于 2012-1-13 16:29:23 | 显示全部楼层
回复【6楼】jssd 龙
回复【4楼】memo1999   
瞎想了下,不知对不:
(1)找到最小x点以及最小y点,
(2)然后其他点分别与这两点算距离,得到最大距离,两端点分别为a、b,线ab作为对角线;
(3)再分别算其他点到a、b的值,得到一个最大值,假设有另外一点c到a的距离是最大;
(4)连接b、c两点,从a向bc及其延长线做垂线,得到垂点d;
(5)abd三点是所求长方形的三个顶点,可求得最后一顶点。
-----------------------------------------------------------------------
好像第三点有问题,是不是应该改成到c到ab的距离最大。
还有第二点,ab线是否真的是对角线呢?
我试一下。谢谢
-----------------------------------------------------------------------
貌似不行,例子如下

(原文件名:未命名.JPG)
A、B、C、D是假设的4个散点,也即矩形ABCD所需要的矩形
若按楼主算法得到的矩形BEGH

我得猜想是:
(1)找出两点间最长的点A、C
(2)线AC作为矩形对角线;
(3)再分别算其他点到AC的值,得到一个最大值,假设有另外一点E到AC的距离是最大;
(4)连接A、E两点,延长AE,过C做AE的垂线,垂足为B;
(5)ABC三点是所求矩形的三个顶点,可求得最后一顶点

(1)(3)费时,不知道对不

出0入0汤圆

发表于 2012-1-13 16:41:22 | 显示全部楼层
回复【6楼】jssd  龙
-----------------------------------------------------------------------

请详细解释
我可能理解不到位
试出了反例

出0入0汤圆

发表于 2012-1-13 16:57:35 | 显示全部楼层
有什么实际意义?

出0入0汤圆

发表于 2012-1-13 17:16:53 | 显示全部楼层
回复【9楼】nomsg
-----------------------------------------------------------------------

按照这个例子算出的对角线也应该是AC或BD啊,你是不是哪里理解错了。

出0入0汤圆

发表于 2012-1-13 17:22:07 | 显示全部楼层
回复【11楼】comway  移动狗
-----------------------------------------------------------------------

莫非USACO整个网站都没有意义了?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 00:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表