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

本文介绍了最大子矩阵问题,通过极大化思想来寻找解决方案。算法1的时间复杂度为O(S^2),通过枚举边界和点排序来减少无效枚举,但不适用于障碍点密集的情况。算法2采用悬线法,时间复杂度优化到O(NM),通过悬线和对应的矩形来确定极大子矩阵,适合更广泛的场景。
摘要由CSDN通过智能技术生成

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

【最大子矩阵问题】

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

【定义子矩形】

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

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

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

【极大化思想】

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

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

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

【算法1】

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

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

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

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

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

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

综上,设计算法的方向:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值