经典算法题之Maximal Square
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
作者:叶 虎
Maximal Square是道非常有意思的算法题。它是一个典型的动态规划问题,同时也是2017京东面试题,2016华为机考题。
1
题目描述:
有一个n*m大小的矩阵,其元素值为0或者1,求这个矩阵中全有1组成的最大方块其大小。
2
输入描述
每个输入包含一个测试用例。每个测试用例的第一行包含两个整数n(2<= n <= 50),m(2<= n <= 50),分别表示矩阵matrix的行数与列数。接下来的每一行是该矩阵的每一行元素,其取值为1或者0。
3
输出描述
输出矩阵中全有1组成的最大方块其大小。
4
输入例子
4 6
1 1 0 1 1 1
0 1 1 1 1 1
1 1 0 1 1 1
1 1 0 0 1 1
5
输出例子
3
思路分析:
本题为一个典型的动态规划问题,因此可以使用动态规划的思想进行。动态规划重要的一个特点是要复用子问题。
假设以matrix[i][j]为右下顶点的最大方块的大小为dp[i][j]。那么dp[i][j]的计算否可以复用比其更小的子问题呢?不难想象,如果matrix[i][j]=0,那么dp[i][j]=0。当matrix[i][j]=1时,此时要考察dp[i-1][j-1],dp[i-1][j]及dp[i][j-1],这是由于以matrix[i][j]的为右下顶点的最大方块由上面三个位置决定,而且是木桶效应,由最小值所决定,即dp[i][j]=min{dp[i-1][j-1], dp[i-1][j], dp[i][j-1]} + 1。考虑到边界条件,可以得到最终的递归方程为:
只需要找到最大的dp[i][j]值即得到最大方块的大小。整个算法的时间复杂度与空间复杂度均为O(n*m)。
具体实现代码(C++)
(点开大图,可详细清晰地看代码)
本文只是Maximal Square算法题其中的一种解法,在此抛砖引玉。欢迎留言或加群讨论。
好消息,小白学视觉团队的知识星球开通啦,为了感谢大家的支持与厚爱,团队决定将价值149元的知识星球现时免费加入。各位小伙伴们要抓住机会哦!下载1:OpenCV-Contrib扩展模块中文版教程在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。交流群欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
经典算法题之Maximal Square相关推荐
- 每日经典算法题(十三) 逆推算法(平方根相关)
每日经典算法题(十三) 逆推算法(平方根相关) 平方根:Square Root 题目 有一个整数,它加上 100 后是一个 完全平方数 ,再加上 168 又是一个 完全平方数 ,请问该数是多少? 程序 ...
- 经典算法题每日演练——第六题 协同推荐SlopeOne 算法
原文:经典算法题每日演练--第六题 协同推荐SlopeOne 算法 相信大家对如下的Category都很熟悉,很多网站都有类似如下的功能,"商品推荐","猜你喜欢&quo ...
- 经典算法题每日演练——第二十二题 奇偶排序
原文:经典算法题每日演练--第二十二题 奇偶排序 这个专题因为各种原因好久没有继续下去了,MM吧...你懂的,嘿嘿,不过还得继续写下去,好长时间不写,有些东西有点生疏了, 这篇就从简单一点的一个&qu ...
- 经典算法题每日演练——第十九题 双端队列
经典算法题每日演练--第十九题 双端队列 原文:经典算法题每日演练--第十九题 双端队列 话说大学的时候老师说妹子比工作重要~,工作可以再换,妹子这个...所以...这两个月也就一直忙着Fall in ...
- 经典算法题每日演练——第十题 树状数组
原文:经典算法题每日演练--第十题 树状数组 有一种数据结构是神奇的,神秘的,它展现了位运算与数组结合的神奇魅力,太牛逼的,它就是树状数组,这种数据结构不是神人是发现不了的. 一:概序 假如我现在有个 ...
- 经典算法题每日演练——第一题 百钱买百鸡
经典算法题每日演练--第一题 百钱买百鸡 原文:经典算法题每日演练--第一题 百钱买百鸡 百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱, ...
- python全排序算法题_Python的100道经典算法题(1)
按照c语言的100道经典算法题,自己原创写的,就得是自己的练习题了 [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数 ...
- java经典100例算法题_10道java经典算法题,每一题都能帮你提升java水平!
JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子 ...
- 经典算法题每日演练——第七题 KMP算法
原文:经典算法题每日演练--第七题 KMP算法 在大学的时候,应该在数据结构里面都看过kmp算法吧,不知道有多少老师对该算法是一笔带过的,至少我们以前是的, 确实kmp算法还是有点饶人的,如果说红黑树 ...
最新文章
- mapinfo制作地图_Mapinfo操作不太会?看这篇就够了
- 【Python】Python“表情包”工具包真好用
- 利用PHP执行SQL文件,将SQL文件导入到数据库
- 电脑维修:电脑故障通用处理思路,你有必要了解一下!
- php 去除 html 属性,用PHP 去掉所有html标签里的部分属性
- [css] 说说position:sticky有什么应用场景
- android EditText获取光标位置并安插字符删除字符
- linux 对于Vim配置的方法
- 01.深入理解乱码的原理
- 重磅!公安部再度认可电子签名、电子印章法律效力!
- 惠普服务器ilo默认地址_使用ILO进行HP服务器管理的Docker容器
- java做mmo服务器_MMO聊天服务器设计
- 阿里云基础认证(ACA - Alibaba Cloud Certification Associate)
- 微软/谷歌浏览器之争落幕:Edge向Chrome认输了?
- 产品经理们都是怎样成为产品经理的?
- lumen php命令,lumen添加artisan 命令方法
- 学习笔记:C++进阶【继承、多态、二叉树进阶、map和set、哈希、C++11、异常、智能指针、特殊类设计、C++的类型转换】
- Your account has been blocked. git更新代码时报错
- 【论文学习】《Practical Attacks on Voice Spoofing Countermeasures》
- 圆心科技再求上市:亏损金额飙升,研发费用率低于2%,如何突围?
热门文章
- 技术不错的程序员,为何面试却“屡战屡败”
- 用对方法,开发与部署深度学习原来如此简单……
- 10亿级数据规模的半监督图像分类模型,Imagenet测试精度高达81.2% | 技术头条...
- ICPC 2019国际大学生程序设计竞赛,中国高校未能夺冠
- 李飞飞宣布成立斯坦福“以人为本AI研究院”
- Deep Reading | 从0到1再读注意力机制,此文必收藏!
- 喜大普奔!TensorFlow终于支持A卡了
- 高文院士:顶级AI人才缺乏,但不必搞全民运动,到处成立人工智能学院
- 清华魏少军:大部分AI芯片创业者将成为这场变革中的先烈
- AI一分钟 | NLP先驱Aravind Joshi教授去世,曾获ACL终身成就奖;年度花木兰诞生,甘薇全权负责贾跃亭的一地鸡毛