算法合集之《半平面交的算法及其应用》.doc

上传人:枫** 文档编号:560375868 上传时间:2024-01-14 格式:DOC 页数:5 大小:515.50KB
返回 下载 相关 举报
算法合集之《半平面交的算法及其应用》.doc_第1页
第1页 / 共5页
算法合集之《半平面交的算法及其应用》.doc_第2页
第2页 / 共5页
算法合集之《半平面交的算法及其应用》.doc_第3页
第3页 / 共5页
算法合集之《半平面交的算法及其应用》.doc_第4页
第4页 / 共5页
算法合集之《半平面交的算法及其应用》.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《算法合集之《半平面交的算法及其应用》.doc》由会员分享,可在线阅读,更多相关《算法合集之《半平面交的算法及其应用》.doc(5页珍藏版)》请在金锄头文库上搜索。

1、半平面交的算法及其应用(IOI2002冬令营)第5页 共1页半平面交的算法及其应用基本概念 半平面:平面上的直线及其一侧的部分,在直角坐标系中可由不等式ax+by+c=0确定。在一个有界区域里(在实际计算时不妨设一个足够大的边界),半平面或半平面的交是一个凸多边形区域。n个半平面的交H1H2Hn是一个至多n条边的凸多边形。算法半平面交的联机算法procedure intersection of half-planes输入:n个半平面H1,H2,Hn对应的不等式组aix+biy+ci=0,i=1,2,3n输出:H1H2Hn初始化区域A为整个平面依次用直线aix+biy+ci=0,i=1,2,n切

