一維以及二維的差分的簡述


  差分,也就是數與數之間的差值。拿一維差分來舉例子,將差分設為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$

  推薦自己再推一遍。

  之后求數只需累加即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM