Ini adalah ide yang cukup sulit untuk membungkus kepala saya dan saya akan sangat menghargai suntingan / bantuan untuk membuatnya lebih mudah dibaca bagi mereka yang tahu.
Apakah secara teoritis mungkin untuk memiliki hard drive yang telah disimpan di dalamnya satu salinan dari setiap kemungkinan permutasi biner satu kilobyte dan kemudian memiliki sisa sistem hanya membuat pointer ke lokasi ini?
Apakah sistem yang dibuat sedemikian rupa bisa lebih cepat daripada sekadar menyimpan informasi secara langsung?
Untuk menjelaskan cara lain, katakanlah alih-alih memiliki kalimat:
"Halo, saya Bob." dan "Sandwich itu terlihat lezat."
... disimpan di hard drive, kami akan memiliki semua permutasi alfabet dan karakter lainnya hingga beberapa nomor (katakanlah, 1000 karakter atau lebih), dan kemudian simpan kalimat-kalimat kami seperti:
[Pointer # 21381723]
sumber
Jawaban:
Ada 2 8192 kemungkinan blok 1K berbeda. Menyimpan mereka semua akan membutuhkan 2 8202 bit penyimpanan. Karena alam semesta hanya mengandung sekitar 10 80 (atau ~ 266 ) partikel, itu adalah taruhan yang aman bahwa tidak mungkin untuk menyimpan semuanya, dan Anda tidak perlu bertanya-tanya apakah itu akan menghemat waktu atau tidak.
Namun, sebenarnya ada cara yang lebih menarik untuk menjawab ini. Anda menyarankan untuk membuat indeks ke dalam kumpulan konstanta yang sangat besar. Tapi bagaimana Anda tahu indeks mana yang harus dereferensi? Bayangkan demi argumen bahwa Anda ingin menyimpan hanya 1 karakter blok:
a
,b
,c
... Agaknya indeks Anda akan menjadi 0, 1, 2 dll, karena itulah tata letak yang paling efisien untuk menyimpan blok-blok.Apakah Anda memperhatikan sesuatu tentang pengaturannya? Indeks Anda, pada kenyataannya, adalah representasi kode dari data yang disimpan ! Dengan kata lain, Anda tidak perlu melakukan dereferensi sama sekali, Anda hanya perlu mengubah indeks menjadi data yang Anda inginkan.
Ketika Anda menyimpan semua nilai yang mungkin dari sesuatu dalam sebuah tabel, ini selalu terjadi: indeks Anda menjadi hanya versi yang disandikan dari data itu sendiri, jadi menyimpan data menjadi tidak perlu sejak awal. Ini mengapa di dunia nyata, indeks hanya berguna untuk data jarang (misalnya semua halaman web yang dikunjungi, tidak semua halaman web yang bisa ada , atau bahkan semua yang melakukan eksis).
sumber
Seperti yang telah ditunjukkan orang lain, Anda memiliki 2 ^ 8192 kemungkinan untuk blok 1k. Ini berarti Anda akan membutuhkan 8192 bit untuk menyandikan alamat blok jika semua alamat blok dikodekan dengan jumlah bit yang sama, sehingga alamat Anda akan panjang 1k. Anda tidak akan mendapatkan apa pun kecuali menambahkan lapisan tipuan sehingga Anda tidak akan mendapatkan kinerja apa pun.
Jika Anda ingin memiliki alamat yang lebih pendek, Anda harus menyandikan beberapa blok dengan alamat pendek dan beberapa dengan yang lebih panjang dan membuatnya sehingga yang lama tidak sering muncul, dan Anda sekarang cukup mengompresi data (mungkin dengan sesuatu seperti a Huffman code ). Itu akan membutuhkan pengetahuan tentang data yang Anda simpan sebelum menyimpannya atau perubahan reguler dalam pengkodean. Mungkin juga kurang efisien daripada algoritma kompresi lain yang menggunakan blok dengan panjang yang berbeda-beda.
sumber
Ada dua masalah dengan itu.
Pertama, "semua kemungkinan permutasi biner satu kilobyte" adalah sejumlah besar data. 1024 byte * 8 bit per byte = 8192 bit dalam satu kilobyte. Semua permutasi yang memungkinkan adalah 2 ^ 8192. Itu sekitar
1.09e+2466
kilobyte! (Untuk tujuan perbandingan, drive 1 TB adalah1e09
kilobyte.)Kedua, bahkan jika Anda memiliki tabel yang sangat besar, dan Anda mengindeksnya dengan pointer, apa yang akan Anda lakukan jika Anda ingin referensi beberapa data yang lebih kecil dari tepat 1 KB?
sumber
Seperti yang ditunjukkan poster lain, pada suatu titik, ukuran pointer yang diperlukan untuk mengindeks ke dalam daftar Anda dari semua nilai yang mungkin membatalkan keuntungan Anda.
Namun, beberapa bahasa menggunakan versi terbatas dari apa yang Anda sarankan untuk mengoptimalkan penggunaan memori. Python menggunakan string 'magang' untuk mengurangi jumlah string duplikat dalam memori. Anda dapat menemukan informasi lebih lanjut dengan mencari 'python string intern'.
sumber