Você recebe uma matriz de comprimento . Cada elemento da matriz pertence a uma das classes. Você deve reorganizar a matriz usando o número mínimo de operações de troca, para que todos os elementos da mesma classe sejam sempre agrupados, ou seja, eles formem uma sub- matriz contígua.
Por exemplo:
Três outros arranjos válidos permanecem.
Como é chamado esse problema na literatura? Existe um algoritmo eficiente para isso?
terminology
reference-request
sorting
arrays
Marko Bukal
fonte
fonte
Respostas:
Nota: É uma prova de dureza, e acho que existem algoritmos práticos como programação inteira, etc.
Dada uma instância BIN_PACKING em que você deseja compactar os números em compartimentos de tamanho , e é garantido que , podemos criar uma instância do seu problema da seguinte maneira:n 1 , … , n K L m 1 , … , m L ∑ n i = ∑ m j = NK n1,…,nK L m1,…,mL ∑ni=∑mj=N
Agora, uma observação importante é que não faz sentido manter pelo menos uma classe em um slot e mover outras (porque isso não altera o tamanho de um 'bin'). Assim, a embalagem bin original está disponível, se e somente se o número mínimo de swaps não é maior que . Como o BIN-PACKING é conhecido por ser fortemente NP-completo , seu problema é NP-difícil.(N+1)2 N
fonte
Eu também suspeito que isso é difícil para o NP, mas, na ausência de uma idéia para uma prova, aqui estão alguns limites inferiores rapidamente computáveis que podem ser úteis para verificar a otimização de uma solução heurística ou remover uma pesquisa ramificada e vinculada .
Deixe a classe conter elementos. Em qualquer solução válida, a classe deve começar em alguma posição . Assim, podemos calcular um limite inferior no custo de "fixar" a classe tentando todas as posições iniciais possíveis , contando o número de elementos não- no bloco começando na posição (cada uma dessas posições exigirá troca) e levando o mínimo. Esse pode ser calculado para qualquer em usando uma abordagem de janela deslizante, paran i i j L i i j i n i j L i i O ( n ) O ( K n )i ni i j Li i j i ni j Li i O(n) O(Kn) tempo total. Dois limites inferiores gerais são:
No seu exemplo, esses limites fornecem 1 (0,5 pode ser arredondado no último caso), o que é óbvio.
fonte