最大子矩阵问题&悬线法 学习笔记

学习材料:王知昆《浅谈用极大化思想解决最大子矩阵问题》

【最大子矩阵问题】

在一个给定的矩形中有一些障碍点,找出内部不包含障碍点的、轮廓与整个矩形平行或重合的最大子矩形。

【定义子矩形】

有效子矩形:内部不包含障碍点的、轮廓与整个矩形平行或重合的子矩形。

极大子矩形:每条边都不能向外扩展的有效子矩形。

最大子矩形:所有有效子矩形中最大的一个(或多个)。

【极大化思想】

在一个有障碍点的矩形中最大子矩形一定是极大子矩形。

设计算法的思路:枚举所有的极大子矩形,找到最大子矩形。

设NM分别为整个矩形的长和宽,S为内部的障碍点数。

【算法1】

时间复杂度:O(S^2) 空间复杂度:O(S)

由于极大子矩形的每一条边都不能向外扩展,那么极大子矩阵的每条边要么覆盖了障碍点,要么与整个矩形的边界重合

基本算法:枚举上下左右四个边界,然后判断组成的矩形是否是有效子矩形。

复杂度:O(S^5)  可以改进的地方:产生了大量的无效子矩形。

初步改进的算法:枚举左右边界,然后对处在边界内的点排序,每两个相邻的点和左右边界组成一个矩形。

复杂度:O(S^3) 可以改进的地方:枚举了部分不是极大子矩形的情况。

综上,设计算法的方向:

1、保证每一个枚举的矩形都是有效的。

2、保证每一个枚举的矩形都是极

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值