¿Existe un ejemplo explícito conocido de un algoritmo con la propiedad tal que si este algoritmo no se ejecuta en tiempo polinomial y si se ejecuta en tiempo polinómico?
¿Existe un ejemplo explícito conocido de un algoritmo con la propiedad tal que si este algoritmo no se ejecuta en tiempo polinomial y si se ejecuta en tiempo polinómico?
Respuestas:
Si supones que es demostrable en PA (o ZFC), un ejemplo trivial es el siguiente:
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
Otro ejemplo, menos trivial, que no se basa en ningún supuesto es el siguiente:
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.
Si el algoritmo tarde o temprano, supongamos que en la entrada , encontrará el índice de la máquina de Turing de tiempo polinomial (o una versión acolchada) que resuelve SAT en y para todas las entradas mayores que continuarán simulándolo y se detendrán en el tiempo polinómico (tenga en cuenta que el paso 2 también se puede verificar en tiempo polinómico). En otras palabras si El algoritmo resuelve SAT en tiempo polinómico en todas las instancias, excepto en un número finito.
Si el algoritmo se ejecuta en tiempo exponencial.