矩阵(二维hash---o(m*n))

本文介绍了一种解决寻找二维01矩阵中是否存在特定子矩阵问题的优化方法。通过一维哈希计算矩阵行的前缀和,然后计算指定宽度的子矩阵的哈希值,构建一个哈希表存储所有可能的子矩阵哈希值。当查询子矩阵时,只需检查其哈希值是否存在于哈希表中,从而将时间复杂度从O(n^4)降低到O(n^2)。
摘要由CSDN通过智能技术生成

给定一个M行N列的01矩阵(只包含数字0或1的矩阵),再执行Q次询问,每次询问给出一个A行B列的01矩阵,求该矩阵是否在原矩阵中出现过。

输入格式

第一行四个整数M,N,A,B。

接下来一个M行N列的01矩阵,数字之间没有空格。

接下来一个整数Q。

接下来Q个A行B列的01矩阵,数字之间没有空格。

输出格式

对于每个询问,输出1表示出现过,0表示没有出现过。

数据范围

A≤100A≤100,M,N,B≤1000,Q≤1000

输入样例:

3 3 2 2
111
000
111
3
11
00
11
11
00
11

输出样例:

1
0
1

题意:给定一个m*n的矩阵,接下来q次询问,每次给出一个a*b的矩阵,判断该a*b的矩阵是否为m*n矩阵的子矩阵。

思路: 因为题意要判断m*n的所有a*b大小的子矩阵中是否有和查询的a*b矩阵相同的矩阵,然而要枚举所有m*n的所有a*b子矩阵的时间复杂度为o(n^2),然后每一个再和查询的a*b矩阵对比的时间复杂度o(n^2),所以这种做法总的时间复杂度为o(n^4),超出了限制时间。所以判断两个子矩阵是否相同时,可以采用hash优化,与处理出来所有a*b子矩阵的hash值,然后直接比较两子矩阵的hash值即可,对比的时间复杂度就降到了o(1),总的时间复杂即可优化为o(n^2);

具体做法:<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值