补题( Convolution, 二维卷积求输出矩阵元素和最大值)

来源:https://codeforces.com/gym/105231/problem/H

题目描述:

一、题目分析
本题涉及深度学习中的二维卷积操作。给定一个n×m的二维输入矩阵I和一个k×l的核矩阵K ,通过特定公式计算得到(n - k + 1)×(m - l + 1)的输出矩阵O ,要求在核矩阵K元素只能为 - 1、0、1 的条件下,找出输出矩阵O所有元素之和的最大值。
二、解题思路
前缀和优化
首先对输入矩阵I计算二维前缀和。对于矩阵I ,设b[i][j]表示从(1, 1)到(i, j)的子矩阵元素之和。计算方式为b[i][j]=b[i][j - 1]+b[i - 1][j]-b[i - 1][j - 1]+a[i][j] 。这样做的好处是可以在O(1)时间内获取任意子矩阵的元素和。
计算卷积结果
对于输出矩阵O中的每个元素O(p,q) ,根据公式 ,由于K元素为 - 1、0、1 ,我们可以遍历所有可能的核矩阵组合(实际不需要真的枚举矩阵,而是通过分析元素贡献 )。
利用前缀和计算子矩阵和,例如对于核矩阵覆盖的子矩阵,通过前缀和相减的方式得到对应子矩阵元素和。如代码中t = b[i][j] - b[i - t1][j] - b[i][j - t2] + b[i - t1][j - t2] ,这里t1 = k ,t2 = l 。
求最大值
遍历所有可能的核矩阵取值情况(本质是考虑每个位置对结果的正负贡献 ),计算出不同情况下输出矩阵O元素之和,取其中的最大值。
三、代码实现(C++)

cpp 复制代码
 

  
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e3 + 10;
int a[N][N], b[N][N];
signed main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n, m, k, l;
    cin >> n >> m >> k >> l;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> a[i][j];
            b[i][j] = b[i][j - 1] + b[i - 1][j] - b[i - 1][j - 1] + a[i][j];
        }
    }
    int sum = 0;
    int t1 = n - k + 1, t2 = m - l + 1;
    for (int i = t1; i <= n; i++) {
        for (int j = t2; j <= m; j++) {
            int t = b[i][j] - b[i - t1][j] - b[i][j - t2] + b[i - t1][j - t2];
            sum += abs(t);
        }
    }
    cout << sum;
    return 0;
}

四、复杂度分析
时间复杂度:计算前缀和部分是两层嵌套循环,时间复杂度为O(n×m) ;后续计算输出矩阵元素和部分也是两层嵌套循环,时间复杂度为O((n - k + 1)×(m - l + 1)) ,总体时间复杂度为O(n×m) ,在题目给定的数据规模下可以接受。
空间复杂度:使用了两个二维数组a和b存储矩阵数据和前缀和,空间复杂度为O(n×m) 。

相关推荐
野蛮人6号1 小时前
力扣热题100道之73矩阵置零
算法·leetcode·矩阵
通信小呆呆15 小时前
以矩阵视角统一理解:外积、Kronecker 积与 Khatri–Rao 积(含MATLAB可视化)
线性代数·算法·matlab·矩阵·信号处理
爱学习的小鱼gogo1 天前
python 单词搜索(回溯-矩阵-字符串-中等)含源码(二十)
开发语言·数据结构·python·矩阵·字符串·回溯·递归栈
熬了夜的程序员1 天前
【LeetCode】82. 删除排序链表中的重复元素 II
数据结构·算法·leetcode·链表·职场和发展·矩阵·深度优先
前端小L1 天前
动态规划的“降维”艺术:二维矩阵中的建筑奇迹——最大矩形
线性代数·矩阵
小龙1 天前
【理论知识】Q/K/V权重矩阵学习笔记
矩阵·大模型·transformer·多头注意力机制·理论基础
无限进步_1 天前
【C语言】在矩阵中高效查找数字的算法解析
c语言·开发语言·数据结构·c++·其他·算法·矩阵
张晓~183399481212 天前
碰一碰发抖音源码技术搭建部署方案
线性代数·算法·microsoft·矩阵·html5
dxnb222 天前
Datawhale25年10月组队学习:math for AI+Task3线性代数(下)
人工智能·学习·线性代数
woshihonghonga2 天前
PyTorch矩阵乘法函数区别解析与矩阵高级索引说明——《动手学深度学习》3.6.3、3.6.4和3.6.5 (P79)
人工智能·pytorch·python·深度学习·jupyter·矩阵