差分 【一维差分和二维差分】

news2024/10/6 10:33:18

全文目录

  • 🤔一维差分
    • 😕差分数组的构建
  • 🤔二维差分
    • 😕差分矩阵的构建


🤔一维差分

首先来了解一下差分的性质,差分是前缀和的逆运算,如果说前缀和是:S = f(n) ,那么差分就是 D = f^-1(n) ,也就是说,原数组是差分数组的前缀和。

原数组:a[i],差分数组:b[i]

差分数组满足:

a[0 ]= 0;

b[1] = a[1] - a[0];

b[2] = a[2] - a[1];

b[3] = a[3] - a[2];
...
b[i] = a[i] - a[i - 1];

原数组满足:

a[i] = b[1] + b[2] + ... + b[i];

差分数组一般用来将原数组中的一段区间加上或减去一个值。


差分数组的特性:

因为原数组是差分数组的前缀和,所以我们可以通过差分数组来求原数组。

那么,当差分数组中的某个位置 b[i] 发生了改变,通过差分数组求出来的原数组 a[i] 及之后的全部元素都会发生对应的变化。

但是如果只是对一段区间 [l, r] 的数据进行操作的话,上述操作会导致 r 后面的数据也发生了变化,所以需要对 b[r + 1] 进行反操作,来弥补这个问题。

在这里插入图片描述

代码:

b[l] += c;
b[r + 1] -= c;

😕差分数组的构建

在构建差分数组的时候,可以将原数组看作全是 0 的数组,原数组中的每一个元素都是可以看作是新插入的元素,也就是对 [i, i] 这个区间进行了插入 a[i] 的操作。


🤔二维差分

原数组 a[][] , 差分数组 b[][]

二维差分与一维差分的性质一样,只是作用范围有些不同,但是同样满足:

  1. 原矩阵a[][] 是差分矩阵b[][] 的前缀和数组,
  1. 通过差分矩阵来求原矩阵时,对差分矩阵中的某个元素 b[i][j] 进行 +- c,原矩阵中包括 a[i][j] 在内,右下角的全部元素都会 +- c

例:对差分数组进行 b[x1][y1] +- c,受影响的就是原数组中标绿的元素
在这里插入图片描述
二维差分的应用跟二维前缀和很相似,就是对原矩阵中的一个子矩阵插入一个值,如对以 x1, y2 为左上角, x2, y2 为右下角的矩阵插入一个值,就是对绿色部分的值插入一个值:
在这里插入图片描述
这个插入操作可以类比二维前缀和求和的操作,将多余的部分减去,再将多减去的部分加上,只不过,因为差分是前缀和的逆运算,所以前缀和是影响左上角,差分影响的是右下角。

插入代码:

void insert(int x1, int y1, int x2, int y2, int c)
{
    b[x1][y1] += c;
    b[x1][y2 + 1] -= c;
    b[x2 + 1][y1] -= c;
    b[x2 + 1][y2 + 1] += c;
}

根据二维差分的影响范围来说,可以利用画图来加深一下理解:

b[x1][y1] += c;

在这里插入图片描述

b[x1][y1] += c;
b[x1][y2 + 1] -= c;

在这里插入图片描述

b[x1][y1] += c;
b[x1][y2 + 1] -= c;
b[x2 + 1][y1] -= c;

// 红色表示多减去的部分,下一步需要加上

在这里插入图片描述

b[x1][y1] += c;
b[x1][y2 + 1] -= c;
b[x2 + 1][y1] -= c;
b[x2 + 1][y2 + 1] += c;

在这里插入图片描述
这样,通过差分矩阵来求原数组的时指定的子矩阵就在 O(1) 的时间内得到了相应的操作。

😕差分矩阵的构建

我们可以想象原数组a[][]中全是0,那么对应的,它的差分矩阵b[][] 也是全是0。对于 a[][]中的每一个元素,我们就可以想象成是插入了以 c(c == a[i][j]),也就是对每个x1 == x2 == i, y1 == y2 == j的小矩阵进行了插入操作。

b[i][j]矩阵中全部插入了对应的 a[i][j]时,差分矩阵就构建完成了。


完结散花🌈🌈🌈
在这里插入图片描述

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

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

相关文章

轻松拿下——类的默认成员函数

六大默认成员函数: 1、初始化:构造函数主要完成初始化工作 2、清理:析构函数主要完成清理工作 3、拷贝复制:拷贝构造是使用同类对象初始化创建对象 4、拷贝复制:赋值重载主要是把一个对象赋值给另一个对象&#xff…

linux文件压缩、解压缩以及归档

一、文件压缩、解压缩 1.linux compress命令(compress/uncompress) (1)压缩文件: [rootserver ~]# du -sh passwd1---查看文件大小 [rootserver ~]# time compress passwd1---time:查看时间 compress&…

医学主题词表(Medical Subject Headings, MeSH)

