基础算法——二维前缀和

二维前缀和

我们先前已经了解了前缀和思想,二维前缀和感觉上就是一维前缀和的进阶,下面 ,我们剖析一下两种前缀和。

一维前缀和

在这里插入图片描述
一维前缀和的核心就是这两个公式,二维前缀和也差不多的嘞

下面我们来推理一下二维前缀和

已知:前缀和就是前几项相加的值,那么二维前缀和就相当一个矩阵,在此基础上进行操作

二维前缀和

首先我们的二维前缀和像一维前缀和一样,先求出perfix数组,通过我们给出的arr数组来得出perfix
数组。
一维的好理解,那么二维呢?话不多说,上图!
以这个三行四列的矩阵为例:
在这里插入图片描述
我们先来手动的算一算它的前缀和
在这里插入图片描述
OK,手搓完成,现在我们来推一推二维前缀和的公式

例如,现在我们以perfix[2][2]来举例子
在这里插入图片描述
也就是这个6是怎么来的,上面刚算过,当然是1+1+2+2 来的,也可以看成是 1+3+2 来的。
在这里插入图片描述
说白了,也就是这个最初的数组所画的相加,然后再加上arr[2][2]呗,那这个画的该怎么算呢?
当然是利用前缀和来算,根据手动模拟可知 perfix[1][2]=arr[1][1]+arr[1][2]=3,perfix[2][1]=arr[1][1]+perfix[2][1]=2。注意我们算了两次arr[1][1]也就是共同的部分,共同的部分就是perfix[i-1][j-1],perfix[1][1],所以我们要记得再加上一次,最后加上arr[2][2]就结束了。
整理一下,就得出:perfix[i][j]=perfix[i-1][j]+perfix[i][j-1]+perfix[i-1][j-1]+arr[i][j];

#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
using ll = long long;
ll arr[N][N], perfix[N][N];
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n, m;cin >> n >> m ;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> arr[i][j];}}for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){perfix[i][j] = perfix[i - 1][j] + perfix[i][j - 1] - perfix[i - 1][j - 1] + arr[i][j];}}cout << "---------------------------------------------------------" << '\n';for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cout << perfix[i][j] << " ";}cout << '\n';}return 0;
}

结果:
在这里插入图片描述
跟我们模拟的一模一样,即公式正确。
算出了前缀和,现在我们该询问了,最常见的就是给定两个坐标,来算这个坐标圈起来的值的和,如下图:
在这里插入图片描述
我们该如何得到呢?
直接用全部的和减去红色的,再减去绿色的最后加上绿色和红色共同的,就完成了这个区域的计算
公式:perfix[x2][y2]-perfix[x1-1][y2]-perfix[x2][y1-1]+perfix[x1-1][y1-1];
代码:(q代表询问次数)

#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
using ll = long long;
ll arr[N][N], perfix[N][N];
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n, m,q;cin >> n >> m >> q;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> arr[i][j];}}for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){perfix[i][j] =perfix[i - 1][j] +perfix[i][j - 1] -perfix[i - 1][j - 1] + arr[i][j];}}while (q--){int x1, x2, y1, y2;cin >> x1 >> y1 >> x2 >> y2;cout <<perfix[x2][y2] -perfix[x1 - 1][y2] -perfix[x2][y1 - 1] +perfix[x1 - 1][y1 - 1] << '\n';}return 0;
}

文章的最后,给大家解释一下(注意我们算了两次arr[1][1]也就是共同的部分,共同的部分就是perfix[i-1][j-1])中为什么共同的部分就是perfix[i-1]j-1[]
例如:
在这里插入图片描述
这里,我们需要算 perfix[3][4],根据上面的公式,就是perfix[3-1][4]+perfix[3][4-1]=>perfix[2][4]-perfix[3][3]=20+18=38,减去的共同部分就是 1+2+3+1+2+3=12,正好就是perfix[3-1][4-1]=>perfix[2][3]=12,38-12+4(arr[3][4])=30(perfix[i][j]);得证!!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日Attention学习19——Convolutional Multi-Focal Attention

