Esiste un esempio esplicito e noto di un algoritmo con la proprietà tale che se questo algoritmo non viene eseguito in tempo polinomiale e se viene eseguito in tempo polinomiale?
Esiste un esempio esplicito e noto di un algoritmo con la proprietà tale che se questo algoritmo non viene eseguito in tempo polinomiale e se viene eseguito in tempo polinomiale?
Risposte:
Se supponi che sia dimostrabile in PA (o ZFC), un esempio banale è il seguente:
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
Un altro esempio - meno banale - che non si basa su alcun presupposto è il seguente:
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 l'algoritmo presto o tardi - supponiamo sull'ingresso - troverà l'indice della macchina del Turing del tempo polinomiale (o una sua versione imbottita) che risolve SAT in e per tutti gli input maggiori di continuerà a simularlo e si fermerà in tempo polinomiale (si noti che il passaggio 2 può anche essere verificato in tempo polinomiale). In altre parole se l'algoritmo risolve SAT in tempo polinomiale su tutti tranne un numero finito di istanze.
Se l'algoritmo viene eseguito in tempo esponenziale.