Algoritmo Polytime para SUBSET-SUM assumindo P = NP

7

Na página da Wikipedia no problema P vs. NP, existe um algoritmo que "resolve" SUBSET-SUM no caso de P = NP em tempo polinomial. (A idéia é encontrar uma TM que dê um certificado). Mas dá "sim" no tempo polinomial e dura para sempre se a resposta for "não". Obviamente, pode ser corrigido para dar "não" em tempo exponencial (apenas para executar o algoritmo exponencial se o primeiro estiver em execução por muito tempo).

Mas podemos descrever explicitamente um algoritmo "honesto", que resolve (e quero dizer, resolve realmente) SUBSET-SUM (ou qualquer outro problema de NP-completo) em tempo polinomial assumindo P = NP?

Por "honesto" e "realmente resolve", quero dizer que o algoritmo atende às definições clássicas de um algoritmo de tempo polinomial, ou seja, aqui devem existir constantes modo que, em qualquer entrada algoritmo, termine em não mais que pisa e "yes" se SUBSET-SUM e "no" caso contrário. O algoritmo da Wikipedia não atende à primeira condição e, portanto, não "resolve" realmente o problema.C1,C2xC1|x|C2x

Thefacetakt
fonte
Eu acredito que isso é desconhecido. A área é conhecida como algoritmos heurísticos ideais . Um dos principais pesquisadores é Edward A. Hirsch .
Yuval Filmus
@djechlin está certo e a Wikipedia está errada: o algoritmo sempre para, porque acabará atingindo um método de força bruta e resolverá o problema. Além disso, como está combinando todos os programas, seu tempo de execução também é facilmente analisado: se na entrada , o ésimo algoritmo der uma resposta em etapas, terá simulado etapas no total, independentemente de quaisquer pressupostos teóricos da complexidade; é verdade, independentemente da verdadeira complexidade do SUBSET-SUM. Esse método de pesquisa é chamado Levin Search, às vezes Universal Search. WxatWΘ((a+t)2)
Lieuwe Vinkhuijzen

Respostas:

2

Posso responder pela metade, mas acredito que a pergunta mais profunda que você está enfrentando é algo que estou aprendendo melhor :)

O algoritmo na wikipedia, chamado W, é baseado na idéia: em vez de adivinhar certificados, por que não adivinhar o próprio algoritmo P determinístico D? Isso é caro, mas, como é independente da entrada, é O (1) (se esse algoritmo existir). Na verdade, o algoritmo sempre decide mesmo se P! = NP, porque é claro que há uma série de programas de "força bruta" que imprimem apenas um certificado possível e interrompem, para que W possa voltar a uma força bruta muito lenta.

O problema é que você realmente não tem como verificar o programa que ele retorna para você. Você pode imaginar executando W e achar que parece preferir um determinado programa, mas pode descobrir que, em entradas maiores, ele eventualmente encontra uma falha nesse programa e segue em frente. Pode parecer um algoritmo que parece mas mais tarde encontra um erro nele e muda para um algoritmo . Você nunca saberá quando encontrou o "certo".n7n2000

Essa é realmente a mesma idéia usada na prova do teorema de Karp-Lipton: dado poder computacional suficiente, você pode usá-lo para começar a adivinhar classes inteiras de programas e verificar se eles funcionam (a prova é exatamente "adivinhe um programa e verifique se funciona e, em seguida, use-o ", o que requer um pouco de poder computacional - mais que o NP - para ser executado.)

Não conheço a teoria sobre o quão complicada pode ser uma solução, mas talvez alguém com mais conhecimento possa responder.

O cenário mais concreto na realidade P = NP é que alguém realmente constrói um algoritmo para qualquer problema completo de NP, como SAT.

Acho que você fez uma boa pergunta e estou curioso para preencher as lacunas da minha resposta, sobre como o W pode ser analisado e tornado mais útil na semi-prática.

