演算法基礎課 字首和與差分

2021-10-07 14:18:44 字數 761 閱讀 1156

對於字首和:實質上就是背公式,

對於字首和分一維和二維首先應該是一維字首和的公式:

s[i]=s[i-1]+a[i];

a[i]+=a[i-1];

常用的就是這兩個公式,對於字首和實質就是某一段區間的和。作用:求出某一段區間的和。

比如說對於[l,r]這個區間,我們應該做的就是s[r]-s[l-1]即可。

對於二維字首和我們也叫做矩陣的和:

對於矩陣的和應該如何取?

s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j]

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

二維字首和的作用:求x1,y1到x2,y2的區間和

s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]+s[x1-1][y1-1]

差分:差分的核心思想如下:

對於差分,差分可以理解為字首和的逆運算。

先設定乙個陣列,設定其和全為0。

然後再進行插入操作,插入的時候特別注意,對於l處來說,應該加上乙個數值a,對於r+1處應該剪掉乙個相應的數值,目的是為了保證,在l.r這個區間範圍內其字首和進行加減。

二維差分:

二維差分也是類似,但是對於二維差分略微有所不同的是:

b[x1][y1] += c;

b[x2 + 1][y1] -= c;

b[x1][y2 + 1] -= c;

b[x2 + 1][y2 + 1] += c;

結束。

演算法基礎課 字首和

通常,求乙個陣列中間序列的和,可以遍歷一次,這樣的時間複雜度是o n 如果需要頻繁獲得這個和,那麼每次都要重新計算一遍。為了提高效率,可以提前計算乙個字首和陣列,每次查詢任意乙個區間的和時,用s right s left 就可以了。輸入乙個長度為n的整數序列。接下來再輸入m個詢問,每個詢問輸入一對l...

左神基礎課 字首樹

插入 得到待插入字串的長度,每次從上到下生成節點插入進去 就是相當於尾插法生成鍊錶 但如果我們要生成的節點本來就已經有了,那麼我們就直接到下面的節點裡去。在這個步驟的迴圈中,每次都要把當前節點的pass 1,表示有乙個串要經過該節點。到了最終的尾節點,把end 1 優化 每次我們都判斷當前節點pas...

字首和,差分演算法

其實可以把它理解為數學上的數列的前n項和 對於乙個一維陣列的字首和 我們定義對於乙個陣列a的字首和陣列s,s i a 1 a 2 a i 與一維字首和類似,設s i j 表示所有a i j 的和。1 i i,1 j j 有一點像 矩形的面積 那樣,把一整塊區域的值都加起來。一般用來求區間和。對於一維...