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

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

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浅谈用极大化思想解决最大子矩形问题 【摘要】 本文针对一类近期经常出现的有关最大(或最优)子矩形及相关变 形问题,介绍了极大化思想在这类问题中的应用。分析了两个具有一定 通用性的算法。并通过一些例题讲述了这些算法选择和使用时的一些技 巧。 【关键字】矩形, 障碍点,极大子矩形 【正文】 1、问题 最大子矩形问题:在一个给定的矩形网格屮冇一些障碍点,要找出网格内部不 包含任何障碍点,口边界与坐标轴平行的最大子矩形。 这是近期经常出现的问题,例如冬令营2002的《奶牛浴场》,就属于最大 了矩形问题。 Winter Camp2002,奶牛浴场 顾斎简述?(用顾闪讼文附件) John要洛矩形牛场中建造一个大型浴场,但是这个大型浴场不能包含任何 一个奶牛的产奶点,但产奶点可以出在浴场的边界上。John的牛场和规划的浴 场都是矩形,浴场要完全位于牛场Z内,并且浴场的轮廓要与牛场的轮廓平行 或者重合。要求所求浴场的面积尽可能大。 参数约定:产奶点的个数S不超过5000,牛场的范围NXM不超过30000 X30000o 二、定义和说明 首先明确一些概念。 1、定义有效子矩形为内部不包含任何障碍点且边界与坐标轴平行的了矩形。如 图所示,第一个是冇效子矩形(尽管边界上冇障碍点),第二个不是冇效子矩形 (因为内部含有障碍点)。 2、极大有效子矩形:一个有效子矩形,如果不存在包含它11比它大的有效子矩 形,就称这个有效了矩形为极大有效了矩形。(为了叙述方便,以卜?称为极大子 矩形) 3、定义最大有效子矩形为所有有效子炬形屮最大的 3、定义最大有效子矩形为所有有效子炬形屮最大的 ?个(或多个)。以下简称为 三、极大化思想 【定理1】在一个有障碍点的矩形中的最大子矩形一定是一个极大子 矩形。 证明:如果最大子矩形A不是一个极大子矩形,那么根据极大子矩形的定义,存 在一个包含A且比A更大的有效子矩形,这与“A是最大子矩形”矛盾,所以【定 理1】成立。 11!从问题的特征入手,得到两种常用的算法 11! 从问题的特征入手,得到两种常用的算法 定理1虽然很显然,但却是很重要的。根据定理1,我们可以得到这样一 个解题思路:通过枚举所有的极大子矩形,就可以找到最大子矩形。下面根据 这个思路来设计算法。 约定:为了叙述方便,设整个矩形的大小为nXm, -Jt:屮障碍点个数为s。 算法1 算法的思路是通过枚举所冇的极大子矩形找出最大子矩形。根据这个思路 可以发现,如果算法中有一次枚举的子矩形不是有效子矩形、或者不是极大子 矩形,那么可以肯定这个算法做了 “无用功”,这也就是需要优化的地方。怎 样保证每次枚举的都是极大子矩形呢,我们先从极大子矩形的特征入手。 【定理2】:一个极大子矩形的四条边一定都不能向外扩展。更进一步地说,一 个有效子矩形是极大子矩形的充要条件是这个子矩形的每条边要么覆盖了一 个障碍点,要么与整个矩形的边界重合。 定理2的正确性很显然,如果一个有效子矩形的某一条边既没有覆盖一个 障碍点,又没有与整个矩形的边界重合,那么肯定存在一个包含它的有效子矩 形。根据定理2,我们可以得到一个枚举极大子矩形的算法。为了处理方便, 首先在障碍点的集合中加上整个矩形四角上的点。每次枚举了矩形的上下左右 边界(枚举覆盖的障碍点),然后判断是否合法(内部是否冇包含障碍点)。这 样的算法时间复杂度为0(H),显然太高了。考虑到极大子矩形不能包含障碍 点,因此这样枚举4个边界显然会产生大量的无效子矩形。 左边界图1右边界考虑只枚举左右边界的情 况。对于已经确定的左右边界, 可以将所有处在这个边界内的 点按从上到下排序,如图1屮所 示,毎一格就代表一个有效子矩 形。这样做吋间复杂度为0(S?) o 由于确保每次得到的矩形都是 合法的,所以枚举量比而一种算 法小了很多。但需要注意的是, 这样做枚举的子矩形虽然是合 法的,然而不一定是极大的。所 左边界 图1 右边界 以这个算法还冇优化的余地。通过对这个算法不足之处的优化,我们可以得到 一个高效的算法。 回顾上而的算法,我们不难发现,所枚举的矩形的上下边界都覆盖了障碍 点或者与整个矩形的边界重合,问题就在于左右边界上。只有那些左右边界也 覆盖了障碍点或者与整个矩形的边界重合的有效子矩形才是我们需要考察的 极大子矩形,所以询面的算法做了不少“无用功”。怎么减少“无用功”呢, 这里介绍一种算法(算法1),它可以用在不少此类题目上。 左边界的极大子矩形。考虑如图2屮的 三个点,现在我们要确定所冇以1号点 为左边界的极大矩形。先将1 左边界的极大子矩形。考虑如图2屮的 三个点,现在我们要确定所冇以1号点 为左边界的极大矩形。先将1号点右边 的点按横坐标排序。然后按从左到右的 顺序依次扫描1号点右边的点,同时记 录下当前的可行的上下边界。

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档