工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2391|回复: 5

各位看看一道算法题

[复制链接]
发表于 2010-3-29 00:46 | 显示全部楼层 |阅读模式
有2堆2维点集,人一眼就能看出它们是2堆。
在其中某一堆里选择2个点连成一条直线AB;过另一堆里的某个点作一条直线C,C必须平行于AB,使得
1.两个平现线之间的空白处不含有2堆点里的任何一点;
2.这个空白尽可能大.
如何选取这3个点
发表于 2010-3-29 09:39 | 显示全部楼层
是不是这样:
d.gif
寻找A, B, C, 使得d最大?
回复

使用道具 举报

发表于 2010-3-29 20:38 | 显示全部楼层
那不是变成了求一堆的点到二堆边线最短距离集的最大值?
回复

使用道具 举报

 楼主| 发表于 2010-3-29 20:58 | 显示全部楼层
应该不对,这个解无法满足要求。
觉得应该把这些点都变成凸形处理。在两堆中任意选取3个点作三角形,如果这个三角形中间存在其它点,则去掉这些其它的点,然后再选取1个点与三角形的两个顶点作三角形,再重复判断是否存在中间点的步骤,如此下去,最后两堆点应该是形成两个圈,然后再找符合条件的点...
回复

使用道具 举报

发表于 2010-3-31 23:52 | 显示全部楼层
LSSS有图怎样画的
回复

使用道具 举报

发表于 2010-4-2 17:01 | 显示全部楼层
先对其中一堆求凸包O(nlgn)。。然后枚举凸包相邻的两点做AB,O(n),在另一堆枚举点作为C,求出最优,O(n),总复杂度O(n^2)。。
PS:这个是暴力的做法,感觉应该有优于O(n^2)的。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-4-29 09:27

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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