Essa é uma idéia bastante difícil de entender, e eu apreciaria muito qualquer edição / ajuda para torná-la mais legível para aqueles que conhecem.
É teoricamente possível ter um disco rígido que tenha salvo uma cópia de cada permutação binária possível de um kilobyte e, em seguida, o restante do sistema simplesmente crie ponteiros para esses locais?
Um sistema criado dessa maneira seria mais rápido do que simplesmente ter informações armazenadas diretamente?
Para explicar outra maneira, diga em vez de ter frases:
"Olá, eu sou Bob." e "Esse sanduíche parece delicioso".
... armazenados no disco rígido, teríamos todas as permutações do alfabeto e de outros caracteres com um certo número (digamos, 1.000 caracteres ou mais) e, em seguida, armazenamos nossas frases como algo como:
[Ponteiro # 21381723]
fonte
Respostas:
Existem 2 8192 possíveis blocos 1K diferentes. Armazená-los todos levaria 2 8202 bits de armazenamento. Como o universo contém apenas cerca de 10 80 (ou ~ 2 266 ) partículas, é uma aposta segura que não é possível armazenar todas, e você não precisa se perguntar se isso pouparia tempo ou não.
Mas existe, de fato, uma maneira mais interessante de responder a isso. Você está sugerindo a criação de um índice em um enorme conjunto de constantes. Mas como você saberia qual índice desreferenciar? Imagine por causa de um argumento que você deseja armazenar apenas 1 caracteres blocos:
a
,b
,c
... Presumivelmente seus índices seria 0, 1, 2, etc., já que é o layout mais eficiente de armazenar esses blocos.Você percebe algo sobre o arranjo? Seu índice é, de fato, uma representação codificada dos dados armazenados ! Em outras palavras, você não precisa desreferenciar, basta transformar o índice nos dados que deseja.
Quando você armazena todos os valores possíveis de algo em uma tabela, isso sempre acontece: seu índice se torna apenas uma versão codificada dos próprios dados; portanto, o armazenamento dos dados se torna desnecessário em primeiro lugar. Isso porque no mundo real, os índices são úteis apenas para dados escassos (por exemplo, todas as páginas da web que você visitou, nem todas as páginas da web que poderia existir , ou mesmo tudo o que fazer existem).
fonte
Como outros já apontaram, você tem 2 ^ 8192 possibilidades para um bloco de 1k. Isso significa que você precisaria de 8192 bits para codificar o endereço de um bloco se todos os endereços de blocos forem codificados com a mesma quantidade de bits, para que seus endereços tenham 1k de comprimento. Você não teria ganho nada além de adicionar uma camada de indireção para não obter nenhum desempenho.
Se você quisesse ter endereços mais curtos, teria que codificar alguns blocos com um endereço curto e outros com endereços mais longos e torná-lo para que os longos não apareçam com tanta frequência, e agora você está simplesmente compactando dados (provavelmente com algo como um código Huffman ). Isso exigiria o conhecimento dos dados que você está armazenando antes de armazená-los ou alterações regulares na codificação. Provavelmente também seria menos eficiente do que outros algoritmos de compactação que usam blocos de comprimento variável.
fonte
Existem dois problemas com isso.
Primeiro, "todas as permutações binárias possíveis de um kilobyte" são uma enorme quantidade de dados. 1024 bytes * 8 bits por byte = 8192 bits em um kilobyte. Todas as permutações possíveis seriam 2 ^ 8192. Isso é em torno de
1.09e+2466
kilobytes! (Para fins de comparação, uma unidade de 1 TB é de1e09
kilobytes.)Segundo, mesmo se você tivesse uma tabela tão grande e indexasse nela com ponteiros, o que faria se quisesse referenciar alguns dados menores que exatamente 1 KB?
fonte
Como outros pôsteres apontaram, em algum momento, o tamanho do ponteiro necessário para indexar em sua lista todos os valores possíveis anula seu ganho.
No entanto, alguns idiomas usam uma versão limitada do que você sugere para otimizar o uso da memória. O Python usa a string 'interning' para diminuir o número de strings duplicadas na memória. Você pode encontrar mais informações pesquisando 'python string intern'.
fonte