浅谈用极大化思想解决最大子矩形问题.docxVIP

浅谈用极大化思想解决最大子矩形问题.docx

  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文档。上传文档
查看更多
王知昆 第?1?页 IOI2003?国家集训队论文 浅谈用极大化思想解决最大子矩形问题 福州第三中学 王知昆 【摘要】 本文针对一类近期经常出现的有关最大(或最优)子矩形及相关变 形问题,介绍了极大化思想在这类问题中的应用。分析了两个具有一定 通用性的算法。并通过一些例题讲述了这些算法选择和使用时的一些技 巧。 【关键字】 矩形,障碍点,极大子矩形 【正文】 一、?问题 最大子矩形问题:在一个给定的矩形网格中有一些障碍点,要找出网格内部不 包含任何障碍点,且边界与坐标轴平行的最大子矩形。 这是近期经常出现的问题,例如冬令营?2002?的《奶牛浴场》,就属于最大 子矩形问题。 Winter?Camp2002,奶牛浴场 题意简述:(原题见论文附件) John?要在矩形牛场中建造一个大型浴场,但是这个大型浴场不能包含任 何一个奶牛的产奶点,但产奶点可以出在浴场的边界上。John?的牛场和规划 的浴场都是矩形,浴场要完全位于牛场之内,并且浴场的轮廓要与牛场的轮 廓平行或者重合。要求所求浴场的面积尽可能大。 参数约定:产奶点的个数?S?不超过?5000,牛场的范围?N×M?不超过 30000×30000。 二、?定义和说明 首先明确一些概念。 1、定义有效子矩形为内部不包含任何障碍点且边界与坐标轴平行的子矩形。如 图所示,第一个是有效子矩形(尽管边界上有障碍点),第二个不是有效子矩形 (因为内部含有障碍点)。 王知昆 第?2?页 IOI2003?国家集训队论文 2、极大有效子矩形:一个有效子矩形,如果不存在包含它且比它大的有效子矩 形,就称这个有效子矩形为极大有效子矩形。(为了叙述方便,以下称为极大子 矩形) 3、定义最大有效子矩形为所有有效子矩形中最大的一个(或多个)。以下简称 为最大子矩形。 三、?极大化思想 【定理?1】在一个有障碍点的矩形中的最大子矩形一定是一个极大 子矩形。 证明:如果最大子矩形?A?不是一个极大子矩形,那么根据极大子矩形的定义, 存在一个包含?A?且比?A?更大的有效子矩形,这与“A?是最大子矩形”矛盾,所 以【定理?1】成立。 四、?从问题的特征入手,得到两种常用的算法 定理?1?虽然很显然,但却是很重要的。根据定理?1,我们可以得到这样一 个解题思路:通过枚举所有的极大子矩形,就可以找到最大子矩形。下面根 据这个思路来设计算法。 约定:为了叙述方便,设整个矩形的大小为?n×m,其中障碍点个数为?s。 算法?1 算法的思路是通过枚举所有的极大子矩形找出最大子矩形。根据这个思 路可以发现,如果算法中有一次枚举的子矩形不是有效子矩形、或者不是极 大子矩形,那么可以肯定这个算法做了“无用功”,这也就是需要优化的地方。 怎样保证每次枚举的都是极大子矩形呢,我们先从极大子矩形的特征入手。 【定理?2】:一个极大子矩形的四条边一定都不能向外扩展。更进一步地说, 一个有效子矩形是极大子矩形的充要条件是这个子矩形的每条边要么覆盖了 一个障碍点,要么与整个矩形的边界重合。 王知昆 第?3?页 IOI2003?国家集训队论文 定理?2?的正确性很显然,如果一个有效子矩形的某一条边既没有覆盖一 个障碍点,又没有与整个矩形的边界重合,那么肯定存在一个包含它的有效 子矩形。根据定理?2,我们可以得到一个枚举极大子矩形的算法。为了处理方 便,首先在障碍点的集合中加上整个矩形四角上的点。每次枚举子矩形的上 下左右边界(枚举覆盖的障碍点),然后判断是否合法(内部是否有包含障碍 点)。这样的算法时间复杂度为?O(S5),显然太高了。考虑到极大子矩形不能 包含障碍点,因此这样枚举?4?个边界显然会产生大量的无效子矩形。 考虑只枚举左右边界的情 况。对于已经确定的左右边界, 可以将所有处在这个边界内的 点按从上到下排序,如图?1?中 所示,每一格就代表一个有效 子矩形。这样做时间复杂度为 O(S3)。由于确保每次得到的矩 形都是合法的,所以枚举量比 前一种算法小了很多。但需要 注意的是,这样做枚举的子矩 形虽然是合法的,然而不一定是极大的。所以这个算法还有优化的余地。通 过对这个算法不足之处的优化,我们可以得到一个高效的算法。 回顾上面的算法,我们不难发现,所枚举的矩形的上下边界都覆盖了障 碍点或者与整个矩形的边界重合,问题就在于左右边界上。只有那些左右边 界也覆盖了障碍点或者与整个矩形的边界重合的有效子矩形才是我们需要考 察的极大子矩形,所以前面的算法做了不少“无用功”。怎么减少“无用功” 呢,这里介绍一种算法(算法?1),它可以用在不少此类题目上。 算法的思路是这样的,先枚举极大子矩形的左边界,然后从左到右依次 扫描每一个障碍点,并不断修改可行的上下边界,从而枚举出所有以这个定 点为左边界的极大子矩形。考虑如图 2?中的三个点,现在我们要确

文档评论(0)

liushuixian + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档