Gagasan ini muncul pada saya sebagai seorang anak yang belajar memprogram dan pada awalnya menghadapi PRNG. Saya masih tidak tahu seberapa realistis itu, tapi sekarang ada pertukaran tumpukan.
Berikut skema anak berusia 14 tahun untuk algoritma kompresi yang luar biasa:
Ambil PRNG dan seed dengan seed s
untuk mendapatkan urutan panjang pseudo-random byte. Untuk mengirimkan urutan itu ke pihak lain, Anda hanya perlu mengkomunikasikan deskripsi PRNG, seed yang sesuai dan panjang pesan. Untuk urutan yang cukup panjang, deskripsi itu akan jauh lebih pendek daripada urutan itu sendiri.
Sekarang anggaplah saya bisa membalikkan prosesnya. Dengan cukup waktu dan sumber daya komputasi, saya bisa melakukan pencarian dengan kekuatan besar dan menemukan benih (dan PRNG, atau dengan kata lain: program) yang menghasilkan urutan yang saya inginkan (Katakanlah foto lucu kucing yang nakal).
PRNG mengulangi setelah sejumlah besar bit telah dihasilkan, tetapi dibandingkan dengan siklus "tipikal" pesan saya cukup pendek sehingga hal ini sepertinya bukan masalah besar.
Voila, cara efektif (jika rube-Goldbergian) mengompres data.
Jadi, dengan asumsi:
- Urutan yang ingin saya kompres terbatas dan diketahui sebelumnya.
- Saya tidak kekurangan uang tunai atau waktu (Asalkan jumlah terbatas keduanya diperlukan)
Saya ingin tahu:
- Apakah ada kelemahan mendasar dalam alasan di balik skema ini?
- Apa cara standar untuk menganalisis eksperimen pemikiran semacam ini?
Ringkasan
Sering kali jawaban yang baik menjelaskan tidak hanya jawabannya, tetapi apa yang sebenarnya saya tanyakan. Terima kasih atas kesabaran semua orang dan jawaban terinci.
Inilah usaha saya yang ke-1 untuk ringkasan jawaban:
- Sudut PRNG / seed tidak berkontribusi apa-apa, itu tidak lebih dari sebuah program yang menghasilkan urutan yang diinginkan sebagai output.
- Prinsip pigeonhole: Ada lebih banyak pesan panjang> k daripada ada program (menghasilkan pesan) panjang <<k. Jadi beberapa urutan tidak bisa menjadi keluaran dari program yang lebih pendek dari pesan.
- Perlu disebutkan bahwa penerjemah program (pesan) harus diperbaiki terlebih dahulu. Dan desainnya menentukan subset pesan (kecil) yang dapat dihasilkan ketika pesan dengan panjang k diterima.
Pada titik ini ide PRNG asli sudah mati, tetapi setidaknya ada satu pertanyaan terakhir untuk diselesaikan:
- T: Bisakah saya beruntung dan menemukan bahwa pesan panjang (tapi terbatas) saya kebetulan merupakan hasil dari program dengan panjang <k bit?
Sebenarnya, ini bukan masalah kebetulan karena makna dari setiap pesan (program) yang mungkin harus diketahui sebelumnya. Entah itu adalah arti dari beberapa pesan dari <k bit atau tidak .
Jika saya memilih pesan acak> = k bit secara acak (mengapa saya harus melakukannya?), Dalam kasus apa pun saya akan memiliki kemungkinan lenyap untuk dapat mengirimnya menggunakan kurang dari k bit, dan hampir pasti tidak dapat mengirim itu sama sekali menggunakan kurang dari k bit.
OTOH, jika saya memilih pesan spesifik> = k bit dari yang merupakan output dari program kurang dari k bit (dengan asumsi ada pesan seperti itu), maka pada dasarnya saya mengambil keuntungan dari bit yang sudah dikirim ke penerima (desain interpreter), yang dianggap sebagai bagian dari pesan yang ditransfer.
Akhirnya:
- T: Apa semua bisnis kompleksitas entropi / kolmogorov ini ?
Pada akhirnya, keduanya memberi tahu kita hal yang sama dengan prinsip lubang pancang (yang lebih sederhana) memberi tahu kita tentang seberapa banyak kita dapat mengompres: mungkin tidak sama sekali, mungkin beberapa, tetapi tentu saja tidak sebanyak yang kita sukai (kecuali kita menipu).