Algorithmic Techniques#

Prefix Sum#

Index ii

0

1

2

3

4

5

6

arr[i]\texttt{arr}[i]

1

6

4

2

5

3

-

prefixSum[i]\texttt{prefixSum}[i]

0

1

7

11

13

18

21

Prefix sum can be calculated in O(n)\mathcal{O}(n) by the below formula:

prefixSum[i]=prefixSum[i1]+arr[i1] \texttt{prefixSum}[i] = \texttt{prefixSum}[i - 1] + \texttt{arr}[i - 1]

Now, the sum of the elements of arr\texttt{arr} from L\textit{L} to R\textit{R} can be computed using:

i=LRarr[i]=i=0Rarr[i]i=0L1arr[i] \sum_{i=L}^{R} \texttt{arr}[i] = \sum_{i=0}^{R} \texttt{arr}[i] - \sum_{i=0}^{L-1} \texttt{arr}[i]

Using the prefix sum array, the same can be

i=LRarr[i]=prefixSum[R+1]prefixSum[L] \sum_{i=L}^{R} \texttt{arr}[i] = \texttt{prefixSum}[R+1] - \texttt{prefixSum}[L]

Example should make it more clearer:

1=14arr[i]=i=04arr[i]i=00arr[i]n=14arr[i]=(1+6+4+2+5)(1)=181=17. \sum_{1=1}^{4} \texttt{arr}[i] = \sum_{i=0}^{4} \texttt{arr}[i] - \sum_{i=0}^{0} \texttt{arr}[i] \\ \sum_{n=1}^{4} \texttt{arr}[i] = (1 + 6 + 4 + 2 + 5) - (1) = 18 - 1 = 17.

Using prefix sums:

prefixSum[5]prefixSum[1]=181=17. \texttt{prefixSum}[5] - \texttt{prefixSum}[1] = 18 - 1 = 17.

Read more at: https://usaco.guide/silver/prefix-sums and https://labuladong.gitbook.io/algo-en/iii.-algorithmic-thinking/prefix_sum

Backtracking#

Types of problems

  1. Decision - Search for a solution.

  2. Optimization - Search for best solution.

  3. Enumeration - Find all possible/feasible solutions.