Uma pergunta foi postada no Stack Overflow solicitando um algoritmo para resolver esse problema:
Eu tenho uma matriz (chame de A) que é nxn. Desejo selecionar um subconjunto (denominado B) de pontos da matriz A. O subconjunto consistirá em n elementos, nos quais um e apenas um elemento é obtido de cada linha e de cada coluna de A. A saída deve fornecer uma solução ( B) de modo que a soma dos elementos que compõem B seja o valor máximo possível, dadas essas restrições (por exemplo, 25 no exemplo abaixo). Se várias instâncias de B forem encontradas (ou seja, soluções diferentes que dão a mesma soma máxima), a solução para B que possui o maior elemento mínimo deve ser selecionada.
B também pode ser uma matriz de seleção que é nxn, mas onde apenas os n elementos desejados são diferentes de zero.
Por exemplo: se A =
|5 4 3 2 1| |4 3 2 1 5| |3 2 1 5 4| |2 1 5 4 3| |1 5 4 3 2|
=> B seria
|5 5 5 5 5|
I propôs uma solução de programação dinâmica que eu suspeito é tão eficiente quanto qualquer solução vai ficar. Copiei e colei meu algoritmo proposto abaixo.
- Deixei ser uma matriz quadrada de de números.
- Deixei denotar o elemento de na
i
quinta linha e naj
coluna. - Deixei denota a soma ideal de números não sobrepostos para um subarray quadrado de contendo a interseção de linhas para e colunas para .
Em seguida, a soma ideal de números não sobrepostos é indicada S( 1:n , 1:n )
e é apresentada da seguinte forma:
Note that S( i:i, j:j ) is simply Aij.
Ou seja, a soma ideal para uma matriz quadrada de tamanho n
pode ser determinada calculando separadamente a soma ideal para cada uma das quatro sub-matrizes de tamanho n-1
e maximizando a soma da sub-matriz e do elemento "deixado de fora" "
S for |# # # #|
|# # # #|
|# # # #|
|# # # #|
Is the best of the sums S for:
|# | | #| |# # # | | # # #|
| # # #| |# # # | |# # # | | # # #|
| # # #| |# # # | |# # # | | # # #|
| # # #| |# # # | | #| |# |
Esse é um algoritmo muito elegante e eu suspeito fortemente que esteja correto, mas não consigo encontrar uma maneira de provar que está correto.
A principal dificuldade que estou enfrentando é provar que o problema exibe uma subestrutura ideal. Acredito que, se as quatro escolhas possíveis em cada cálculo são as únicas quatro opções, isso é suficiente para mostrar a subestrutura ideal. Ou seja, preciso provar que isso:
| # |
| # # #|
| # # #|
| # # #|
Não é uma solução válida, seja porque é impossível (ou seja, prova por contradição) ou porque essa possibilidade já é explicada por uma das quatro n-1
variações "quadradas".
Alguém pode apontar alguma falha no meu algoritmo ou fornecer uma prova de que realmente funciona?
fonte
O(N^3)
se funcionasse, exceto que não funciona. Tão pooh.Respostas:
Na verdade, não acredito que sua solução proposta esteja correta. Um exemplo em que você pode precisar desse caso
pode ser
A solução ideal consiste em todos os 2s, enquanto houver apenas 1s nos cantos; portanto, você não pode encontrar uma solução ideal apenas começando pelas esquinas.
fonte
Esse problema pode ser resolvido pelo algoritmo de correspondência máxima no gráfico bipartido ponderado, como o algoritmo de Kuhn-Munkres ou o algoritmo de fluxo de custo mínimo.
Imagine um gráfico bipartidoG , cujos dois conjuntos de pontos separados são UMA e B . Cada vérticeumaEu∈ A corresponde a uma linha e cada vértice bj∈ B corresponde a uma coluna. O peso da bordaEi , j entre umaEu e bj é Mi , j , a j -ésimo elemento de Eu -a linha da matriz. A correspondência máxima ponderada deste gráfico corresponde a uma solução para o seu problema.
Para quebrar o empate, primeiro você precisa encontrar o valor da correspondência ponderada máxima. Deixe o valor serWm a x . Então você deve classificar todos os elementos na matrizM e faça uma pesquisa binária nele. Ao testar o valorm , ou seja, se existe uma correspondência máxima cujo elemento mínimo não seja menor que m , você deve modificar tudo Mi , j para - ∞ E se Mi , j< m e encontre a correspondência máxima W′m a x na matriz modificada M′ . W′m a x=Wm a x se houver uma solução cujos elementos min em nada menos que m .
fonte