O verdadeiro problema que estou enfrentando é o seguinte.
INSTANCE : tenho conjuntos e e matriz para todos e .
PERGUNTA : preciso encontrar um subconjunto do de tamanho o menor possível e particione o conjunto para dentro conjuntos disjuntos cuja união é igual tal que para todos , Eu tenho
Exemplo:
Dado e a matriz
Neste exemplo, deve ser igual a S = \ {1, 2 \} e K_1 = \ {3 \} e K_2 = \ {1,2 \} .
Notei dois fatos:
- Se houver algum tal que para todos os então e ; e
- Se existir algum tal que então .
Minha pergunta : É possível resolver esse problema de otimização em tempo polinomial (pelo menos com algoritmo de aproximação)?
A primeira coisa que tentei fazer foi transformá-lo em um problema conhecido e depois aplicar um algoritmo conhecido para isso. Pensei em transformá-lo em uma tampa ou caixa de embalagem, mas falhei e também não acho que isso seja interessante.
O problema que tentei formular.
I têm conjuntos e e matriz para todos os e . Além disso, eu tenho conjuntos disjuntos para cada (eu adicionei como entradas porque não poderia formulá-lo de outra forma.)
Por fim, recebo o seguinte:
Obrigado.
fonte
Respostas:
Mesmo a versão de decisão desse problema, na qual tentamos determinar simplesmente se existe alguma solução viável, é difícil de NP por redução do Exact Cover . (A versão de otimização, onde buscamos uma solução viável que minimize , é claramente pelo menos tão difícil quanto isso.)|S|
A matriz de linha única e coluna única contendo o valor 0,5 é um exemplo de entrada para a qual não há solução viável. Aqui está outro:
Criando um gadget "Escolha no máximo um"
Primeiro, observe que, se o valor máximo em alguma linha for , e essa linha contiver (pelo menos) duas cópias de , digamos em e , , não pode conter e , pois se o fez, um dos dois casos a seguir deve surgir, cada um dos quais leva a uma contradição:ai x>0 x aij aij′ j′≠j S j j′
Assim, podemos escolher um valor máximo que é seguramente maior do que a soma de todos os valores não-máximas na linha, e usar cópias deste valor máximo para impor que, no máximo, uma daquelas colunas está incluída no .S
Podemos transformar essa restrição "escolher no máximo uma" em uma restrição "escolher exatamente uma" usando qualquer valor positivo menor que 1 como o valor "não máximo". Isso porque cada linha pertence a alguma parte da partição de linha e, se , o RHS da desigualdade se torna negativo para a linha , portanto não há como satisfazê-la: portanto, pelo menos um deve ser forçado a modo que .i Kj aij<1 i j S aij≥1
Portanto, para garantir que exatamente uma das colunas em algum conjunto seja forçada em , crie uma linha seguinte maneira:T⊆N S ai
Assim, a redução da tampa exacta é simples: há uma linha para cada elemento, uma coluna para cada conjunto, com , sempre conjunto inclui elemento e contrário. Ambas as direções ("A instância EC de entrada é uma instância YES instância construída do problema do OP é uma instância YES" e "A instância construída do problema do OP é uma instância YES a instância EC de entrada é uma instância YES") são claros.aij=n+1 j i aij=0.5 ⟹ ⟹
fonte