Apakah ada maksimum yang diketahui untuk seberapa banyak string 0 dan 1 dapat dikompresi?

38

Beberapa waktu yang lalu saya membaca sebuah artikel surat kabar di mana seorang profesor mengatakan bahwa di masa depan kita akan dapat mengompres data menjadi hanya dua bit (atau sesuatu seperti itu).

Ini tentu saja tidak benar (dan bisa jadi ingatan saya tentang apa yang ia nyatakan tidak benar). Dapat dimengerti bahwa tidak praktis untuk mengompresi string apa pun dari 0 dan 1 menjadi hanya dua bit karena (bahkan jika secara teknis memungkinkan), terlalu banyak jenis string yang berbeda akan berakhir dengan mengompresi ke dua bit yang sama (karena kita hanya memiliki '01 'dan' 10 'untuk dipilih).

Lagi pula, ini membuat saya berpikir tentang kelayakan mengompresi string panjang sewenang-wenang 0 dan 1 menurut beberapa skema. Untuk string semacam ini, adakah hubungan yang diketahui antara panjang string (rasio antara 0 dan 1 mungkin tidak masalah) dan kompresi maksimum?

Dengan kata lain, apakah ada cara untuk menentukan berapa panjang minimum (sekecil mungkin) string yang dapat dikompresi menjadi 0 dan 1?

(Di sini saya tertarik pada kompresi maksimum matematis, bukan apa yang saat ini dimungkinkan secara teknis.)

x457812
sumber
7
Kami juga memiliki '00' dan '11' untuk dipilih. Tetapi argumennya sama, jika Anda menggunakannya, hanya ada empat string yang dapat Anda kompres.
RemcoGerlich
3
mathoverflow.net/q/160099/34859 : Pl lihat di sini bahwa vide prinsip pigeonhole akan selalu ada jumlah tak terbatas string yang tidak dapat dikompresi ... Terlepas dari algoritma yang digunakan. (Lihat bagian berjudul 'Latar Belakang' di pertanyaan
ARi
4
Kompresi tergantung pada pengetahuan yang Anda miliki tentang struktur data. Ada artikel ini tentang mengompresi gerakan catur yang menunjukkan bagaimana menambah pengetahuan membantu meningkatkan kompresi.
spektrum
1
Bisakah Anda mengklarifikasi: Kompresi bisa "lossy", atau "lossless" (atau "hybrid" yang mungkin menggunakan keduanya). Apakah Anda berbicara tentang kompresi maksimum hanya menggunakan metode kompresi "lossless", atau apakah Anda termasuk (memungkinkan) penggunaan metode kompresi "lossy" juga. Dengan kata lain, saya kira ada 3 kemungkinan: mencari "kompresi maksimum" di mana (1) data harus selalu dapat didekompresi persis seperti sebelum kompresi, (2) data harus dapat didekompresi, tetapi beberapa "kerugian" diperbolehkan (3) itu bukan keharusan bahwa data dapat didekompresi.
Kevin Fegan
Hai @KevinFegan, dalam hal ini harus menjadi opsi 1: "data harus selalu dapat didekompresi persis seperti sebelum kompresi"
x457812

Jawaban:

45

Kompleksitas Kolmogorov adalah salah satu pendekatan untuk memformalkan ini secara matematis. Sayangnya, menghitung kompleksitas Kolmogorov dari suatu string adalah masalah yang tidak dapat diperhitungkan. Lihat juga: Mendekati kompleksitas Kolmogorov .

Dimungkinkan untuk mendapatkan hasil yang lebih baik jika Anda menganalisis sumber string daripada string itu sendiri . Dengan kata lain, seringkali sumber dapat dimodelkan sebagai proses probabilistik, yang secara acak memilih string, menurut beberapa distribusi. Entropi dari distribusi itu kemudian memberi tahu Anda kompresi matematis terbaik (hingga beberapa konstanta aditif kecil).


Pada ketidakmungkinan kompresi sempurna, Anda mungkin juga tertarik pada yang berikut ini.

DW
sumber
tetapi, kompresi adalah salah satu teknik untuk memperkirakan entropi. Bisakah kompresi dan entropi menjadi dua sisi dari hal yang sama?
Paul Uszak
1
@ PaulUszak, ya, mereka sangat terkait: lihat, misalnya, teorema Shannon . Tetapi, harap dicatat: komentar harus digunakan hanya untuk menyarankan perbaikan / klarifikasi pada posting, bukan untuk mengajukan pertanyaan tindak lanjut. Untuk mengajukan pertanyaan baru, gunakan tautan "Ajukan pertanyaan" di bagian kanan atas halaman.
DW
35

Nlog2N

Juga, dalam banyak kasus kami tidak peduli dengan rekonstruksi yang tepat . Ini disebut kompresi lossy , dan cara musik dan video dikompresi. Dalam hal ini, batas bawah yang disebutkan di atas tidak berlaku, tetapi Anda dapat membuat batas bawah lainnya.

Yuval Filmus
sumber
1
Nlog2N
27

Berikut adalah skema sederhana yang dapat mengompresi string bit sembarang lossless, dengan hasil terkecil menjadi hanya satu bit:

JIKA string adalah pasangan identik untuk merekam simfoni ke-9 Beethoven, gerakan keempat, dalam format AAC yang disimpan di hard drive komputer saya, maka outputnya adalah bit '0'.

JIKA string adalah hal lain, maka outputnya adalah bit tunggal '1', diikuti oleh salinan identik dari string asli.

Skema ini mengurangi satu input yang mungkin menjadi tepat satu bit, dan menambah panjang setiap input lainnya. Ada prinsip umum: Jika algoritma kompresi dapat memetakan string input apa pun ke string terkompresi, dan ada algoritma dekompresi yang cocok yang memetakan string terkompresi kembali ke string asli, dan algoritma kompresi memetakan setiap input ke string yang lebih pendek, maka harus memetakan beberapa string input ke string yang lebih panjang.

gnasher729
sumber
2
Pekerjaan yang baik untuk membuat jawabannya jelas dan jelas. Perlu dicatat bahwa ini mirip dengan apa yang coba dilakukan oleh algoritma kompresi yang baik - untuk domain input yang diberikan, cobalah untuk mempersingkat jenis input yang paling umum diharapkan, dengan imbalan input yang kurang umum diperpanjang.
JBentley
6

Untuk setiap skema kompresi yang dapat Anda buat, adalah mungkin untuk menghasilkan data yang tidak dapat dikompres olehnya. Jadi, bahkan jika skema kompresi Anda sangat efisien dengan beberapa jenis data, skema kompresi Anda tidak akan pernah konsisten ke rasio tertentu.

Cara untuk menghasilkan contoh data yang tidak dapat dikompres untuk algoritma kompresi tertentu adalah sederhana: ambil segala jenis data dan jalankan melalui algoritma kompresi berulang kali, hingga ukurannya tidak lagi berkurang.

Jadi kompresibilitas string bit tidak benar-benar fungsi dari panjang string, tetapi kompleksitasnya dalam kaitannya dengan algoritma kompresi.

m69 '' snarky and unwelcoming ''
sumber
Selamat datang! Perhatikan bahwa ini hanya berlaku untuk kompresi lossless. Kompresi lossy dapat memampatkan semua string (setidaknya, selama Anda menerima algoritma "Return string kosong" sebagai algoritma kompresi lossy. ;-)).
David Richerby
@ DavidRicherby Itu benar, tentu saja. Tapi saya mendapat kesan dari pertanyaan bahwa OP bertanya tentang kompresi lossless, karena tidak masuk akal untuk membahas kompresi maksimum skema lossy; ide bahwa Anda dapat membawanya ke ekstrem yang tidak dapat digunakan melekat dalam konsep kompresi lossy.
m69 'snarky and unwelcoming' '29
Ya, saya pikir itu interpretasi yang masuk akal.
David Richerby
-2