2、割A,保留使不等式aix+biy+ci=0成立的部分输出A本算法的时间复杂度为O(n*n),并具有联机的优点。半平面交的分治算法假设可以在O(m+n)的时间内将m个半平面的交和n个半平面的交合并,则可以有一种O(n*log(n)的分治算法求半平面的交。Procedure intersection of half-plane (D&C)输入:n个半平面H1,H2,Hn对应的不等式组aix+biy+ci=0,i=1,2,3n输出:H1H2Hn将H1Hn分成两个大小近似相等的集合在每个子问题中递归地计算半平面的交合并两个凸多边形区域形成H1H2Hn所以问题的关键就是怎样在O(m+n)的时间里求两个凸

3、多边形的交。如左图所示,在O(m+n)的时间内将两个凸多边形沿平行于y轴方向切割成至多O(m+n)个梯形区域,每两个梯形区域的交可以在O(1)时间内解决。为了便于操作,确定凸多边形采用了一种特殊的方法。可以看出凸多边形上方和下方的顶点分别构成了一个x坐标递增序列。将这两个序列中的顶点分别作为一个链表存储,得到确定凸多边形区域的上界和下界。算法:procedure intersection of convex polygon输入:两个凸多边形区域A、B输出:C=AB1. 将两个凸多边形的顶点x坐标分类,得到序列xi,i=1p2. 初始化区域C为空。3. 处理x14. 依次处理区域(xi,xi+1

4、,i=1p-1。4.1计算两个多边形在此区域里截得的梯形(可能退化),设为ABCD和 ABCD。4.2求交点ABAB、ABCD、CDAB,将存在的点按x坐标排序,删除重复,添加到C的上界中。用类似的方法求C的下界4.3计算此区域的右侧边界:EF=BCBC。将E、F分别加入C的上界和下界。5.输出C步1:由于A、B的上下界x坐标分别有序,可采用归并排序。复杂度O(m+n)步4:由于是按照x递增的顺序扫描这些区域,每条边界上的指针在整个过程中始终向右移动。两个多边形的每个顶点至多扫描一次。复杂度为O(m+n)。因此整个算法的时间复杂度为O(m+n)。应用问题1:Hotter and Colder

5、(Waterloo local contest)题目简述:A和B在10*10的棋盘上进行一个游戏。A确定一个点P,B每回合移动一次。每次A都会告诉B,他当前所处的位置是离P更近了(Hot)还是更远了(Cold)。(原题还要考虑距离不变的情况。)请在A每次回答后,确定P点可能存在的区域的面积。分析:假设B从C(x1,y1)移动到了D(x2,y2),A回答Hot。则对应这一回合,点P(x,y)所处的位置满足 |CP|DP|,即:(2*x2-2*x1)*x+(2*y2-2*y1)*y+x1*x1+y1*y1-x2*x2-y2*y20。类似地,回答Cold对应于另一个不等式。初始时可能的区域是0,10

6、*0,10。每回合后都用相应的不等式对应的半平面与当前区域求交。并输出交的面积。问题2:Milk (OOPC1)题目简述:SRbGa有一块凸n边形面包,和一盆面积足够大但深度仅为h的牛奶。他想仅蘸k次(每次都保证面包垂直于盆底),使得面包蘸上牛奶的部分面积最大。分析:由于本题规模不大,考虑使用深度优先搜索。蘸每条边都对应剩下的一个半平面,某种蘸k条边E1Ek的方法,剩下的部分就对应于这k个半平面和原多边形的交。考察C(n,k)种蘸法,选其中剩下的面积最小的那种。问题1是用几个半平面顺次求交,并且每次都要输出面积。显然采用联机算法合适。问题2如果用联机算法,复杂度为O(C(n,k)*n),且便于

7、在搜索的过程中剪枝。如果用脱机的分治算法,复杂度为O(C(n,k)*(n+k*log(k)。问题3:Video (CTSC98)题目简述:已知一个多边形P(不一定是凸的)问在P中是否存在点Q,在Q点能观察到整个多边形区域。分析:假设多边形的边界点按逆时针方向给出V0V1V2Vn,V0=Vn。则能够观察到边ViVi+1的点Qi一定满足而且能观察到所有边的点一定能够观察到整个多边形区域。如果用坐标进行叉积运算,则每个约束条件都对应一个二元一次不等式(也对应于一个半平面)。本题就转化为求这n个半平面的交是否不为空。问题4:Triathlon (NEERC2000)题目简述:n名选手参加铁人三项赛,比

8、赛按照选手在三个赛段中所用的总时间排定名次。已知每名选手在三个项目中的速度Ui、Vi、Wi。问对于选手i,能否通过适当的安排三个赛段的长度(但每个赛段的长度都不能为0),来保证他获胜。分析:假设三个赛段的长度分别为x、y、z,则选手i获胜的充要条件就是:这是一个三元齐次不等式组,由于z0,所以不妨将每个不等式两侧都除以z,并令X=x/z,Y=y/z,就得到:本题就转化为求这n-1个不等式对应的半平面的交,并判断其面积是否大于0(即排除空集、点、线段的情况)。问题3和问题4,最终都转化为二元不等式组解的存在性问题。可以用分治算法较有效地解决。问题5:Run away(CERC99)题目简述:在一

9、个矩形R中有n个点P1Pn,请找出一个点QR使得 min(|QPi|)最大。分析:将R分成n个区域,Q1Qn,Qi是离Pi点的距离比离其它点都小的点的集合:Qi可通过在PiPj的中垂线Pi一侧的半平面的交求得。Qi为一个凸多边形。在Qi里,离Pi最远的点只能出现在Qi的顶点上。求其中最远的点即可。求半平面的交采用分治算法,复杂度为O(n*log(n),对应于Pi的多边形最多有O(n)个顶点,因此求Qi中的最远点复杂度为O(n)。总的复杂度为O(n*n*log(n)。实际上,由以上方法定义的n个多边形区域Q1Qn就组成了一个Voronoi图。Voronoi图是计算几何中仅次于凸包的几何对象,有着非常广泛的应用。利用半平面的交求Voronoi图的方法并不是最优的,分治法、平面扫描法等许多算法都能达到O(n*log(n)的复杂度,并且是最优的。但这些算法都过于复杂,不属于本文讨论的范围。参考书目计算几何导论作者:美FP普霍帕拉塔 MI沙莫斯1990年11月第1版计算几何算法分析与设计作者:周培德2000年3月第1版北京四中 李澎煦2002年1月

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号