点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

作者:叶    虎

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相关推荐

  1. 每日经典算法题(十三) 逆推算法(平方根相关)

    每日经典算法题(十三) 逆推算法(平方根相关) 平方根:Square Root 题目 有一个整数,它加上 100 后是一个 完全平方数 ,再加上 168 又是一个 完全平方数 ,请问该数是多少? 程序 ...

  2. 经典算法题每日演练——第六题 协同推荐SlopeOne 算法

    原文:经典算法题每日演练--第六题 协同推荐SlopeOne 算法 相信大家对如下的Category都很熟悉,很多网站都有类似如下的功能,"商品推荐","猜你喜欢&quo ...

  3. 经典算法题每日演练——第二十二题 奇偶排序

    原文:经典算法题每日演练--第二十二题 奇偶排序 这个专题因为各种原因好久没有继续下去了,MM吧...你懂的,嘿嘿,不过还得继续写下去,好长时间不写,有些东西有点生疏了, 这篇就从简单一点的一个&qu ...

  4. 经典算法题每日演练——第十九题 双端队列

    经典算法题每日演练--第十九题 双端队列 原文:经典算法题每日演练--第十九题 双端队列 话说大学的时候老师说妹子比工作重要~,工作可以再换,妹子这个...所以...这两个月也就一直忙着Fall in ...

  5. 经典算法题每日演练——第十题 树状数组

    原文:经典算法题每日演练--第十题 树状数组 有一种数据结构是神奇的,神秘的,它展现了位运算与数组结合的神奇魅力,太牛逼的,它就是树状数组,这种数据结构不是神人是发现不了的. 一:概序 假如我现在有个 ...

  6. 经典算法题每日演练——第一题 百钱买百鸡

    经典算法题每日演练--第一题 百钱买百鸡 原文:经典算法题每日演练--第一题 百钱买百鸡 百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱, ...

  7. python全排序算法题_Python的100道经典算法题(1)

    按照c语言的100道经典算法题,自己原创写的,就得是自己的练习题了 [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数 ...

  8. java经典100例算法题_10道java经典算法题,每一题都能帮你提升java水平!

    JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子 ...

  9. 经典算法题每日演练——第七题 KMP算法

    原文:经典算法题每日演练--第七题 KMP算法 在大学的时候,应该在数据结构里面都看过kmp算法吧,不知道有多少老师对该算法是一笔带过的,至少我们以前是的, 确实kmp算法还是有点饶人的,如果说红黑树 ...

最新文章

  1. mapinfo制作地图_Mapinfo操作不太会?看这篇就够了
  2. 【Python】Python“表情包”工具包真好用
  3. 利用PHP执行SQL文件,将SQL文件导入到数据库
  4. 电脑维修:电脑故障通用处理思路,你有必要了解一下!
  5. php 去除 html 属性,用PHP 去掉所有html标签里的部分属性
  6. [css] 说说position:sticky有什么应用场景
  7. android EditText获取光标位置并安插字符删除字符
  8. linux 对于Vim配置的方法
  9. 01.深入理解乱码的原理
  10. 重磅!公安部再度认可电子签名、电子印章法律效力!
  11. 惠普服务器ilo默认地址_使用ILO进行HP服务器管理的Docker容器
  12. java做mmo服务器_MMO聊天服务器设计
  13. 阿里云基础认证(ACA - Alibaba Cloud Certification Associate)
  14. 微软/谷歌浏览器之争落幕:Edge向Chrome认输了?
  15. 产品经理们都是怎样成为产品经理的?
  16. lumen php命令,lumen添加artisan 命令方法
  17. 学习笔记:C++进阶【继承、多态、二叉树进阶、map和set、哈希、C++11、异常、智能指针、特殊类设计、C++的类型转换】
  18. Your account has been blocked. git更新代码时报错
  19. 【论文学习】《Practical Attacks on Voice Spoofing Countermeasures》
  20. 圆心科技再求上市:亏损金额飙升,研发费用率低于2%,如何突围?

热门文章

  1. 技术不错的程序员,为何面试却“屡战屡败”
  2. 用对方法,开发与部署深度学习原来如此简单……
  3. 10亿级数据规模的半监督图像分类模型,Imagenet测试精度高达81.2% | 技术头条...
  4. ICPC 2019国际大学生程序设计竞赛,中国高校未能夺冠
  5. 李飞飞宣布成立斯坦福“以人为本AI研究院”
  6. Deep Reading | 从0到1再读注意力机制,此文必收藏!
  7. 喜大普奔!TensorFlow终于支持A卡了
  8. 高文院士:顶级AI人才缺乏,但不必搞全民运动,到处成立人工智能学院
  9. 清华魏少军:大部分AI芯片创业者将成为这场变革中的先烈
  10. AI一分钟 | NLP先驱Aravind Joshi教授去世,曾获ACL终身成就奖;年度花木兰诞生,甘薇全权负责贾跃亭的一地鸡毛