算法合集之《长方体的体积并》.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
长方体的体积并 金陵中学 陆可昱 矩形 平面中n个矩形的面积并的计算 方法: 离散 扫描法 线段树 离散 离散点 矩形各边(或其延长线)与坐标轴的交点 离散单位段 离散点有序化后相邻两个离散点之间的距离 扫描法 把平面分割成条,在每个条中环境变成一维的 每一个给定的条的截面都可表现为其相邻两个条截面中任意一个小的修改 线段树 二叉树 每个结点表示一区间[a,b] b-a1: c=(a+b) div 2 [a,c]及[c,d] 长方体 三维空间中n个长方体的体积并的计算 方法: 离散 扫描法 存储平面 二重二叉树 存储平面 x轴二叉树 y轴二叉树 矩形的示意 标号 根结点为1 非叶子结点i 左子结点:2*i 右子结点:2*i+1 T[x1][y1]表示一个平面区间 x1:x轴二叉树 y1:y轴二叉树 插入及删除 C:记录T[x1][y1]的覆盖次数 最终达到的结点: 水平分量:Ax 垂直分量:Ay p∈Ax,q∈Ay:修改T[p][q].C 面积计算 M:记录T[x1][y1]中矩形的面积并 T[x1][y1].C0 T[x1][y1].C=0 AEIH+EBFI+IFCG+HIGD AEIH AEIH ABFH AEGD 修改面积 遇到的结点的标号: 水平分量:Sx 垂直分量:Sy p∈Sx,q∈Sy:修改T[p][q].M 深度较深的结点 标号大 时间复杂度 修改C:O(lg2n) 修改M: O(lg2n) 总的复杂度:O(n*lg2n) 拓展 方法: 离散 扫描法 存储块 d重二叉树 谢谢 * * 大家好,我是南京市金陵中学的学生陆可昱。我这次的题目是求长方体的体积并。 在解决长方体体积并的问题前,先看一下解决矩形面积并时的方法: 先对平面进行离散化,同时将平面分割成条。而后在用扫描法对条进行扫描的同时,利用线段树存储条。从而得解。 下面进行简要的说明。 定义离散点为矩形各边(或其延长线)与坐标轴的交点,如右图的点A,B,C,D; 定义离散单位段为离散点有序化后相邻两个离散点之间的距离,如线段AB,BC,CD 。 在离散之后,可假设图中点A的y轴坐标为1,B为2,C为3,D为4。 如果把平面分割成条,则在每个条中环境变成一维的。 在右图中直线l1(单击鼠标),l2,l3,l4…将平面分成了条。 每一个给定的条(或块)的截面都可表现为其相邻两个条(或块)截面中任意一个小的修改。 图中条二(单击鼠标)的截面则可表现为条一(单击鼠标)的截面加上AB段,或条三(单击鼠标)的截面加上CD段。 线段树是一棵有根二叉树,树中的每一个结点表示了一个区间a,b。对于每个结点,若b与a的差大于1,设c等于a与b的和整除2的商,则此结点将有左子结点a,c,及右子结点c,b。 例如,(单击鼠标)区间1,4,先被分为(单击鼠标)区间1,2,及区间2,4。区间2,4又被分为(单击鼠标)区间2,3及区间3,4。 如同在平面中求n个矩形的面积并一样,求三维空间中n个长方体的体积并的基本思路也是先将空间离散化,而后对被分割的平面进行顺序扫描。不同的是,这次要储存的将是平面,而不是线段。 二重二叉树是一棵用于存储平面的树,它建立于线段树之上。 根据x轴上的区间,应用线段树的构造方式,建立x轴二叉树;同理建造y轴二叉树。 这样即可用x轴二叉树的结点与y轴二叉树的结点,来表示一个二维区间。 尝试将矩形区间(1,5)乘以(3,7)插入二重二叉树。 先是将区间(1,5)插入x轴二叉树,并最终到达结点(1,2)(单击鼠标),(2,4)(单击鼠标), (4,5)(单击鼠标)。 在y轴二叉树上,插入区间(3,7},并最终到达结点(3,4)(单击鼠标),(4,6)(单击鼠标), (6,7)(单击鼠标)。 这样就用两棵二叉树表示了(单击鼠标)矩形区间(1,5)乘以(3,7) 虽然存储二重二叉树的完善的动态形式是可能的,但是为了方便,现采用静态的数组对二重二叉树进行存储。 定义一棵二叉树的根结点标号为1。对其中所有标号为i的非叶子结点,其左子结点的标号为2*i,右子结点的标号为2*i+1。 这样我们就可以用一个二维数组T来存储二重二叉树。 T[x1][y1]表示的平面区间:在水平分量上是x轴二叉树中标号为x1的结点所表示的区间,在垂直分量上是y轴二叉树中标号为y1的结点所表示的区间。 以一个8*8的矩形为例。 首先对二叉树的结点进行编号。 (单击鼠标2次) (5s) 在图示中,这是T[1,12] (单击鼠标),这是 T[5,6] (单击鼠标),这是T[13][8] (单击鼠标)。 对于每个T[x1][y1]都添加一个参数C,用来记录这个区间的被矩形完全覆盖的次数。 在插入或删除一个矩形时, 将水平分量插入x轴二叉树,并用集合Ax存储所有最终达到的结点的标号。 相

文档评论(0)

智慧书苑 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档