【数学】二维差分

一.简介

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

二维差分的计算方法类似于一维差分,对于一个二维数据矩阵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
#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<

你可能感兴趣的:(数学专栏,算法,c++)