Kompleksitas Kolmogorov: Mengapa Anda membutuhkan lebih banyak byte daripada string itu sendiri?

Jawaban:

13

Nilai pasti dari kompleksitas Kolmogorov tergantung pada bahasa yang dipilih untuk mewakili string. Bahasa ini harus lengkap Turing, jadi mewakili semua string karena mereka sendiri bukanlah pilihan.

Menurut prinsip pigeonhole, jika setidaknya ada satu untaian panjang paling banyak yang representasinya lebih pendek dari dirinya sendiri, maka ada juga setidaknya satu untaian panjang paling banyak n yang representasinya lebih panjang dari dirinya sendiri. (Representasi adalah algoritma kompresi.)nn

Anda dapat memiliki bahasa deskripsi di mana setiap string memiliki representasi yang paling banyak satu bit lebih lama daripada dirinya sendiri: mulai setiap representasi dengan bit yang menunjukkan "cetak secara harfiah" atau "interpretasikan". Tidak semua bahasa deskripsi sesederhana itu.

CC

Gilles 'SANGAT berhenti menjadi jahat'
sumber
6

Deskripsi string yang dipertimbangkan di sini adalah input ke beberapa mesin Turing universal. Anda dapat menganggapnya sebagai program C. String hello worldtidak, dengan sendirinya, membentuk program C, tapi yang berikut ini tidak: int main(int argc, char *argv[]) { printf("hello world"); }. Seperti yang Anda lihat, overhead tetap tetapi tidak nol.

Yuval Filmus
sumber
3
Sebagai tambahan kehalusan, tidak mungkin dalam C (atau Turing-complete C ideal) untuk mencetak string sewenang-wenang dengan O (1) ruang overhead, karena beberapa karakter dalam string literal perlu mengutip.
Gilles 'SO- berhenti menjadi jahat'