提示:以下是本篇文章正文内容,下面案例可供参考
一、二维矩阵的前缀和应该怎么做?
1.引入一个二维数组
int[][] arr = {
0 0 0 0 0
0 1 7 2 4
0 3 6 2 8
0 2 1 2 3
}
2.二维前缀和矩阵数组
二维矩阵前缀和和一维矩阵大同小异,我们可以定义矩阵前缀,是以右下角元素为主的矩阵的元素和。
我们可以一步一步的推出二维前缀矩阵里面各个位置的值。设置前缀和矩阵为s例如:我们求s[1][1]的值。
注:我们在初始位置多添加了一行、一列,因为原arr数组这些地方是没有值的
图2.1
图2.2
图2.3
图2.4
即求图2.1黄色区域的面积=图2.2蓝色区域的面积+图2.3绿色区域的面积-图2.4紫色区域的面积(注因s[0][0]即图2.4紫色区域的面积被重复计算了)+arr[1][1]。
s[1][1] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + arr[1][1](注:里面的i=1,j=1)
3.推出二维矩阵前缀和的公式计算
由上述式子推出的s[1][1]的值我们可以推广到公式s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1