Para las personas como yo que estudian algoritmos para ganarse la vida, el modelo estándar de computación del siglo XXI es la RAM entera . El modelo está destinado a reflejar el comportamiento de las computadoras reales con mayor precisión que el modelo de máquina de Turing. Las computadoras del mundo real procesan enteros de múltiples bits en tiempo constante utilizando hardware paralelo; no enteros arbitrarios , pero (debido a que el tamaño de las palabras crece constantemente con el tiempo) tampoco son enteros de tamaño fijo .
El modelo depende de un único parámetro , llamado tamaño de palabra . Cada dirección de memoria contiene un único número entero de bit, o palabra . En este modelo, el tamaño de entrada es el número de palabras en la entrada, y el tiempo de ejecución de un algoritmo es el número de operaciones en palabras . Las operaciones aritméticas estándar (suma, resta, multiplicación, división de enteros, resto, comparación) y operaciones booleanas (bit a bit y, o, xor, shift, rotate) en palabras requieren tiempo por definición .w n O ( 1 )wwnO(1)
Formalmente, el tamaño de palabra NO es una constantew para fines de análisis de algoritmos en este modelo. Para que el modelo sea coherente con la intuición, necesitamos , ya que de lo contrario ni siquiera podemos almacenar el entero en una sola palabra. Sin embargo, para la mayoría de los algoritmos no numéricos, el tiempo de ejecución es realmente independiente de , porque esos algoritmos no se preocupan por la representación binaria subyacente de su entrada. Mergesort y heapsort se ejecutan en tiempo ; la mediana de 3 clasificaciones rápidas se ejecuta en tiempo en el peor de los casos. Una excepción notable es la ordenación de radix binaria, que se ejecuta en tiempo .w≥log2nnwO(nlogn)O(n2)O(nw)
Establecer nos da el modelo tradicional de RAM de costo logarítmico. Pero algunos algoritmos de RAM entera están diseñados para tamaños de palabras más grandes, como el algoritmo de clasificación de enteros de tiempo lineal de Andersson et al. , que requiere .w=Θ(logn)w=Ω(log2+εn)
Para muchos algoritmos que surgen en la práctica, el tamaño de palabra simplemente no es un problema, y podemos (y lo hacemos) recurrir al modelo de RAM de costo uniforme mucho más simple. La única dificultad seria proviene de la multiplicación anidada, que puede ser usado para construir muy grandes números enteros muy rápidamente. Si pudiéramos realizar operaciones aritméticas en enteros arbitrarios en tiempo constante, podríamos resolver cualquier problema en PSPACE en tiempo polinómico .w
Actualización: también debo mencionar que hay excepciones al "modelo estándar", como el algoritmo de multiplicación de enteros de Fürer , que utiliza máquinas de Turing multitapa (o equivalente, el "bit RAM"), y la mayoría de los algoritmos geométricos, que se analizan teóricamente modelo limpio pero idealizado de "RAM real" .
Sí, esta es una lata de gusanos.