Dada uma matriz de números inteiros, encontre uma sub-matriz cuja soma é máxima. Se houver apenas uma linha ou apenas uma coluna, isso equivale a encontrar um subconjunto máximo .
A versão 1D pode ser resolvida em tempo linear por programação dinâmica. A versão 2D pode ser resolvida em fazendo um loop sobre todos os pares de colunas e usando o algoritmo 1D na matriz cujo comprimento é o número de linhas na matriz em que cada posição mantém a soma dos elementos na linha entre as duas colunas.
Se a matriz for dada por:
Então, para o par de colunas , a soma máxima da sub-matriz pode ser encontrada usando o algoritmo 1D na matriz (de cima para baixo):
Alguém sabe de um algoritmo para resolver este problema?
dynamic-programming
maximum-subarray
saadtaame
fonte
fonte
Respostas:
Eu encontrei o seguinte: Sung Eun Bae, algoritmos sequenciais e paralelos para o problema geral generalizado do subarray . Leia as páginas 18-30, onde diz que existem algoritmos cúbicos e sub-cúbicos para esse problema (no caso geral), por exemplo , Tadao Takaoka algoritmo .O ( nm2) O (n3registroregistronregistron------√)
Também encontrei um comentário no fórum dizendo que esse problema pode ser resolvido em para matrizes com N elementos diferentes de zero usando a árvore de segmentos "engraçada" (você pode perguntar ao comentarista sobre detalhes).O (N2registroN)
fonte