Si solo consideramos los problemas en P, ¿hay grandes diferencias entre el algoritmo de palabra-RAM más rápido conocido y el algoritmo de máquina de Turing más rápido conocido para problemas particulares? Estoy particularmente interesado si existen grandes lagunas para los problemas naturales de interés general.
9
Respuestas:
Se sabe que cualquier problema que pueda calcular en una máquina RAM en el tiempo , puede hacerlo en una máquina Turing a tiempo como máximo T ( n ) 2 . Debe tener en cuenta que el tamaño total de la memoria utilizada no puede ser mayor que T ( n ) , ya que eso significaría que realizó más operaciones de escritura que T ( n ) , por lo que cada vez que obtiene algo de la memoria RAM, el Turing máquina tomaría en el peor de los casos T ( n )T( n ) T( n )2 T( n ) T( n ) T( n ) tiempo para encontrar el elemento deseado secuencialmente de la cinta. Además del acceso a la memoria, el resto de las operaciones deben tomar alrededor del mismo tiempo. Y así consigues el límite.
fuente
El siguiente ejemplo demuestra que un algoritmo que toma O ( n log ( n ) ) para resolver un problema en word-Ram podría necesitar O ( n 2 log ( n ) 3 ) en una máquina de Turing (TM) de 1 cinta que se ejecuta exactamente todos los cálculos indicados por A . Entiendo que la pregunta se relaciona con 1-tape TM, y solo uso esta en mi respuesta. Esta es una edición para abordar los comentarios de Emil Jeřábek.A O(nlog(n)) O(n2log(n)3) A
Encontraremos la siguiente conclusión más general . Para demostrar que la TM puede resolver en un problema resuelto en O ( T ( n ) ) por un algoritmo A en RAM, es no suficiente de ejecución A en el TM. Es posible que se necesite un algoritmo inteligente . Lo mismo se aplica si se quiere probar un O ( n log ( n ) )O(T(n)2) O(T(n)) A A O(nlog(n)) gastos generales. Probar la existencia de un algoritmo inteligente siempre que sea necesario parece lejos de ser inmediato, por decir lo menos. Esto no está en línea con otras respuestas que básicamente solo proponen simular / ejecutar en el TM todos los cálculos de RAM (del algoritmo ) para anunciar una complejidad TM como O ( T ( n ) 2 ) u O ( T ( n ) n log ( n ) ) .A O(T(n)2) O(T(n)nlog(n))
Problema: se nos da una matriz / tabla con n = 2 k enteros cada uno almacenado en bits de registro ( n ) . Se nos da una segunda matriz d con posiciones log ( n ) , cada una registrando un número de bits log ( n ) . Para cualquier t ∈ [ 0 .. log ( n ) - 1 ] , definimos X t = 1 si tab [ i ]tab n=2k log(n) d log(n) log(n) t∈[0..log(n)−1] Xt=1 tab[i] MOD MOD d [ t ] ∀ i ∈ [ 0 .. n / 2 - 1 ] . De lo contrario, X t = 0 . Salida ∑ log ( n ) - 1 t = 0 X t . Considero que la entrada se da como una cinta con n log ( n ) +d[t]=tab[n/2+i] d[t] ∀i∈[0..n/2−1] Xt=0 ∑log(n)−1t=0Xt dígitos binarios, para abordar los comentarios de Emil Jeřábek.nlog(n)+log(n)log(n)
Algoritmo en RAMA Una RAM con tamaño de palabra necesita O ( n log ( n ) + log ( n ) 2 ) = O ( n log ( n ) ) para leer los datos de entrada de la cadena binaria. Pero después de leer los datos, solo puede funcionar con palabras de tamaño log ( n ) . El algoritmo A calcula cualquier X t en O ( nw=log(n) O(nlog(n)+log(n)2) O(nlog(n)) log(n) A Xt pasando por todo i ∈ [ 0 .. n / 2 - 1 ] y probando la condición. El bucle principal de A esFOR t = 0 , 1 , 2 , ... log ( n ) - 1 : calcular X t . La complejidad total es O ( n log ( n ) ) (lectura de datos) + O ( n log ( n ) )O(n) i∈[0..n/2−1] A t=0,1,2,…log(n)−1 Xt O(nlog(n)) O(nlog(n)) (haciendo los cálculos), por lo que puede hacerlo todo en O ( n log ( n ) ) en RAM.A O(nlog(n))
Además, hay algunos algoritmos de TM de prueba de igualdad y todos requieren tiempo cuadrático porque necesitan algo de zigzag, consulte, por ejemplo, el Ejemplo 2 de Turing Machine en course.cs.washington.edu/courses/cse431/14sp/scribes/ lec3.pdf
fuente