NxN
행렬에서 최대 합 부분 직사각형을 찾는 것은 다른 게시물에서 지적한대로 2-d kadane의 알고리즘을 사용하여 O(n^3)
시간으로 수행 할 수 있습니다. 그러나 행렬이 희박한 경우, 특히 O(n)
0이 아닌 항목 인 경우 O(n^3)
시간을 맞출 수 있습니까?희소 행렬의 최대 합 부분 직사각형
만약 내가 관심이있는 현재의 응용 프로그램에 도움이된다면 행렬의 각 행과 각 열에서 하나가 아닌 0 값을 가정하는 솔루션이면 충분할 것입니다. 그러나, 내 미래의 응용 프로그램에서는이 가정이 적절하지 않을 수 있습니다 (단지 희소성이 유지 될 것입니다). 어쨌든 수학적 직관은 희소성을 단순히 악용하는 좋은 해결책이있을 수 있으며 행렬이 대각선 및 순열 행렬의 곱이다.
각 행과 각 열에 0이 아닌 값이 많지 않은 경우 해당 값을 x 축과 y 축에 투영하면 크기가 각각 n 인 2 개의 1 차원 배열이 생성됩니다.두 배열의 최대 인접한 부분 배열을 찾습니다. 나는 이것이 당신에게 최대 직사각형을 줄 것이라고 생각합니다. 이것은 O (n) 시간 및 O (n) 공간 복잡성에서 수행 될 수 있습니다. –
불행하게도 다음과 같은 반대의 예제 에서처럼이 제안 된 O (n) 솔루션이 작동하지 않습니다. 1 0 0 \0 0 2 \\ 0 -1 0 \\ – user2566092