中累计直方图_从零单排leetcode——基础篇之hash(5):二维累积直方图

b433b742351f43b39eb9450850bdafbf.png

这一次,我们讲讲二维的累积直方图

先来挑战一道常见的面试题:如果在CNN中的卷积,图像大小是NxN的,而卷积核是KxK,已知卷积核全是1,这个卷积的时间复杂度是否可以减少?

我们从最暴力的思路开始想的话,以每个点为原点,需要遍历一遍KxK的方格,这是

的复杂度。然后把和全都加起来,得到这个点对应的值,遍历所有点需要N方,那么总共就是
的复杂度了。

可是题目中有一个”卷积核都是1“这一个条件我们还没有利用。累积直方图可以怎样运用在这里?

我们用一张图来描述二维的累积直方图,其实有时候也叫做”积分图像“:

a5eb7bafb4a9cea446b565b1cc7676b5.png

积分图像中,每一个点的值,都表示从左上角顶点到以此处为右下角的矩形的累计值。但是想要获取中间一部分的值并没有一维情况那么简单。

如图中,A表示矩阵中(2,2)这个点的累积直方图值,B表示(2,3)处,C表示(3,2)处的值,D表示(3,3)这个单点的值。假设要计算(3,3)处的值,且ABC都已计算完成。这个值等于什么呢,就等于B+C-A+D(因为B和C都含有左上角那部分,所以要减去一次)。这里虽然使用相邻的格子举例,但对于远距离的格子规律也是一样的。

如果要计算KxK格子的累计值,其实就是计算一个KxK大小的D,那么用这个点减去(k,k)的坐标点作为A即可。

那么我们可以花费

的时间复杂度来计算积分图像,然后花费同样的时间来得到每一组KxK格子内的累计值。当然,按照上面的要求,计算积分图像必须是从上到下,从左到右这样有序的。

不过很遗憾的是,上面的情况只是最基本的情况,实际的情况要比这个复杂(很多),我们需要用一个例子来说明:

85. Maximal RectangleHard)
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area. Example: Input:
[
["1","0","1","0","0"],
["1","0"," 1"," 1"," 1"],
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值