Aquí hay un problema bien conocido.
Dada una matriz de enteros positivos, genera el entero positivo más pequeño que no esté en la matriz.
El problema se puede resolver en el espacio y el tiempo : lea la matriz, realice un seguimiento en el espacio O ( n ) si 1 , 2 , … , n +produjo 1 , busque el elemento más pequeño.
Me di cuenta de que puedes cambiar el espacio por tiempo. Si tienes solo memoria, puede hacerlo enrondasky obtener tiempoO(kn). En un caso especial, obviamente hay un algoritmo de tiempo cuadrático de espacio constante.
Mi pregunta es:
¿Es esta la compensación óptima, es decir, el ? En general, ¿cómo se prueba ese tipo de límites?
Suponga el modelo RAM, con aritmética limitada y acceso aleatorio a las matrices en O (1).
Inspiración para este problema: compensación espacio-tiempo para palíndromos en el modelo de una cinta (ver, por ejemplo, aquí ).
Respuestas:
Esto se puede hacer enO(nlogn) operaciones de palabras y O(1) palabras de memoria (respectivamente O(nlog2n) time y O(logn) memoria en el modelo RAM a nivel de bit). De hecho, la solución se basará en la siguiente observación.
Dicen que hayn0 pares e n1 números impares en el rango [1,n+1] (de modo n0≈n1 y n0+n1=n+1 ). Entonces hay b∈{0,1} tal que hay a lo sumo nb−1 valores con paridad b en la entrada. De hecho, de lo contrario hay al menos n0 pares y al menos n1 valores impares en la entrada, lo que significa que hay al menos n0+n1=n+1 valores en la entrada, contradicción (solo hay n de ellos). Significa que podemos continuar buscando el número faltante solo entre los números pares o impares. El mismo algoritmo se puede aplicar a bits más altos de notación binaria también.
Entonces nuestro algoritmo se verá así:
Supongamos que ya sabemos que solo hay valores dex en la entrada con el resto del módulo 2b igual a r∈[0,2b) pero hay al menos x+1 números en el rango [1,n+1] que tienen resto r módulo 2b (al principio sabemos que seguro para b=0,r=0 ).
Digamos que hay valoresx0 en la entrada con el resto r módulo 2b+1 y valores x1 en la entrada con el resto r+2b módulo 2b+1 (podemos encontrar estos números en un solo paso a través de la entrada). Claramente, x0+x1=x . Además, debido a que hay al menos x+1 números en la entrada con el resto r módulo 2b , al menos uno de los pares(r,b+1),(r+2b,b+1) satisfies the requirements of the step 1 .
We have found the missing number when2b⩾n+1 : there is only one number in range [1,n+1] that may have remainder r modulo 2b (r itself if it is in range), so there are at most zero values in the input that have such remainder. So r is indeed missing.
Claramente, el algoritmo se detiene en pasosO(logn) , cada uno de ellos necesita tiempo O(n) (paso único sobre la matriz de entrada). Además, solo se requieren O(1) palabras de memoria.
fuente
If I understand your definitions, this can be done in linear time with constant space. This is obviously the lowest bound, because we need to at least read the entire input.
The answer given in this question satisfies.
It's impossible to run this with less time or space, and adding extra time or space is useless, so there's no space-time tradeoff here. (Observe thatn=O(n/k) , so the tradeoff you observed doesn't hold asymptotically, in any case.)
In terms of your general question, I don't know of any nice theorems offhand which will help you prove space-time tradeoffs. This question seems to indicate that there isn't a (known) easy answer. Basically:
es desconocido, y una respuesta sólida resolvería muchos problemas abiertos (especialmente sobre SC), lo que implica que no existe una solución fácil.
Observe that our algorithm needs to be able to differentiate between at leastn possible answers. Suppose at each pass through the data we can get at most k pieces of data. Then we will need n/k passes to differentiate all answers. Assuming k=n/s then we run in nn/sn=sn time. So I think this proves what you want.
The difficulty is in showing that each time through we get onlyk bits. If you assume that our only legal operation is =, then we're good. However, if you allow more complex operations, then you'll be able to get more information.
fuente