Per ogni funzione calcolabile


19

Per ogni funzione calcolabile esiste un problema che può essere risolto al meglio in tempo di oppure esiste una funzione calcolabile tale che ogni problema che può essere risolto in può anche essere risolto in tempo?Θ ( f ( n ) ) f O ( f ( n ) ) o ( f ( n ) )fΘ(f(n))fO(f(n))o(f(n))

Questa domanda mi è venuta in mente ieri. Ci sto pensando da un po 'adesso, ma non riesco a capirlo. Non so davvero come farei Google per questo, quindi chiedo qui. Ecco cosa mi è venuto in mente:

Il mio primo pensiero è stato che la risposta è sì: per ogni funzione calcolabile il problema "Output punti" (o creare una stringa con punti o altro) non può ovviamente essere risolto in tempo. Quindi dobbiamo solo dimostrare che può essere risolto in tempo. Nessun problema, basta prendere il seguente pseudo codice:f ( n ) f ( n ) o ( f ( n ) ) O ( f ( n ) )ff(n)f(n)o(f(n))O(f(n))

x = f(n)
for i from 1 to x:
    output(".")

Chiaramente quell'algoritmo risolve il problema dichiarato. Ed il suo runtime è ovviamente in , quindi il problema è stato risolto. È stato facile, vero? Tranne il no, non è perché devi considerare il costo della prima riga. Il runtime dell'algoritmo sopra riportato è solo in se il tempo necessario per calcolare è in . Chiaramente questo non è vero per tutte le funzioni 1 .Θ (Θ(f(n))Θ(f(n))f(n)O(f(n))

Quindi questo approccio non mi ha portato da nessuna parte. Sarei grato a chiunque mi indicasse la giusta direzione per capirlo correttamente.


1 Consideriamo ad esempio la funzione . Chiaramente , ma non esiste un algoritmo che calcola nel tempo .p(n)={1if n is prime2otherwiseO(p(n))=O(1)pO(1)


1
Non penso che le tue due affermazioni nei tuoi primi paragrafi siano necessariamente contrapposte l'una all'altra: cosa succede se hai una tale che esiste qualche problema che può essere risolto in O ( f ( n ) ) , non in o ( f ( n ) ) , né in Θ ( f ( n ) ) tempo? fO(f(n))o(f(n))Θ(f(n))
Alex ten Brink

@Alex Questo è un buon punto che non ho considerato.
sepp2k,

Risposte:


13

Dal teorema di Gap (usando la formulazione da qui , cerca 'gap'), per qualsiasi funzione calcolabile illimitata , esiste una funzione calcolabile crescente (in effetti, arbitrariamente grande) f : NN tale che D T I M E ( f ( n ) ) = D T I M E ( g ( f ( n ) ) .g:NNf:NNDTIME(f(n))=DTIME(g(f(n))

Questo risponde alla tua domanda in quanto esiste una tale (infinitamente molte, in effetti): per ogni funzione calcolabile g tale che g = o ( n ) , esiste una funzione crescente f tale che tutti i problemi risolvibili in O ( f ( n ) ) il tempo è anche risolvibile in O ( g ( f ( n ) ) = o ( f ( n ) ) tempo. Si noti che ffgg=o(n)fO(f(n))O(g(f(n))=o(f(n))f non è necessariamente costruibile nel tempo - per il caso costruibile nel tempo, vedi la risposta di @RanG.

Nella formulazione di Wikipedia (che richiede che ), allora g f diventa il tuo esempio, e f deve essere ω ( n ) (quindi fai il contrario - 'problemi risolvibili in O ( g ( f ( n ) ) sono anche risolvibili in O ( g ( n ) ) 'è la parte interessante).g(x)xgffω(n)O(g(f(n))O(g(n))

L'articolo di Wikipedia non fa notare che sta aumentando e in effetti può essere arbitrariamente grande ( f ( n ) g ( n ) per esempio). L'articolo che dimostra il teorema gap fa menzione e dimostrare questo (vedi qui , per esempio).ff(n)g(n)


può essere o ( n ) ? Non è richiesto che g ( x ) x ? La tua affermazione è ancora corretta, ma la prova va dall'altra parte, giusto? go(n)g(x)x
Ran G.

@Suonò. Aggiornato per dare una prova per entrambe le formulazioni (ho usato la formulazione nel documento) :)
Alex ten Brink

"per ogni funzione calcolabile g tale che g = o (n), esiste una funzione f tale che tutti i problemi risolvibili nel tempo O (f (n)) sono risolvibili anche in O (g (f (n)) = o ( f (n)) time "Che cosa succede se tutte le fs che esistono per quella g sono in O (1)? Quindi O (g (f (n)) è ancora O (1) e quindi non o (1).
sepp2k

@ sepp2k: buona cattura, questo è davvero un problema come formulato. Ho aggiornato la mia risposta.
Alex ten Brink,

12

Per ogni funzione calcolabile esiste un problema che può essere risolto al meglio in Θ ( f ( n ) ) tempo o esiste una funzione calcolabile f tale che ogni problema che può essere risolto in O ( f ( n ) ) può anche essere risolto in o ( f ( n ) ) tempo?fΘ(f(n))fO(f(n))o(f(n))

Se è una funzione costruibile nel tempo , allora il Teorema della Gerarchia del Tempo dice che ci sono problemi che richiedono il tempo O ( f ( n ) ) e non possono essere risolti con il tempo o ( f ( n )fO(f(n)). In particolare, DTIME(o(f(n)o(f(n)log(f(n)))

DTIME(o(f(n)log(f(n))))DTIME(f(n))

Ciò considera solo i problemi di decisione e non riguarda il tempo necessario per generare l'output.


Ho ragione nel supporre che se consideriamo le funzioni non costruibili nel tempo, la risposta alla mia domanda è "no"? O in relazione: se una funzione non è costruibile nel tempo e quindi non esiste una macchina di Turing che si ferma dopo f ( n ) passi, significa che non c'è nemmeno una macchina di Turing che si ferma dopo steps ( f ( n ) ) passi? Perché da ciò ne consegue banalmente che la risposta alla mia domanda è no. ff(n)Θ(f(n))
sepp2k,

Dipende. Supponiamo che non sia costruibile nel tempo ma possa essere limitato da un'altra funzione g che è costruibile nel tempo. f = Θ ( g ) e esistono ancora problemi che possono essere risolti con il tempo O ( f ) ma non troppo di meno. fgf=Θ(g)O(f)
Ran G.

e utilizzando più TM nastro, è possibile migliorare il risultato da ao(f(n)). o(f(n)lgf(n))o(f(n))
Kaveh,

3

Proverò a fornire una sorta di quadro nella speranza che offra una visione più profonda.

Quando si arriva a qualcosa di così fondamentale, ci sono insidie ​​inaspettate ovunque. Ad esempio: che cos'è "risolvere" un problema? Spesso nell'informatica consideriamo solo la variante "decisione", in cui ci viene fornito un input e dobbiamo solo produrre True o False. Ti stai concentrando sul problema della "funzione".

Se consideri la notazione O (f (n)) come un tentativo di catturare quanto "lavoro" è necessario per risolvere un problema, usare la decisione invece della funzione (dove è richiesto l'output) sembra migliore perché separi in modo pulito il calcolo dalla formattazione dell'output .

Non credo che questo risponderà alla tua domanda, ma potresti essere interessato a questo: http://en.wikipedia.org/wiki/Time_hierarchy_theorem

Inoltre, fai attenzione al teorema della velocità .

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.