djechlin
fonte
Boa resposta! +1. Há uma diferença sutil entre essa pesquisa e Karp-Lipton: aqui, apenas precisamos verificar a solução que o programa fornece; no teorema Karp-Lipton, você tem que verificar se o programa está correto (para todos )x{0,1}
Lieuwe Vinkhuijzen
-1

Vou tentar uma resposta parcial para sua pergunta, mas acho que deve ser suficiente para sua busca.

Ser NP-completo recorre a ser NP E NP-DURO.

Ser NP-HARD significa que todos os problemas no NP podem ser traduzidos, através de uma transformação polinomial do tempo, nesse problema.

Sabe-se que o SSP é NP-HARD (e NP-COMPLETE).

Isso significa, por exemplo, que você pode procurar na Internet a transformação de Polinomial-Time específica que MOSTRA que o SSP é NP-HARD (em qualquer documento que o prove).

Essa transformação é um algoritmo "honesto", com garantia de execução em tempo polinomial e está escrita em algum artigo, em algum lugar. Vamos chamá-lo de 'SSP-T' (para transformação do SSP).

A única maneira de provar que P = NP é EXIBIR um algoritmo de tempo polinomial para um problema em NP.

Portanto, se você assumir que P = NP, estará assumindo que possui em suas próprias mãos um algoritmo de tempo polinomial "honesto" para resolver um problema de NP (qualquer um). Vamos chamar esse algoritmo: 'H'

Agora ... dado qualquer problema no NP, vamos chamá-lo de 'Meu-problema-NP' ...

A solução que você está procurando é:

  • Aplique o SSP-T para transformá-lo em uma instância do SSP,

  • Agora use o SSP-T novamente para transformar essa instância do SSP em uma instância do 'H' (o NP de um - qualquer um - problema que VOCÊ SABE resolver em P - com base no pressuposto de que P = NP-- ),

  • Execute H para encontrar uma solução.

  • Use o SSP-T para interpretar a solução no SSP

  • Use o SSP-T mais uma vez para interpretar a solução em 'My-NP-problem' (o problema arbitrário que você queria resolver no começo).

E lá vai você!

Essas 5 etapas seqüenciais são o algoritmo "honesto" que você estava procurando.

Cada etapa é executada em tempo polinomial e é garantida a existência pela própria definição de cada conceito.

Você poderia ter escolhido qualquer outro problema NP-HARD, em vez do SSP, porque a definição de NP-HARD é a que garante (por definição!) Que:

  • SSP-T existe,

  • é um algoritmo,

  • é bidirecional,

  • é válido e aplica-se a qualquer problema de NP; e

  • é executado em tempo polinomial

De fato, se você procurar a maneira mais comum de mostrar que qualquer problema é NP-HARD, é uma transformação no SAT-3, que foi um dos primeiros problemas a serem mostrados no NP-HARD (em algum momento nos anos 60/70).

Deixe-me saber de qualquer fraqueza que você possa encontrar no raciocínio / explicação que dei.

Martin Carames Abente
fonte
11
Não é verdade que a única maneira de provar que P = NP é exibindo um algoritmo polytime para algum problema no NP. É o suficiente para provar que esse algoritmo existe. Além disso, o OP está procurando um algoritmo concreto que possa ser descrito agora.
Yuval Filmus
Eu acho que você está certo, apenas mostrar a existência desse 'H' (alguma solução em tempo polinomial para algum problema específico de PN) mostraria que P = NP. No entanto
Martin Carames Abente
(continua no último comentário) No entanto, os 5 passos dados continuam sendo um algoritmo real / concreto, sendo uma de suas entradas 'H'. Assim como o SSP-T tem como entrada: a instância de um problema de NP (aquele a ser transformado em uma instância ou SSP - ou vice-versa--). "Execute H para encontrar uma solução" é uma etapa concreta quando você tem H como entrada. Por outro lado, YF, se OP está esperando uma solução concreta com base em um teorema da existência, você está certo. Mas não acho que ele esteja esperando isso. Seria semelhante a esperar uma solução concreta de P = NP na wikipedia.
Martin Carames Abente