Medical Subject Headings 简称MeSH,由美国国立医学图书馆(NLM出版),是目前最权威最常用的标准医学主题词表。 MeSH由范畴表(Categories and Subcategories)、字顺表(Alphabetic listing&#…

AI 边缘计算平台 - 爱芯元智 AX620A 爱芯派开箱

最近疫情有点猛,宅在家里,没事找点事干,撸撸板子吧。 拿出来趁着双 11 优惠,花了 520 RMB / 块,买的两块爱芯派(套餐),来个开箱贴,顺便测试一下开发板的串口、网口、音频…

智慧井盖解决方案-最新全套文件

智慧井盖解决方案-最新全套文件一、建设背景行业痛点二、建设思路三、建设方案四、获取 - 智慧井盖全套最新解决方案合集一、建设背景 城市井盖是每个城市管理的难点,井盖数量多,容易发生井盖破损或丢失后出现人员与财产损失。给群众生命财产带来损害。…

基于Netty的高性能API网关设计

0. 本文目的 对于网关设计,业界已有很多成熟的解决方案,开箱即用或者稍作自定义都能满足需求。本文主要是通过网关需求了解底层netty的使用,所以重心在netty的实践使用上。 1. 什么是网关 网关(Gateway)又称网间连接器、协议转换器。网关在…

基于球向量的粒子群优化(SPSO)算法在无人机路径规划中的实现(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

PyTorch for Audio + Music Processing(2/3/4/5/6/7) :构建数据集和提取音频特征

基于Torchaudio构建数据集 文章目录基于Torchaudio构建数据集前言02 Training a feed forward network03 Making predictions04 Creating a custom dataset05 Extracting Mel spectrograms06 Padding audio files07 Preprocessing data on GPU一、下载数据集文件目录标注格式二…

19 【RTK Query】

19 【RTK Query】 1.目前前端常见的发起 ajax 请求的方式 1、使用原生的ajax请求2、使用jquery封装好的ajax请求3、使用fetch发起请求4、第三方的比如axios请求5、angular中自带的HttpClient 就目前前端框架开发中来说我们在开发vue、react的时候一般都是使用fetch或axios自…

web前端期末大作业【 大学生抗疫感动专题网页设计】HTML+CSS

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

Prometheus 使用cadvisor采集docker容器监控数据

Prometheus采集主机监控参考部署下载,图形生成 系统安装Grafana downloadWindows参考图形生成参考win_exporterLinux参考node_exporterMysql参考Mysql_exporterSQL Server参考SQL exporterRedis 参考Redis_exportercadvisor参考cadvisor snmp_exporter 参考图形展示…

Redis详细教程

【尚硅谷】2021最新版Redis详细教程(基于Redis 6.2.x版本) 文章目录 一、前言二、NoSQL数据库简介 1.技术发展 1.1 Web1.0时代1.2 Web2.0时代1.3 解决CPU及内存压力1.4 解决IO压力 2.NoSQL数据库 2.1 NoSQL数据库概述2.2 NoSQL适用场景2.3 NoSQL不适用…

小啊呜产品读书笔记001:《邱岳的产品手记-09》第17讲 产品经理如何获得非权力性的影响力 第18讲 产品案例分析:WWFTogether的情怀设计

小啊呜产品读书笔记001:《邱岳的产品手记-09》第17讲 产品经理如何获得非权力性的影响力 & 第18讲 产品案例分析:WWFTogether的情怀设计一、今日阅读计划二、泛读&知识摘录1、第17讲 产品经理如何获得非权力性的影响力?2、第18讲 产品…

Unity 打印安卓apk报错的日志

文章目录环境连接安卓手机附录环境 1.华为手机打开调试模式: 【设置】|【关于手机】|【版本号】点三次。 2.unity3d 环境设置: 【File】|【Building Settings】开启必备选项 (其他非必选,最好勾上): D…

Sparse Merkle Tree

1. 引言 前序博客有: Merkle tree及其在区块链等领域的应用Merkle tree proof 2. Merkle tree Merkle tree可看成是对一组数据的密码学承诺,类似: 2.1 Merkle tree包含证明 如需证明A包含在上述树中,仅需要发送A, H(B), H(…

编译原理实验--实验一 词法分析--Python实现

目录 一、实验目的 二、实验内容 三、实验环境 四、实验步骤 五、测试要求 六、实验步骤 1、单词表<列出所识别语言的所有单词及其种别编码>&#xff1b; 2、识别单词的DFA图<可选择1-2类单词&#xff0c;给出识别该单词的DFA图> 3、关键代码 七、实验结果…

【C++实现】线程池的设计与实现

文章目录前言正文线程池提供的两个重要方法Any类的设计SemaphoreResult的实现Cache模式解释会遇到死锁问题第二个死锁问题&#xff0c;移植到Linux发生项目重构大致流程总结前言 开发环境&#xff1a; Linux&#xff0c;要求g版本能够支持C17以上&#xff1b;vs2019下开发&…

实验四 数码管实验【Verilog】

实验四 数码管实验【Verilog】前言推荐实验四 数码管实验【Verilog】一、实验目的&#xff1a;二、实验设备&#xff1a;三、实验任务:四、实验原理:五、实验步骤&#xff1a;六、实验结果&#xff1a;七、心得体会&#xff1a;最后前言 以下内容源自Verilog实验 仅供学习交流…

[附源码]java毕业设计校园期刊网络投稿系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Git的基础操作及使用

目录 1.git工作原理示意 2.git拉取服务器上的代码 3.git往服务器上提交新code 4.git 查看提交记录&#xff0c; 5.git删除旧代码仓库&#xff0c;提交新的代码仓库 6.如何修改自己提交代码的用户名和邮箱 6.1.查看现用邮箱和用户名 6.2.使用命令修改git的用户名和提交的…