Esta es una idea bastante difícil de entender y agradecería mucho cualquier edición / ayuda para que sea más legible para aquellos que están al tanto.
¿Es teóricamente posible tener un disco duro que haya guardado una copia de cada permutación binaria posible de un kilobyte y luego hacer que el resto del sistema simplemente cree punteros a estas ubicaciones?
¿Sería un sistema hecho de esa manera más rápido que simplemente tener información almacenada directamente?
Para explicar otra forma, diga en lugar de tener oraciones:
"Hola, soy Bob". y "Ese sándwich se ve delicioso".
... almacenado en el disco duro, tendríamos todas las permutaciones del alfabeto y otros caracteres hasta cierto número (digamos, 1000 caracteres más o menos), y luego almacenar nuestras oraciones como algo así como:
[Puntero # 21381723]
fuente
Respuestas:
Hay 2 8192 posibles bloques de 1K diferentes. Almacenarlos a todos tomaría 2 8202 bits de almacenamiento. Dado que el universo contiene solo alrededor de 10 80 (o ~ 2 266 ) partículas, es una apuesta segura que no es posible almacenarlas todas, y no tiene que preguntarse si ahorraría tiempo o no.
Pero hay, de hecho, una forma más interesante de responder a esto. Usted sugiere crear un índice en un gran grupo de constantes. Pero, ¿cómo saber qué índice desreferenciar? Imagine por el bien de un argumento que desea almacenar solamente de 1 carácter bloques:
a
,b
,c
... Es de suponer que sus índices serían 0, 1, 2, etc., ya que es la disposición más eficiente de almacenar los bloques.¿Notas algo sobre el arreglo? ¡Su índice es, de hecho, una representación codificada de los datos almacenados ! En otras palabras, no tiene que desreferenciar en absoluto, solo tiene que transformar el índice en los datos que desea.
Cuando almacena todos los valores posibles de algo en una tabla, esto siempre sucede: su índice se convierte simplemente en una versión codificada de los datos en sí, por lo que el almacenamiento de datos se vuelve innecesario en primer lugar. Es por esto que en el mundo real, los índices sólo son útiles para datos dispersos (por ejemplo, todas las páginas web que ha visitado, no todas las páginas web que pudieran existir , o incluso todo lo que hacen existir).
fuente
Como otros ya han señalado, tiene 2 ^ 8192 posibilidades para un bloque de 1k. Esto significa que necesitaría 8192 bits para codificar la dirección de un bloque si todas las direcciones de los bloques están codificadas con la misma cantidad de bits, por lo que sus direcciones tendrían una longitud de 1k. No habría ganado nada excepto agregar una capa de indirección para no obtener ningún rendimiento.
Si quisieras tener direcciones más cortas, tendrías que codificar algunos bloques con una dirección corta y algunos con direcciones más largas y hacer que las largas no aparezcan tan a menudo, y ahora simplemente estás comprimiendo datos (probablemente con algo como un código Huffman ). Eso requeriría conocer los datos que está almacenando antes de almacenarlos o cambios regulares en la codificación. Probablemente también sería menos eficiente que otros algoritmos de compresión que usan bloques de longitud variable.
fuente
Hay dos problemas con eso.
Primero, "todas las permutaciones binarias posibles de un kilobyte" son una gran cantidad de datos. 1024 bytes * 8 bits por byte = 8192 bits en un kilobyte. Todas las permutaciones posibles serían 2 ^ 8192. ¡Eso es alrededor de
1.09e+2466
kilobytes! (Para fines de comparación, una unidad de 1 TB es1e09
kilobytes).En segundo lugar, incluso si tuviera una tabla tan enorme y la indexara con punteros, ¿qué haría si quisiera hacer referencia a algunos datos más pequeños que exactamente 1 KB?
fuente
Como otros carteles han señalado, en algún momento, el tamaño del puntero necesario para indexar en su lista de todos los valores posibles anula su ganancia.
Sin embargo, algunos idiomas usan una versión limitada de lo que sugiere para optimizar el uso de la memoria. Python usa la cadena 'interning' para disminuir el número de cadenas duplicadas en la memoria. Puede encontrar más información buscando 'python string intern'.
fuente