Como faço para construir reduções entre problemas para provar que um problema é NP-completo?


27

Estou fazendo um curso de complexidade e estou tendo problemas para apresentar reduções entre os problemas dos NPCs. Como posso encontrar reduções entre problemas? Existe um truque geral que eu possa usar? Como devo abordar um problema que me pede para provar que é um NPC?


4
Desculpe desapontar, não acho que exista um método que resolva tudo. Como muitos problemas na vida, cada um é único. Com sorte, com o tempo, você terá o palpite certo sobre como resolver cada um.
Ran G.

11
Existem diretrizes úteis sobre como abordar esses problemas? Estou completamente perdido quando vejo uma pergunta que me pede para provar que é o NPC. Como devo abordá-los?
Anônimo

Respostas:


45

Não há nenhuma bala mágica; As provas de dureza NP são difíceis. No entanto, existe uma estrutura geral para todas essas provas. Muitos estudantes que lutam com as provas de dureza NP estão confusos sobre o que deveriam estar fazendo, o que obviamente torna impossível descobrir como fazê-lo. Então, aqui está o que fazer para provar um problema NP-difícil.

Primeiro, a menos que você esteja apenas fazendo a lição de casa, você precisa decidir qual problema NP-difícil reduzir ao seu problema . Isso é em grande parte uma questão de "cheiro". Se o número 3 aparecer em qualquer lugar da declaração do problema, tente reduzir de ou ou . (Sim, estou falando sério.) Se o seu problema envolve encontrar uma subsequência, permutação ou caminho ideal, tente reduzir de ou . Se o seu problema solicitar o menor subconjunto com uma determinada propriedade, tente ; se ele solicitar o maior subconjunto com uma determinada propriedade, tente3SAT3Color3PartitionHamiltonianCycleHamiltonianPathCliqueIndependentSet. Se o seu problema envolver algo no plano, tente ou . E assim por diante. Se o seu problema não "cheira" a nada, ou é provavelmente a sua melhor aposta.PlanarCircuitSATPlanarTSP3SATCircuitSAT

Obviamente, você já precisa saber exatamente como todos esses problemas são definidos e, quanto mais simples o problema que você reduzir, melhor. Portanto, por mais legal que o resultado pareça, não recomendo reduzir de ou ou ou .MinesweeperTetrisOneCheckersMoveSuperMarioBros

