Existe um exemplo explícito conhecido de um algoritmo com a propriedade tal que, se , esse algoritmo não é executado no tempo polinomial e se , ele é executado no tempo polinomial?
Existe um exemplo explícito conhecido de um algoritmo com a propriedade tal que, se , esse algoritmo não é executado no tempo polinomial e se , ele é executado no tempo polinomial?
Respostas:
Se você assumir que é comprovável no PA (ou ZFC), um exemplo trivial é o seguinte:
Input: N (integer in binary format)
For I = 1 to N do
begin
if I is a valid encoding of a proof of P = NP in PA (or ZFC)
then halt and accept
End
Reject
Outro exemplo - menos trivial - que não se baseia em nenhuma suposição é o seguinte:
Input: x (boolean formula)
Find the minimum i such that
1) |M_i| < log(log(|x|)) [ M_1,M_2,... is a standard fixed TM enumeration]
2) and M_i solves SAT correctly
on all formulas |y| < log(log(|x|))
halting in no more than |y|^|M_i| steps
[ checkable in polynomial time w.r.t. |x| ]
if such i exists simulate M_i on input x
until it stops and accept/reject according to its output
or until it reaches 2^|x| steps and in this case reject;
if such i doesn't exist loop for 2^|x| steps and reject.
Se o algoritmo irá, mais cedo ou mais tarde - suponha na entrada - encontrar o índice da máquina de Turing polinomial no tempo (ou uma versão acolchoada) que resolve SAT em e para todas as entradas maiores que continuarão simulando e parando no tempo polinomial (observe que a etapa 2 também pode ser verificada no tempo polinomial). Em outras palavras, se o algoritmo resolve SAT em tempo polinomial em todos, exceto em um número finito de instâncias.
Se o algoritmo é executado em tempo exponencial.