¿Por qué es esta función computable en tiempo


10

Mi libro de texto dice: "Definimos la función de la siguiente forma: f ( 1 ) = 2 y f ( i + 1 ) = 2 f ( i ) 1.2 . Tenga en cuenta que dado n , podemos encontrar fácilmente en O ( n 1.5 ) tiempo, el número i de tal manera que n se intercala entre f ( i ) y f ( i + 1f:NNf(1)=2f(i+1)=2f(i)1.2nO(n1.5)inf(i) ".f(i+1)

¿Cómo puedo convencerme de que podemos encontrar fácilmente en el tiempo O ( n 1.5 ) ? Como f se define de forma recursiva, creo que tenemos que calcular f ( 1 ) , f ( 2 ) , f ( 3 ) ... f ( j ) hasta f ( j ) n . Para saber el tiempo que tardan estos cálculos, creo que tenemos que encontrar un límite superior adecuado para i dependiente de niO(n1.5)ff(1),f(2),f(3)f(j)f(j)niny tenemos que encontrar un límite superior en el tiempo de ejecución de la función . Al final, esperamos poder mostrar la propuesta citada. Lamentablemente, no veo ni una cosa ni la otra.x2x1.2

Olvidé mencionar: Tenga en cuenta que estamos en un contexto no determinista. Entonces se afirma que es computable en O ( n 1.5 ) por una máquina de Turing no determinista.fO(n1.5)


Como algunas personas ya han leído esta pregunta, y algunas de ellas la encuentran útil e interesante también, pero nadie respondió hasta ahora, quiero proporcionar más información sobre el contexto: la afirmación citada es una parte integral de la prueba de El teorema de la jerarquía temporal no determinista. La prueba (con la afirmación) se puede encontrar, por ejemplo, en el libro de Arora y Barak , pero también he encontrado algunos otros recursos en la Web que presentan la misma prueba. Cada una de esas llamadas es fácil o trivial y no explica cómo encontrar en O ( n 1.5 ) . Entonces, o todos estos recursos que acabo de copiar de Arora y Barak o el reclamo no es tan difícil.iO(n1.5)


1
Esto se parece a la prueba del teorema de la jerarquía del tiempo no determinista en Arora y Barak, ¿verdad? Si es así, supongo que el no determinismo juega un papel aquí.
G. Bach

Tienes razón. Lo siento, debería haber mencionado el contexto no determinista. ¿Puede explicar con más detalle cómo el no determinismo nos ayuda a mostrar el límite O (n ^ 1.5)?
user1494080

Respuestas:


4

Denote por la longitud de un número x , es decir, log 2 x + 1 (para x > 0 ). Calcular 2 x requiere el tiempo O ( x ) en el modelo RAM, por lo que calcular f ( i + 1 ) a partir de f ( i ) lleva tiempo O ( f ( i ) 1.2 ) = O ( | f|x|xlog2x+1x>02xO(x)f(i+1)f(i) . Como f ( i ) está creciendo más rápido que geométricamente, el tiempo general para calcular f ( i + 1 ) es O ( | f ( i + 1 ) | ) . Como señala, debe hacerlo hasta f ( i + 1 ) n , lo que significa que f ( i ) < n . Por lo tanto, el tiempo total de ejecución esO(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)

En el modelo de máquina de Turing con una sola cinta, calcular lleva tiempo O ( x log x ) , por lo que el tiempo total de ejecución es O ( n 1.2 log n ) = O ( n 1.5 ) . El algoritmo para calcular 2 x reemplaza [ x ] por 1 [ [ x ] ] (aquí [ x ] es la representación binaria de x , y [ [2xO(xlogx)O(n1.2logn)=O(n1.5)2x[x]1[[x]][x]x es la representación binaria que usa diferentes dígitos 0 ' , 1 ' ), y luego ejecuta repetidamente la transformación [ [ x ] ] 0 [ [ x - 1 ] ] , que lleva tiempo O ( | x | ) = O ( log x ) .[[x]]0,1[[x]]0[[x1]]O(|x|)=O(logx)


¡Perfecto gracias! Una pregunta más: ¿No tenemos que argumentar que | f (i) | crece más rápido que geométricamente en lugar de que f (i) crece más rápido que geométricamente?
user1494080

Desde , es lo mismo, pero tienes razón. Lo que realmente queremos es j i | f ( j ) | = O ( | f ( i ) | ) . |f(i+1)|=f(i)1.2ji|f(j)|=O(|f(i)|)
Yuval Filmus
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.