Perché questa funzione è calcolabile in


10

Mio libro di testo dice: "Definiamo la funzione f:NN come segue: ed . Si noti che dato , abbiamo può facilmente trovare in tempo il numero tale che è inserita tra e ."f ( i + 1 ) = 2 f ( i ) 1.2 n O ( n 1.5 ) i n f ( i ) f ( i + 1 )f(1)=2f(i+1)=2f(i)1.2nO(n1.5)inf(i)f(i+1)

Come posso convincermi che possiamo infatti trovare facilmente in tempo? Dato che è definito in modo ricorsivo, penso che dobbiamo calcolare fino a . Per scoprire il tempo impiegato da questi calcoli, penso che dobbiamo trovare un limite superiore adatto per dipendente da e dobbiamo trovare un limite superiore sul tempo di esecuzione della funzione . Alla fine, possiamo sperare di mostrare la proposta citata. Sfortunatamente, non vedo né una cosa né l'altra.iO(n1.5)ff(1),f(2),f(3)f(j)f(j)ninx2x1.2

Ho dimenticato di menzionare: ti preghiamo di notare che siamo in un contesto non deterministico. Quindi si sostiene che sia calcolabile in da una macchina di Turing non deterministica.fO(n1.5)


Dato che alcune persone hanno già letto questa domanda, con alcuni di loro che l'hanno trovata utile e interessante, ma nessuno ha risposto finora, voglio fornire qualche informazione in più sul contesto: l'affermazione citata è parte integrante della prova di il teorema della gerarchia temporale non deterministica. La prova (con l'affermazione) può essere trovata ad esempio nel libro di Arora e Barak , ma ho trovato anche molte altre risorse sul Web che presentano la stessa prova. Ognuno di coloro che chiama la pretesa facile o banale e non spiega come trovare in O ( n 1,5 ) tempo. Quindi, o tutte queste risorse appena copiate da Arora e Barak o l'affermazione non è in realtà così difficile.iO(n1.5)


1
Sembra la dimostrazione del teorema della gerarchia temporale non deterministica in Arora e Barak, vero? In tal caso, suppongo che il non determinismo abbia un ruolo qui.
G. Bach,

Hai ragione. Scusatemi, avrei dovuto menzionare il contesto non deterministico. Potete per favore spiegare più in dettaglio in che modo il non determinismo ci aiuta a mostrare il limite O (n ^ 1.5)?
user1494080,

Risposte:


4

Indicato da la lunghezza di un numero x , ovvero log 2 x + 1 (per x > 0 ). Il calcolo di 2 x richiede il tempo O ( x ) nel modello RAM, quindi il calcolo di f ( i + 1 ) da f ( i ) richiede tempo O ( f ( i ) 1.2 ) = O ( | f|x|xlog2x+1x>02xO(x)f(i+1)f(i) . Poiché f ( i ) sta crescendo più rapidamente che geometricamente, il tempo complessivo per calcolare f ( i + 1 ) è O ( | f ( i + 1 ) | ) . Come hai sottolineato, devi farlo fino a f ( i + 1 ) n , il che significa che f ( i ) < n . Pertanto, il tempo di esecuzione totale èO(f(i)1.2)=O(|f(i+1)|)f(i)f(i+1)O(|f(i+1)|)f(i+1)nf(i)<n .O(|f(i+1)|)=O(f(i)1.2)=O(n1.2)

Nel modello della macchina di Turing con un singolo nastro, il calcolo di richiede il tempo O ( x log x ) , quindi il tempo di esecuzione totale è O ( n 1.2 log n ) = O ( n 1.5 ) . L'algoritmo per il calcolo di 2 x sostituisce [ x ] con 1 [ [ x ] ] (qui [ x ] è la rappresentazione binaria di x , e [ [2xO(xlogx)O(n1.2logn)=O(n1.5)2x[x]1[[x]][x]x è la rappresentazione binaria che utilizza cifre diverse 0 , 1 ), quindi esegue ripetutamente la trasformazione [ [ x ] ] 0 [ [ x - 1 ] ] , che richiede tempo O ( | x | ) = O ( registro x ) .[[x]]0,1[[x]]0[[x1]]O(|x|)=O(logx)


Perfetto grazie! Un'altra domanda: non dobbiamo sostenere che | f (i) | cresce più velocemente che geometricamente anziché che f (i) cresce più velocemente che geometricamente?
user1494080,

Dal , è la stessa cosa, ma hai ragione. Quello che vogliamo veramente è j i | f ( j ) | = O ( | f ( i ) | ) . |f(i+1)|=f(i)1.2ji|f(j)|=O(|f(i)|)
Yuval Filmus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.