与圆有关的离散化方法.doc

与圆有关的离散化方法.doc

ID:27224944

大小:103.50 KB

页数:12页

时间:2018-12-02

与圆有关的离散化方法.doc_第1页
与圆有关的离散化方法.doc_第2页
与圆有关的离散化方法.doc_第3页
与圆有关的离散化方法.doc_第4页
与圆有关的离散化方法.doc_第5页
资源描述:

《与圆有关的离散化方法.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、与圆有关的离散化方法清华附中高逸涵(gaoyihan@gmail.com)【摘要】在计算几何问题中,离散化方法是一种较为通用的算法,在解决一些与矩形等直线型有关的题目时,能大大降低算法的时空复杂度。但当问题与圆相关时,直接离散化法有较大困难。本文讨论了离散化法在这类问题中的方法,然后通过几道例题说明如何利用离散化法解决与圆有关的计算几何问题。【关键字】计算几何圆离散化【正文】引言对于绝大多数算法来说,连续的数据并不是一个合适的处理对象,,必须将其离散化才能处理。高效的离散化方法可以降低问题复杂度,因此如何实现离散化算法是一

2、个有意义的课题。本文通过计算几何中与圆有关问题的分析,研究离散化方法的应用形式。我们先来看一下离散化法是如何解决一道求矩形面积并的题目的:平面上有3个矩形如图,分别为(1,1)-(4,4)、(2,3)-(5,5)、(3,4)-(6,6)。要求出三个矩形的面积并。图1我们利用离散化将连续平面纵轴划分为5个区间:(1—2)、(2—3)、(3—4)、(4—5)、(5—6)。可以看到,在同一区间内的属性一致,即横轴上被矩形所覆盖的区域是相同的,于是每一区域的面积可以通过乘法很快求出,然后再把所有区间的面积求和即可。由此可以看出离散

3、化可以降低复杂性的优势。方法当计算的对象不是矩形而是圆时,例如求3个圆的合并面积,由于圆的边界是一条曲线,不存在固定的矩形区域,似乎不可能利用上述离散化方法来分成类似的各个区域。但是如下图,当我们把纵轴分成如下四个区间时,整个图形被我们分成了6部分,并且每一部分都由简单的弓形和梯形组成,构成复合属性的离散区域,同样可以使问题简化。这提示我们,可以把图形切成若干相对简单的块,使得每一部分的面积都很容易求出。这便是离散化在与圆有关的计算几何中最基础的应用。图2算法的一般步骤:1.根据问题将平面中的圆分割成若干区域,使每个区域具

4、有一定简单的粗粒属性。一般可以用直线分割。2.根据属性确定区域内圆的具体算法,计算每个区域中结果。3.综合每个区域的结果,给出问题的最终答案。应用实例及结果这里我们通过两个例题具体分析来讨论算法的具体应用形式。例一、dolphinpoolPekingUniversityOnlineJudge1688(acm.pku.edu.cn/JudgeOnline)题目大意:平面中有n个圆,任意两圆不相切,没有一个圆的圆心在另一个圆内。求有多少闭合的区域没有被任何圆覆盖。输入:第一行包含一个数n(0

5、行分别输入三个整数圆心坐标x、y和半径r。(1≤x、y≤1000,1≤r≤100)输出:输出一个整数,表示闭合区域的个数。初步分析:虽然题目中已经对圆的位置有了一定的约束,但实际上可能的情况还是很多的,我们希望能找到一种简单而通用的算法。由于数据都是整数,我们的初步想法是这道题的精度要求不高,因此可以采用一种基于floodfill的算法:在平面内每隔一定距离取一个点形成点阵,删除所有在圆内的点,然后在剩下的点中floodfill求连通块,最后减1就是答案。算法复杂度为O(k2n),k为1000长度中取点的个数。图3我们知道

6、,这个算法的正确性或精度取决于k的大小,而对于这道题目的时限来说,这个算法远远不能达到要求,因此我们需要改进算法。第一步离散化:考虑点集的每一横行,我们发现每一个圆在其上覆盖的点一定是连续的。图4于是我们想到在每一横行中不必枚举每一个点,转而计算每一个圆在其上的覆盖区间,这一步可以用数学算法在常数时间内算出。然后合并相交的区间。在预处理时,可以将圆按横坐标排好序,这样在合并区间时会变得更简单。最后根据被覆盖的区间求出未被圆覆盖的区间。仿照方法1,我们将所有的区间记录下来,并在相邻两行有公共部分的区间连一条边,然后求连通块数

7、,最后减1即为答案。由于区间个数太多,无论DFS还是BFS都消耗了太多内存,因此我们可以利用图的特殊性,创造一种效率较高的顺序扫描求连通块数法:1.初始化第一横行(仅有一个区间),这一区间从属于1个集合。2.给下一横行的每一区间初始化一个新的集合仅包含他。3.如果两行中某两个区间有交集,合并他们所从属的集合。4.如果某一集合中的所有区间在下一行都没有继承者,答案加1。5.重复2~4,直到扫描至最后一行。可以看到,这个算法的复杂度为O(nk),在时限内可以得到较高的精度。但是,由于题目中存在某些精度要求非常高的数据,并且此算

8、法本身的精度不够,最终这个算法得到了WrongAnswer。所以,我们仍需要进一步改进。第二步离散化:仔细观察程序,我们发现,似乎有很多无用的工作。如下例:图5在绿色区域中,我们直观的感觉到,这肯定是同一片区域,因为在其中根本就没有其他的圆,而我们的程序却在其中辛苦的一步步跟踪,直到最后确认最下一行确实

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。