每日Attention学习19——Convolutional Multi-Focal Attention 模块出处 [ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation 模块名称 Convolutional Multi-Focal Atte…

2. K8S集群架构及主机准备

本次集群部署主机分布K8S集群主机配置主机静态IP设置主机名解析ipvs管理工具安装及模块加载主机系统升级主机间免密登录配置主机基础配置完后最好做个快照备份 2台负载均衡器 Haproxy高可用keepalived3台k8s master节点5台工作节点(至少2及以上)本次集群部署主机分布 K8S集群主…

游戏引擎学习第89天

回顾 由于一直没有渲染器&#xff0c;终于决定开始动手做一个渲染器&#xff0c;虽然开始时并不确定该如何进行&#xff0c;但一旦开始做&#xff0c;发现这其实是正确的决定。因此&#xff0c;接下来可能会花一到两周的时间来编写渲染器&#xff0c;甚至可能更长时间&#xf…

链式结构二叉树(递归暴力美学)

文章目录 1. 链式结构二叉树1.1 二叉树创建 2. 前中后序遍历2.1 遍历规则2.2 代码实现图文理解 3. 结点个数以及高度等二叉树结点个数正确做法&#xff1a; 4. 层序遍历5. 判断是否完全二叉树 1. 链式结构二叉树 完成了顺序结构二叉树的代码实现&#xff0c;可以知道其底层结构…

Kubernetes 中 BGP 与二层网络的较量:究竟孰轻孰重?

如果你曾搭建过Kubernetes集群,就会知道网络配置是一个很容易让人深陷其中的领域。在负载均衡器、服务通告和IP管理之间,你要同时应对许多变动的因素。对于许多配置而言,使用二层(L2)网络就完全能满足需求。但边界网关协议(BGP)—— 支撑互联网运行的技术 —— 也逐渐出…

Linux提权--John碰撞密码提权

​John the Ripper​&#xff08;简称 John&#xff09;是一个常用的密码破解工具&#xff0c;可以通过暴力破解、字典攻击、规则攻击等方式&#xff0c;尝试猜解用户密码。密码的弱度是提权攻击中的一个重要因素&#xff0c;如果某个用户的密码非常简单或是默认密码&#xff0…

大数据学习之Spark分布式计算框架RDD、内核进阶

一.RDD 28.RDD_为什么需要RDD 29.RDD_定义 30.RDD_五大特性总述 31.RDD_五大特性1 32.RDD_五大特性2 33.RDD_五大特性3 34.RDD_五大特性4 35.RDD_五大特性5 36.RDD_五大特性总结 37.RDD_创建概述 38.RDD_并行化创建 演示代码&#xff1a; // 获取当前 RDD 的分区数 Since ( …

[创业之路-286]:《产品开发管理-方法.流程.工具 》-1- IPD两个跨职能团队的组织

IPD&#xff08;集成产品开发&#xff09;中的两个重要跨职能组织是IPMT&#xff08;集成产品管理团队&#xff09;和PDT&#xff08;产品开发团队&#xff09;。 在IPD&#xff08;集成产品开发&#xff09;体系中&#xff0c;IRB&#xff08;投资评审委员会&#xff09;、IPM…

DeepSeek 提示词之角色扮演的使用技巧

老六哥的小提示&#xff1a;我们可能不会被AI轻易淘汰&#xff0c;但是会被“会使用AI的人”淘汰。 在DeepSeek的官方提示库中&#xff0c;有“角色扮演&#xff08;自定义人设&#xff09;”的提示词案例。截图如下&#xff1a; 在“角色扮演”的提示词案例中&#xff0c;其实…

第二个Qt开发实例:在Qt中利用GPIO子系统和sysfs伪文件系统实现按钮(Push Button)点击控制GPIO口(效果为LED2灯的灭和亮)

引言 本文承接博文 https://blog.csdn.net/wenhao_ir/article/details/145420998 里的代码&#xff0c;在那里面代码的基础上添加上利用sysfs伪文件系统实现按钮(Push Button)点击控制GPIO口的代码&#xff0c;进而实现LED2灯的灭和亮。 最终的效果是点击下面的LED按钮实现LED…

登山第十七梯:矩形拟合——无惧噪声

文章目录 一 摘要 二 资源 三 内容 (文章末尾提供源代码) 一 摘要 目前,获取点集的矩形拟合结果的主要方法是计算其最小外包直立矩形或者旋转矩形。这些方法简单、易用,在数据质量良好的情况下能够较好的贴合矩形形状。然而,在数据缺失时,最小外包围盒方法将会…

57. Uboot图形化界面配置

一、Uboot图形化配置方法 1、通过终端配置。 2、进入到uboot的源码根目录下。 3、首先默认配置 make mx6ull_alientek_emmc_defconfig //默认配置 4、输入make menuconfig。打开图形化配置界面。 5、注意&#xff0c;新电脑需要安装ncurses库。sudo apt-get install libncurs…

kalman滤波器C++设计仿真实例第三篇

1. 仿真场景 水面上有条船在做匀速直线航行&#xff0c;航行过程中由于风和浪的影响&#xff0c;会有些随机的干扰&#xff0c;也就是会有些随机的加速度作用在船身上&#xff0c;这个随机加速度的均方差大约是0.1&#xff0c;也就是说方差是0.01。船上搭载GPS设备&#xff0c;…

(2025|ICLR,音频 LLM,蒸馏/ALLD,跨模态学习,语音质量评估,MOS)音频 LLM 可作为描述性语音质量评估器

Audio Large Language Models Can Be Descriptive Speech Quality Evaluators 目录 1. 概述 2. 研究背景与动机 3. 方法 3.1 语音质量评估数据集 3.2 ALLD 对齐策略 4. 实验结果分析 4.1 MOS 评分预测&#xff08;数值评估&#xff09; 4.2 迁移能力&#xff08;在不同…

stm32生成hex文件详解

1.产生的map文件干啥的&#xff1f; 2.组成情况&#xff1f;&#xff1f;&#xff1f; 废话少说&#xff0c;直接上代码具体内容况&#xff1a; Component: ARM Compiler 5.06 update 7 (build 960) Tool: armlink [4d3601]Section Cross Referencesstartup_stm32f103xe.o(S…

百度热力图数据获取,原理,处理及论文应用6

目录 0、数据简介0、示例数据1、百度热力图数据日期如何选择1.1、其他实验数据的时间1.2、看日历1.3、看天气 2、百度热力图几天够研究&#xff1f;部分文章统计3、数据原理3.1.1 ** 这个比较重要&#xff0c;后面还会再次出现。核密度的值怎么理解&#xff1f;**3.1.2 Csv->…

[转]Java面试近一个月的面试总结

本文是在学习中的总结&#xff0c;欢迎转载但请注明出处&#xff1a;http://blog.csdn.net/pistolove/article/details/46753275 前言 打算换个工作&#xff0c;近一个月面试了不少的公司&#xff0c;下面将一些面试经验和思考分享给大家。另外校招也快要开始了&#xff0c;为…

学习threejs,tga格式图片文件贴图

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️TGA图片1.2 ☘️THREE.Mesh…

MSPFN 代码复现

1、环境配置 conda create -n MSPFN python3.9 conda activate MSPFN pip install opencv-python pip install tensorflow pip install tqdm pip install matplotlib2、train 2.1 创建数据集 2.1.1 数据集格式 |--rainysamples |--file1&#xff1a; |--file2:|--fi…

20240206 adb 连不上手机解决办法

Step 1: lsusb 确认电脑 usb 端口能识别设备 lsusb不知道设备有没有连上&#xff0c;就插拔一下&#xff0c;对比观察多了/少了哪个设备。 Step 2: 重启 adb server sudo adb kill-serversudo adb start-serveradb devices基本上就可以了&#xff5e; Reference https://b…