Given a matrix (or 2D array) a of integers, find prefix sum matrix for it. Let prefix sum matrix be psa. The value of psa[i][j] contains sum of all values which are above it or on left of it.
Prerequisite: Prefix Sum – 1D
A simple solution is to find psa[i][j] by traversing and adding values from a to a[i][j]. Time complexity o this solution is O(R * C * R * C).
An efficient solution is to use previously computed values to compute psa[i][j]. Unlike 1D array prefix sum, this is tricky, here if we simply add psa[i][j-1] and psa[i-1][j], we get sum of elements from a to a[i-1][j-1] twice, so we subtract psa[i-1][j-1].
psa = psa + psa - psa + a = 6 + 6 - 4 + 1 = 9 The general formula: psa[i][j] = psa[i-1][j] + psa[i][j-1] - psa[i-1][j-1] + a[i][j] Corner Cases (First row and first column) If i = 0 and j = 0 psa[i][j] = a[i][j] If i = 0 and j > 0 psa[i][j] = psa[i][j-1] + a[i][j] If i > 0 and j = 0 psa[i][j] = psa[i-1][j] + a[i][j]
Below is the implementation of the above approach
1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20
Time Complexity : O(R*C)
Auxiliary Space : O(R*C)
- Elements that occurred only once in the array
- Find the largest area rectangular sub-matrix whose sum is equal to k
- Pair formation such that maximum pair sum is minimized
- Count divisible pairs in an array
- Dynamic Programming | Wildcard Pattern Matching | Linear Time and Constant Space
- Multistage Graph (Shortest Path)
- Sum of products of all combination taken (1 to n) at a time
- Longest Increasing Path in Matrix
- Prefix Sum Array - Implementation and Applications in Competitive Programming
- Find number of times a string occurs as a subsequence in given string
- Submatrix Sum Queries
- Count all possible paths from top left to bottom right of a mXn matrix
- Maximum sum rectangle in a 2D matrix | DP-27
- Optimal Binary Search Tree | DP-24
- Longest Increasing Subsequence Size (N log N)
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.
Improved By : manishshaw1