【数学】二维差分

一.简介

二维差分是一种用于计算二维数据矩阵中相邻元素之间差异的方法。它可以帮助我们分析二维数据的变化趋势和模式。

二维差分的计算方法类似于一维差分,对于一个二维数据矩阵X,其差分矩阵Y的第(i, j)个元素可以通过以下公式计算得到:

Y[i, j] = X[i+1, j] - X[i, j] + X[i, j+1] - X[i, j]

这样,差分矩阵Y的尺寸将比原始矩阵X的尺寸少1行和1列。差分矩阵Y中的元素表示了原始矩阵X中相邻元素之间的差异。

需要注意的是,二维差分是一种简单的方法,可能无法捕捉到原始数据中的复杂模式。在某些情况下,可能需要使用更高级的技术和算法来分析二维数据。


二.变化通式

一个差分矩阵为d[x][y],则区域内+1则为(x1,y1为左上角坐标,x2,y2为右下角坐标)

d[x1][y1]+=1 ;  d[x1][y2+1]-=1 ;   d[x2+1][y1]-=1 ;  d[x2+1][y2+1]+=1 ;


三.求原矩阵:

b[i][j]=b[i][j]+b[i-1][j]+b[i][j-1]-b[i-1][j-1];


四.题目

P3397 地毯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


五.参考代码

#include<bits/stdc++.h>
#define maxn 1005
using namespace std;
int n,m;
int b[maxn][maxn]; //二维差分 
int main(){
	cin>>n>>m;
	while(m--){
		int x1,x2,y1,y2;
		cin>>x1>>y1>>x2>>y2;
		//差分通式 
		b[x1][y1]+=1;b[x1][y2+1]-=1;b[x2+1][y1]-=1;b[x2+1][y2+1]+=1;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			//sum 
			b[i][j]=b[i][j]+b[i-1][j]+b[i][j-1]-b[i-1][j-1];
			cout<<b[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值