Segundo, a redução real. Para reduzir o problema X (o que você conhece é NP-difícil) para o problema Y (o que você está tentando provar é o NP-Hard, você precisa descrever um algoritmo que transforma uma instância arbitrária de X em uma instância legal de Y O algoritmo de redução precisa fazer algo específico com cada "recurso" da instância X. A parte da saída de cada "recurso" é geralmente chamada de gadget .

Mas o que é um recurso? Isso depende do problema X. Por exemplo:

  • Para transformar uma instância de , você precisará de um gadget para cada variável e para cada cláusula na fórmula de entrada. Cada gadget variável deve ter dois "estados" que correspondem a "verdadeiro" e "falso". Cada dispositivo de cláusula também deve ter vários "estados", cada um dos quais de alguma forma força pelo menos um dos literais nessa cláusula a ser verdadeiro. (Os estados não fazem parte da saída do algoritmo de redução.)3SAT

  • Para transformar uma instância de , você precisará de um gadget para cada vértice e cada aresta do gráfico de entrada e outro gadget para definir as três cores.3Color

  • Para transformar uma instância de , você precisará de um gadget para cada entrada, para cada fio e para cada porta no circuito de entrada.PlanarCircuitSat

A forma real do gadget depende problema Y, o que você está reduzindo a . Por exemplo, se você está reduzindo a um problema com gráficos, seus gadgets serão pequenos subgráficos; veja o artigo da Wikipedia. Se você estiver reduzindo um problema de agendamento, cada gadget será um conjunto de tarefas a serem agendadas. Se você está reduzindo a um problema sobre Mario , cada gadget será um conjunto de blocos e tijolos e Koopas.

Isso pode ficar confuso se os dois problemas envolverem o mesmo tipo de objeto. Por exemplo, se X e Y são problemas sobre gráficos, seu algoritmo transformará um gráfico (uma instância de X) em um gráfico diferente (uma instância de Y). Escolha sua notação com sabedoria, para não confundir esses dois gráficos. Também recomendo o uso de várias cores de tinta.

Por fim, seu algoritmo de redução deve satisfazer três propriedades:

  • É executado em tempo polinomial. (Isso geralmente é fácil.)

  • Se o seu algoritmo de redução receber uma instância positiva de X como entrada, ele produzirá uma instância positiva de Y como saída.

  • Se o seu algoritmo de redução produz uma instância positiva de Y como saída, ele deve ter recebido uma instância positiva de X como entrada.

Há uma sutileza importante aqui. Seu algoritmo de redução funciona apenas em uma direção, das instâncias de X às instâncias de Y, mas provar que o algoritmo está correto requer um raciocínio sobre a transformação nas duas direções. Você também deve se lembrar que seu algoritmo de redução não pode dizer se uma determinada instância de X é positiva ou negativa - isso exigiria resolver um problema difícil de NP em tempo polinomial!

Esse é o que . O como apenas vem com a prática.


5
Para reduções do (e geralmente problemas com "estrutura local / global" semelhante), pode ser uma boa ideia tentar fazer isso primeiro para uma instância de cláusula única do . Isso pode lhe dar uma idéia sobre qual gadget você precisa usar para cláusulas. Depois de descobrir o gadget para uma cláusula, sua redução colocará um desses gadgets para cada cláusula e, de alguma forma, aplicará a condição global (ou seja, os valores verdadeiros para as ocorrências de uma variável que aparecem em diferentes cláusulas devem ser consistentes, uma variável proposicional não pode seja em uma cláusula e em outra). 3SAT3SATptruefalse
Kaveh

11
Em relação a "Se seu algoritmo de redução produz uma instância positiva de Y como saída, ele deve ter recebido uma instância positiva de X como entrada": Embora pareça mais intuitivo escrever essa condição como "Se seu algoritmo de redução receber uma instância negativa de X como entrada, produz uma instância negativa de Y como saída ", observe que essas duas condições são equivalentes e, como JeffE escreveu, geralmente torna a construção da prova muito mais fácil, pois em cada caso" você tem algo "(seja o instância positiva de X ou positiva) para trabalhar.
Jrandom_hacker

11

JeffE descreve a estratégia mais comum: conheça muitos problemas completos de NP, encontre um que se encaixe muito bem e faça a redução fácil .

Outra estratégia válida é sempre usar o 3SAT (ou qualquer outro problema). Isso pode tornar algumas reduções mais complexas, mas o lado positivo é que você tem muita experiência em expressar satisfação em outros tipos de problemas. Assim, você economiza o tempo de encontrar um bom parceiro de redução (incluindo becos sem saída) e espera que sua experiência permita que você faça a redução rapidamente, mesmo que seja mais difícil.

Essa abordagem também possui uma meta beleza: (3) o SAT é um dos poucos problemas para os quais a integridade do NP foi comprovada (quase) diretamente. Portanto, confiar apenas nessa prova mantém sua "árvore de provas" plana, evitando longas cadeias de reduções.


3
Provar diretamente que o problema de Parada Limitada é NP-completo quando o limite é dado em unário não é muito difícil e é uma maneira fácil de provar que existe algum problema NP-completo, mesmo que o problema em si seja bastante inútil de reduzir.
Alex-Brink

3
Não tenho certeza sobre a afirmação de que é o único problema que foi provado ser NP-complete diretamente. De fato, se você o interpreta em sentido estrito, é definitivamente falso. O artigo de Cook de 1971 fala sobre TAUT e não SAT (ele usa reduções de Cook, não reduções de Karp) (é fácil observar que a prova também prova que SAT é NP-completo sob reduções de Karp).
Kaveh

@Kaveh Huh? A tautologia é Co-Np completa e, portanto, não se sabe que esteja em NP (completo). Eu não li o jornal de Cook.
Albert Hendriks

11
@ Albert, bem, você deve lê-lo então. Com as reduções do Cook, você não pode distinguir entre NP e coNP.
Kaveh
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.