Ada algoritma yang menarik dan sangat berbeda yang digunakan oleh sistem cadangan perusahaan. Idenya adalah bahwa jika Anda memiliki perusahaan dengan 10.000 komputer, maka banyak dari komputer ini akan berisi banyak file yang identik. Misalnya, email yang dikirim ke semua orang di perusahaan mungkin berakhir sebagai file yang identik pada setiap hard drive.

Jadi sistem cadangan yang mencoba membuat cadangan file jelas harus mencoba mengompres file untuk menghemat ruang, tetapi pertama-tama sistem cadangan memeriksa apakah file yang benar-benar identik sudah disimpan! Jadi, alih-alih mencadangkan apa pun , semua yang dilakukan sistem cadangan adalah misalnya mengingat bahwa Anda memiliki nomor file 1.487.578 pada sistem cadangan di hard drive Anda.

Ini sangat efisien misalnya ketika 10.000 pengguna semua memiliki sistem operasi dan aplikasi yang sama diinstal. Untuk pengguna tunggal itu tidak terlalu berguna sama sekali.

gnasher729
sumber
4
Itu menarik tetapi saya tidak melihat bagaimana itu menjawab pertanyaan. Pertanyaannya meminta batasan kompresi, bukan diskusi umum tentang cadangan perusahaan.
David Richerby
Ini disebut deduplikasi, dan dilakukan menggunakan hash. Dibutuhkan banyak RAM untuk menyimpan hash 128bit untuk setiap blok pada disk. ZFS dapat melakukan ini untuk membuat beberapa blok membagi ruang penyimpanan copy-on-write secara oportunistik. Tetapi masalah kompresi semacam ini (di mana Anda mencoba mengompres kumpulan data besar yang Anda perlukan akses acak, dan itu berubah terlalu cepat untuk kompresi aliran normal, tetapi memiliki redundansi tingkat blok) tidak relevan sebagai jawaban untuk ini pertanyaan.
Peter Cordes