- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* Divide and Conquer Method * 应用分治法求解含有n个点的最近对问题,其时间复杂性可由下面的递推式表示: 根据2.1.5节的主定理,可得T(n)=O(nlog2n)。 最近对问题 * Divide and Conquer Method * 4.4 几何问题中的分治法 4.4.1 最近对问题 4.4.2 凸包问题 * Divide and Conquer Method * 凸包问题 [问题]设p1=(x1, y1), p2=(x2, y2), …, pn=(xn, yn)是平面上n个点构成的集合S,凸包问题是为集合S构造最小凸多边形。 [想法]划分:设S中的点按照x轴坐标升序排列,几何学中有这样一个明显的事实:最左边的点p1和最右边的点pn一定是该集合的凸包顶点(即极点)。设p1pn是从p1到pn的直线,这条直线把集合S分成两个子集:S1是位于直线左侧和直线上的点构成的集合,S2是位于直线右侧和直线上的点构成的集合。S1的凸包由下列线段构成:以p1和pn为端点的线段构成的下边界,以及由多条线段构成的上边界,这条上边界称为上包。类似地,S2中的多条线段构成的下边界称为下包。整个集合S的凸包是由上包和下包构成的。 * Divide and Conquer Method * p1 pn 点集合S的上包和下包 S1 S2 凸包问题 pmax * Divide and Conquer Method * p1 pmax pn 求解子问题:首先找到S1中的顶点pmax,它是距离直线p1pn最远的顶点,则三角形pmaxp1pn的面积最大。S1中所有在直线 p1 pmax左侧的点构成集合S1,1,S1中所有在直线pn pmax右侧的点构成集合S1,2,包含在三角形pmaxp1pn之中的点可以不考虑了。递归地继续构造集合S1,1的上包和集合S1,2的上包,然后将求解过程中得到的所有最远距离的点连接起来,就可以得到集合S1的上包。 凸包问题 S1,1 S1,2 * Divide and Conquer Method * 接下来的问题是如何判断一个点是否在给定直线的左侧(或右侧)?几何学中有这样一个定理:如果p1=(x1, y1), p2=(x2, y2), p3=(x3, y3)是平面上的任意三个点,则三角形p1p2p3的面积等于下面这个行列式的绝对值的一半: 当且仅当点p3=(x3, y3)位于直线p1p2的左侧时,该式的符号为正。可以在一个常数时间内检查一个点是否位于两个点确定的直线的左侧,并且可以求得这个点到该直线的距离。 3 1 1 2 2 3 3 2 1 3 2 1 3 3 2 2 1 1 1 1 1 y x y x y x y x y x y x y x y x y x - - - + + = 凸包问题 * Divide and Conquer Method * 算法4.10——求直线pipj的上包 输入:按x坐标升序排列的n(n≥2)个点的集合S={(xi,yi),…,(xj,yj)} 输出:凸包的极点 1.如果n=2,则返回(xi,yi)和(xj,yj) ,算法结束; 2.maxd=0; max=i+1; 3.循环变量k从i+1~j-1,依次对集合S中点pk(xk,yk)执行下列操作; 3.1 如果点pk在直线pipj的上侧,则d=该点到直线的距离; 3.2 如果(dmaxd), 则maxd=d,max=k; 4.递归求解pipmax的上包和pmaxpj的上包 凸包问题 * Divide and Conquer Method * 复杂度的讨论 首先要对点集合S进行排序,设有n个点,则时间代价是O(nlog2n)。 最好情况:每次划分都得到规模大致相等的子集合,O(nlog2n) 最坏情况:每次划分只得到比上一次划分少一个元素的子集合(另一个为空),O(n2) 蛮力法:O(n3) 凸包问题 * Divide and Conquer Method * 补充阅读材料:递归的概念 直接或间接地调用自身的算法称为递归算法(Recursion)。用函数自身给出定义的函数称为递归函数。是一种描述问题和解决问题的基本方法。 由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。 * Divide and Conquer Method * 递归的概念 分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。 递归有两个基本要素: ⑴ 边界条件:确
文档评论(0)