Creo que ahora puedo demostrar un límite inferior no trivial. La idea es implementar cualquier programa de este tipo con una familia de programas de ramificación de comparación. La suposición de 'solo lectura' significa que nuestra familia de programas de ramificación usa poco espacio , es decir, . Luego aplicamos el límite inferior S T = Ω ( n 2 ) demostrado por Borodin et al. en "Una compensación espacio-tiempo para clasificar en máquinas no ajenas". Esto nos da un límite inferior n 2 / log n por el momento.O(logn)ST=Ω(n2)n2/logn
En un poco más de detalle: podemos prescindir de la operación 5 anterior. Hablando en términos generales, si ya podemos comparar los encabezados de dos listas e imprimir el encabezado de una lista, entonces no hay necesidad de aislar el encabezado de una lista en un registro particular. Asumiendo esto, vemos que cada registro en la máquina solo almacena una subcadena final de la entrada.
Supongamos que nuestro programa de registro tiene líneas de código y k registros, X 1 , ... , X k .ℓkX1,…,Xk
Fix . Construimos el programa de ramificación de comparación para cadenas de longitud n de la siguiente manera. Cree un nodo para cada tupla ( i , d 1 , ... , d k ) donde 1 ≤ i ≤ ℓ y 0 ≤ d 1 , ... , d k ≤ n . La idea es que los cálculos en la máquina de registro corresponden a rutas en el programa de ramificación, y estamos en el nodo ( i , d 1 , ... , dnn(i,d1,…,dk)1≤i≤ℓ0≤d1,…,dk≤n si estamos en la línea i en la máquina de registro y la longitud de la cadena almacenada en X i es d i . Ahora, tenemos que definir los bordes dirigidos del programa de ramificación(i,d1,…,dk)iXidi
Si la línea es de la formai
si entonces goto i 1 más goto i 2Xu<Xvi1i2
entonces, para todos los , el nodo ( i , d 1 , ... , d k ) se etiqueta comparando el elemento d u -th y d v -th de entrada, y haciendo que el borde "verdadero" vaya a ( i 1 , d 1 , ... , d k ) , y el borde "falso" a ( i 2 , d 1 , ... , d kd1,…,dk(i,d1,…,dk)dudv(i1,d1,…,dk) .(i2,d1,…,dk)
Si la línea es de la formai
, ir a la línea i ′X1←tail(X2)i′
entonces hay una flecha desde cualquier nodo a ( i ' , d 2 - 1 , ... , d k ) .(i,d1,…,dk)(i′,d2−1,…,dk)
Si la línea es de la formai
, ir a la línea i ′print(head(Xu))i′
entonces hay una flecha desde cualquier nodo a ( i ' , d 1 , ... , d k ) que está etiquetada por el nodo d u -ésimo de la entrada.(i,d1,…,dk)(i′,d1,…,dk)du
Esperemos que estos ejemplos aclaren cómo tengo la intención de construir mi programa de ramificación. Cuando todo está dicho y hecho, este programa de ramificación tiene a lo sumo nodos, por lo que dispone de espacio O ( log n )ℓ⋅nkO(logn)