Para cada función computable

19

Para cada función computable f existe un problema que puede resolverse en el mejor de los casos en el tiempo Θ(f(n)) o existe una función computable f tal manera que cada problema que pueda resolverse en O(f(n)) también ser resuelto en o(f(n)) tiempo?

Esta pregunta me vino a la cabeza ayer. Lo he estado pensando un poco ahora, pero no puedo entenderlo. Realmente no sé cómo buscaría esto en Google, así que pregunto aquí. Esto es lo que se me ocurrió:

Mi primer pensamiento fue que la respuesta es sí: para cada función computable f el problema "Salida f(n) puntos" (o crear una cadena con f(n) puntos o lo que sea) obviamente no se puede resolver en o(f(n)) tiempo. Por lo tanto, solo tenemos que demostrar que se puede resolver en el tiempo O(f(n)) . No hay problema, solo tome el siguiente pseudocódigo:

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

Claramente ese algoritmo resuelve el problema declarado. Y su tiempo de ejecución obviamente está en Θ(f(n)) , por lo que el problema está resuelto. Eso fue fácil, ¿verdad? Excepto no, no es porque tenga que considerar el costo de la primera línea. El tiempo de ejecución del algoritmo anterior solo está en Θ(f(n)) si el tiempo necesario para calcular f(n) está en O(f(n)) . Claramente, eso no es cierto para todas las funciones 1 .

Entonces este enfoque no me llevó a ninguna parte. Le agradecería a cualquiera que me señale en la dirección correcta para resolver esto correctamente.


1 Considere, por ejemplo, la función p(n)={1if n is prime2otherwise . Claramente O(p(n))=O(1) , pero no existe un algoritmo que calcule p en el tiempo O(1) .

sepp2k
fuente
1
No creo que sus dos declaraciones en sus primeros párrafos sean necesariamente los contrarios del otro: ¿qué pasa si tiene una tal que existe algún problema que se puede resolver en O ( f ( n ) ) , no en o ( f ( n ) ) , ni en Θ ( f ( n ) ) tiempo? fO(f(n))o(f(n))Θ(f(n))
Alex ten Brink
@ Alex Ese es un buen punto, no lo consideré.
sepp2k

Respuestas:

13

Según el teorema de Gap (usando la formulación de aquí , busque 'gap'), para cualquier función ilimitada computable , existe alguna función computable creciente (de hecho, arbitrariamente grande) f : NN tal que D T I M E ( f ( n ) ) = D T I M E ( g ( f ( n ) ) .g:NNf:NNDTIME(f(n))=DTIME(g(f(n))

Esto responde a su pregunta en el sentido de que existe tal (infinitamente, de hecho): para cada función computable g tal que g = o ( n ) , existe una función creciente f tal que todos los problemas se pueden resolver en O ( f ( n ) ) el tiempo también se puede resolver en O ( g ( f ( n ) ) = o ( f ( n ) ) tiempo. Tenga en cuenta que ffgg=o(n)fO(f(n))O(g(f(n))=o(f(n))f no es necesariamente construible en el tiempo; para el caso construible en el tiempo, vea la respuesta de @RanG.

En la formulación de Wikipedia (que requiere que ), entonces g f se convierta en su ejemplo, y f necesita ser ω ( n ) (para que vaya al revés - 'problemas solucionables en O ( g ( f ( n ) ) también se pueden resolver en O ( g ( n ) ) 'es la parte interesante).g(x)xgffω(n)O(g(f(n))O(g(n))

El artículo de Wikipedia no señala que está aumentando y, de hecho, puede ser arbitrariamente grande ( por ejemplo, f ( n ) g ( n ) ). El artículo que demuestra el teorema brecha hace mención y probar esto (ver aquí , por ejemplo).ff(n)g(n)

Alex ten Brink
fuente
¿Puede ser o ( n ) ? ¿No se requiere que g ( x ) x ? Su afirmación sigue siendo correcta, pero la prueba es a la inversa, ¿verdad? go(n)g(x)x
Ran G.
@Sonó. Actualizado para dar una prueba de ambas formulaciones (utilicé la formulación en el documento) :)
Alex ten Brink
"para cada función computable g tal que g = o (n), existe alguna función f tal que todos los problemas que se pueden resolver en el tiempo O (f (n)) también se pueden resolver en O (g (f (n)) = o ( f (n)) tiempo "¿Qué pasa si todas las fs que existen para esa g están en O (1)? Entonces O (g (f (n)) sigue siendo O (1) y por lo tanto no o (1).
sepp2k
@ sepp2k: buena captura, este es realmente un problema tal como está formulado. He actualizado mi respuesta.
Alex ten Brink
12

Para cada función computable f existe un problema que puede resolverse en el mejor de los casos en el tiempo Θ ( f ( n ) ) o existe una función computable f de tal manera que cada problema que pueda resolverse en O ( f ( n ) ) también ser resuelto en o ( f ( n ) )fΘ(f(n))fO(f(n))o(f(n))

fO(f(n))o(f(n)log(f(n)))

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

Esto solo considera problemas de decisión y no considera el tiempo que lleva generar el resultado.

Sonó.
fuente
¿Estoy en lo cierto al suponer que si consideramos funciones no construibles en el tiempo, la respuesta a mi pregunta es "no"? O relacionado: si una función no es construible en el tiempo y, por lo tanto, no hay una máquina de Turing que se detenga después de los pasos de , ¿eso significa que tampoco hay una máquina de Turing que se detenga después de los pasos de ? Porque de eso se seguiría trivialmente que la respuesta a mi pregunta es no. f ( n ) Θ ( f ( n ) )ff(n)Θ(f(n))
sepp2k
Depende. Suponga que no es construible en el tiempo, pero puede estar limitado por alguna otra función que sea construible en el tiempo. y todavía existen problemas que pueden resolverse con el tiempo pero no mucho menos que eso. g f = Θ ( g ) O ( f )fgf=Θ(g)O(f)
Ran G.
y utilizando múltiples TM de cinta, puede mejorar el resultado de a . o(f(n))o(f(n)lgf(n))o(f(n))
Kaveh
3

Trataré de proporcionar una especie de marco con la esperanza de que otorgue una visión más profunda.

Cuando llegas a algo tan fundamental, hay escollos inesperados en todas partes. Por ejemplo: ¿qué es "resolver" un problema? A menudo, en informática consideramos solo la variante de "decisión", en la cual se nos da una entrada y solo necesitamos dar salida Verdadero o Falso. Te estás enfocando en el problema de la "función".

Si considera que la notación O (f (n)) trata de capturar cuánto "trabajo" se necesita para resolver un problema, usar la decisión en lugar de la función (donde se requiere la salida) parece mejor porque separa limpiamente el cálculo del formato de salida .

No creo que esto responda a su pregunta, pero puede estar interesado en esto: http://en.wikipedia.org/wiki/Time_hierarchy_theorem

Además, tenga cuidado con el teorema de aceleración .

agorenst
fuente