Prefix Sum Algorithm | Prefix Sum Array Implementation | EP2

kanhaiyagupta 435 views 34 slides May 01, 2019
Slide 1
Slide 1 of 34
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34

About This Presentation

Prefix sum algorithm is mainly used for range query and the complexity of prefix sum algorithm is O(n).
This video explains the working of prefix sum algorithm.
This is the second part of the video and please watch the first part (why you must learn prefix sum algorithm) before watching this.

✅ W...


Slide Content

Prefix sum It is a simple yet powerful technique that allows to perform fast calculation on the sum of elements in a given range (called contiguous segments of array).

Prefix sum It is a simple yet powerful technique that allows to perform fast calculation on the sum of elements in a given range (called contiguous segments of array). 6 3 -2 4 -1 -5 Example - A[ ] =

Prefix sum It is a simple yet powerful technique that allows to perform fast calculation on the sum of elements in a given range (called contiguous segments of array). 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 A[ ] =

Prefix sum It is a simple yet powerful technique that allows to perform fast calculation on the sum of elements in a given range (called contiguous segments of array). 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - A[ ] = A[ ] =

Prefix sum 6 3 -2 4 -1 -5 0 1 2 3 4 5 6 6 9 -2 4 -1 -5 6 9 7 4 -1 -5 6 9 7 11 -1 -5 6 9 7 11 10 -5 6 9 7 11 10 10 5 6 9 7 11 10 10 -5 Example - i = A[ ] =

Prefix sum 6 3 -2 4 -1 -5 0 1 2 3 4 5 6 6 9 -2 4 -1 -5 6 9 7 4 -1 -5 6 9 7 11 -1 -5 6 9 7 11 10 -5 6 9 7 11 10 10 5 6 9 7 11 10 10 -5 for( int i= 1 ; i< 7 ; i++ ){ A[i] = A[i]+A[i-1]; } n Example - i = A[ ] =

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - A[ ] = A[ ] = i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - Calculate the sum between range [ 0, 4 ] ? A[ ] = A[ ] = i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - Calculate the sum between range [ 0, 4 ] ? A[ ] = A[ ] = i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - Calculate the sum between range [ 0, 4 ] ? A[ ] = A[ ] = Ans : 10 (=A[4]) O (1) i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - Calculate the sum between range [ 0, 4 ] ? A[ ] = A[ ] = Ans : 10 (=A[4]) O (1) Calculate the sum between range [ 0, 6 ] ? i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - Calculate the sum between range [ 0, 4 ] ? A[ ] = A[ ] = Ans : 10 (=A[4]) O (1) Calculate the sum between range [ 0, 6 ] ? i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - Calculate the sum between range [ 0, 4 ] ? A[ ] = A[ ] = Ans : 10 (=A[4]) O (1) Calculate the sum between range [ 0, 6 ] ? Ans : 5 (=A[6]) O (1) i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - Calculate the sum between range [ 0, 4 ] ? A[ ] = A[ ] = Ans : 10 (=A[4]) O (1) Calculate the sum between range [ 0, 6 ] ? Ans : 5 (=A[6]) O (1) Calculate the sum between range [ 2, 6 ] ? i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - Calculate the sum between range [ 0, 4 ] ? A[ ] = A[ ] = Ans : 10 (=A[4]) O (1) Calculate the sum between range [ 0, 6 ] ? Ans : 5 (=A[6]) O (1) Calculate the sum between range [ 2, 6 ] ? sum between range [ 0, 6 ] i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - Calculate the sum between range [ 0, 4 ] ? A[ ] = A[ ] = Ans : 10 (=A[4]) O (1) Calculate the sum between range [ 0, 6 ] ? Ans : 5 (=A[6]) O (1) Calculate the sum between range [ 2, 6 ] ? sum between range [ 0, 6 ] sum between range [ 0, 6 ] = sum between range [ 2, 6 ] sum between range [ 0, 1 ] + i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - Calculate the sum between range [ 0, 4 ] ? A[ ] = A[ ] = Ans : 10 (=A[4]) O (1) Calculate the sum between range [ 0, 6 ] ? Ans : 5 (=A[6]) O (1) Calculate the sum between range [ 2, 6 ] ? sum between range [ 0, 6 ] sum between range [ 0, 6 ] = sum between range [ 2, 6 ] sum between range [ 0, 1 ] + A[ 6 ] = A[ 1 ] + sum between range [ 2, 6 ] A[ 6 ] - A[ 1 ] = sum between range [ 2, 6 ] i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - Calculate the sum between range [ 0, 4 ] ? A[ ] = A[ ] = Ans : 10 (=A[4]) O (1) Calculate the sum between range [ 0, 6 ] ? Ans : 5 (=A[6]) O (1) Calculate the sum between range [ 2, 6 ] ? sum between range [ 0, 6 ] sum between range [ 0, 6 ] = sum between range [ 2, 6 ] sum between range [ 0, 1 ] + A[ 6 ] = A[ 1 ] + sum between range [ 2, 6 ] A[ 6 ] - A[ 1 ] = sum between range [ 2, 6 ] sum between range [ 2, 6 ] = A[ 6 ] - A[ 1 ] i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Example - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - Calculate the sum between range [ 0, 4 ] ? A[ ] = A[ ] = Ans : 10 (=A[4]) O (1) Calculate the sum between range [ 0, 6 ] ? Ans : 5 (=A[6]) O (1) Calculate the sum between range [ 2, 6 ] ? sum between range [ 0, 6 ] sum between range [ 0, 6 ] = sum between range [ 2, 6 ] sum between range [ 0, 1 ] + A[ 6 ] = A[ 1 ] + sum between range [ 2, 6 ] A[ 6 ] - A[ 1 ] = sum between range [ 2, 6 ] sum between range [ 2, 6 ] = A[ 6 ] - A[ 1 ] sum between range [ 2, 6 ] = 5 - 9 sum between range [ 2, 6 ] = - 4 i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Generalization - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - A[ ] = A[ ] = i = 0 1 2 3 4 5 6

