이전 포스트에서 kadane algorithm을 소개했었는데 이번에는 2D matrix 확장. 아래 문제를 보자.
1 | Given a 2D array, find the maximum sum submatrix in it. |
naive
(start x, start y), (end x, end y)를 바꿔가면서 하면 for loop 4번. time complexity는 O(N^4)가 된다.
kadane 2D
kadane으로 1d array를 O(N^2)에서 O(N)으로 만들었듯이, 2D는 O(N^4)를 O(N^3)으로 만들 수 있다. left, right좌표를 옮겨가면서 row를 kadane 알고리즘을 적용하면 된다. 이때 column 값들을 accumulate하면서 하면 더 효율적으로 할 수 있는데 아래 코드를 보면 이해가 갈듯.
1 | int kadane2d(int[][] m){ |