• 一维以及二维的差分的简述


      差分,也就是数与数之间的差值。拿一维差分来举例子,将差分设为c[ ]数组,原数为a[ ],那么

      $c[i]=a[i]-a[i-1]$

      这便是简单的差分数组;

      那么要他何用?

      最为主要的作用就是区间的修改,那么在修改之前,我们先明白如何将原数求出。很显然,c[1]~c[i]差分数组求和即可得到a[i]。

      那区间修改呢?

      如我们将从l到r的区间加上s(减去也一样),那么由差分数组的定义得,观察数组,发现只有c[l]和c[r+1]变化了。

      具体证明可以手动模拟,而中间的不变是因为i项与i-1项都加上了s,差值不变;

      那么这样就能得到

      $a[l]~a[r]+=s-->c[l]+s,c[r+1]+s$

      这样就实现了O(1)修改;

      当然还有区间求和,这里给出证明

      这样我们可以发现一个规律,即第二个多项式的系数为i-1

      那么我们用c2[ ]来维护这个数组,那么

      c2[i]=(i-1)*c[i];

      并且在修改时维护c2[ ]数组,即

      $c[l]+(l-1)*s,c[r+1]-(r+1-1)*s$

      之后便有了公式

      

      这里便是一维差分

      二维差分的推导

      这里的推导只是单纯的根据一维差分和二维前缀和的性质来推的

      二维前缀和请务必提前了解,并有一定的认识;

      那么开始推导;

      根据二维前缀和表示的是右上角矩形的和,由于差分只涉及前面相邻的数(由一维可以推出),并且由前面范围的数相加得到这个位置的数;

      那么类比二维前缀和和一维差分,可以简单推测出二维差分的公式

      $c[i][j]=a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1]$

       是不是觉得非常眼熟?

      我们再代入检验,即将左上角的矩阵差分求和,正好得到了这个数·

      这还并不能代表什么,重要的是区间的修改;

      同样,我们将要修改的矩阵的右上角设为(x1,y1),右下角设为(x2,y2)

      

      我们发现有影响的只有我所标注的点,除了(x2,y2),这个应该很好看出;

      那么,我们就得到公式

      $c[x1][y1]+=s,c[x1][y2+1]-=s,c[x2+1][y1]-=s,c[x2+1][y2+1]+=s$

      推荐自己再推一遍。

      之后求数只需累加即可。

  • 相关阅读:
    摄像头标定
    利用opencv的FileStorage类实现XML/YAML文件的读写
    VS2012在一个解决方案中添加多个项目(工程)
    Complainer sucks!
    Artificial Intelligence
    《Fast Traking via Spatio-Temporal Context Learning》要点整理与代码实现之二
    《Fast Traking via Spatio-Temporal Context Learning》要点整理与代码实现之一
    目录文件管理
    账号管理
    磁盘文件
  • 原文地址:https://www.cnblogs.com/waterflower/p/11100774.html
Copyright © 2020-2023  润新知