Prefix sum 6 3 -2 4 -1 -5 Generalization - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - A[ ] = A[ ] = i = 0 1 2 3 4 5 6 A[ 2 , 6 ]

Prefix sum 6 3 -2 4 -1 -5 Generalization - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - A[ ] = A[ ] = i = 0 1 2 3 4 5 6 A[ 6 ] A[ 2 , 6 ]

Prefix sum 6 3 -2 4 -1 -5 Generalization - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - A[ ] = A[ ] = i = 0 1 2 3 4 5 6 A[ 1 ] A[ 6 ] A[ 1 ] A[ 2 , 6 ]

Prefix sum 6 3 -2 4 -1 -5 Generalization - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - A[ ] = A[ ] = i = 0 1 2 3 4 5 6 A[ 2 , 6 ] = A[ 6 ] - A[ 1 ] A[ 6 ] A[ 1 ] A[ 2 , 6 ]

Prefix sum 6 3 -2 4 -1 -5 Generalization - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - A[ ] = A[ ] = i = 0 1 2 3 4 5 6 To calculate the sum between range [ I , j ] A[ 2 , 6 ] = A[ 6 ] - A[ 1 ] A[ 6 ] A[ 1 ] A[ 2 , 6 ]

Prefix sum 6 3 -2 4 -1 -5 Generalization - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - A[ ] = A[ ] = i = 0 1 2 3 4 5 6 Formula - To calculate the sum between range [ I , j ] A[ 2 , 6 ] = A[ 6 ] - A[ 1 ] A[i, j] = A[j] - A[i - 1 ] A[ 6 ] A[ 1 ] A[ 2 , 6 ]

Prefix sum 6 3 -2 4 -1 -5 Generalization - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - A[ ] = A[ ] = i = 0 1 2 3 4 5 6 Formula - To calculate the sum between range [ I , j ] A[ 2 , 6 ] = A[ 6 ] - A[ 1 ] Calculate the sum between range [ 3, 5 ] ? A[i, j] = A[j] - A[i - 1 ] A[ 6 ] A[ 1 ] A[ 2 , 6 ]

Prefix sum 6 3 -2 4 -1 -5 Generalization - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - A[ ] = A[ ] = i = 0 1 2 3 4 5 6 Formula - To calculate the sum between range [ I , j ] A[ 2 , 6 ] = A[ 6 ] - A[ 1 ] Calculate the sum between range [ 3, 5 ] ? A[ 3, 5 ] = A[ 5 ] - A[ 3 - 1 ] A[ 3, 5 ] = A[ 5 ] - A[ 2 ] A[ 3, 5 ] = 10 - 7 A[ 3, 5 ] = 3 A[i, j] = A[j] - A[i - 1 ] A[ 6 ] A[ 1 ] A[ 2 , 6 ]

Prefix sum 6 3 -2 4 -1 -5 Generalization - i = 0 1 2 3 4 5 6 6 9 7 11 10 10 5 Prefix Sum Array - A[ ] = A[ ] = i = 0 1 2 3 4 5 6 A[ 6 ] A[ 1 ] A[ 2 , 6 ] Formula - To calculate the sum between range [ I , j ] A[ 2 , 6 ] = A[ 6 ] - A[ 1 ] Calculate the sum between range [ 3, 5 ] ? A[ 3, 5 ] = A[ 5 ] - A[ 3 - 1 ] A[ 3, 5 ] = A[ 5 ] - A[ 2 ] A[ 3, 5 ] = 10 - 7 A[ 3, 5 ] = 3 O(1) A[i, j] = A[j] - A[i - 1 ]

To calculate prefix sum array of n size array Time complexity - O(n) Analysis of Algorithm - Time taken to perform range sum query is - Time complexity - O(1)

Analysis of Algorithm - Total time taken to pre process the n size array and to perform range query is - Time complexity - + O(1) O(n) ~ O(n) To calculate prefix sum array of n size array Time complexity - O(n) Time taken to perform range sum query is - Time complexity - O(1)

It takes O(n) time to calculate prefix sum array of n size array. Key takeaway from this lesson - It takes O(1) time to perform range sum query on n size array.

Here is the link to video tutorial :- https://youtu.be/pVS3yhlzrlQ