Saya minta maaf sebelumnya karena saya memberikan terlalu banyak detail, tapi saya akan bertentangan dengan orang.
Tentang K( x ) ≤ K′(x)+c
Fakta bahwa biasanya berasal dari penerjemah bahasa deskripsi # 2 ke dalam bahasa deskripsi # 1 dan bukan dari terjemahan dari program # 2 ke dalam program # 1.K1(x)≤K2(x)+c
Misalnya dan Anda mendapatkan ketimpangan ini sesederhana ini:KC(x)≤KPython(x)+cpy2c
void py_run(char * s) {
// code of your Python interpreter
}
int main(void) {
py_run("Put here your Python program of size Kpython(x)");
}
Maka konstanta Anda akan menjadi sesuatu seperti 528 + 490240688 di mana 528 adalah jumlah bit untuk kode ini dan 490240688 bit adalah ukuran penerjemah resmi Python yang ditulis dalam C. Tentu saja Anda hanya perlu menafsirkan apa yang mungkin dalam bahasa deskripsi Anda untuk Python sehingga Anda dapat melakukan lebih baik dari 69 MB :-)cpy2c528+490240688528490240688
Yang penting adalah Anda dapat menulis program Python Anda secara linear dalam kode C. Misalnya, bahasa tempat Anda harus meletakkan "BANANA" di antara setiap karakter bukanlah program deskripsi yang sangat baik dan properti tersebut kemudian salah. (Tetapi jika bahasa deskripsi mengizinkan Anda untuk menulis data dalam file terpisah atau dalam blok, masalah ini hilang)
Mengapa cacatK1(x)=q
Masalah dengan definisi adalah bahwa Anda mungkin memerlukan lebih dari q bit untuk menggambarkan mesin Turing dengan status q karena Anda perlu menyandikan transisi.K1qq
Jadi tidak ada dan K 2 yang mungkin tidak setara, tapi itu terutama kesalahan K 1 . Saya pikir kita dapat membuktikan bahwa untuk semua a > 0 ada c a sehingga K 1 ( x ) ≤ a | x | + c a . Tentu saja setiap satu < 1 sudah cukup untuk menyangkal fakta bahwa K 1 bukan fungsi valid, karena akan berarti bahwa kita dapat mengkodekan lebih semua 2 n kemungkinan string panjangK1K2K1a>0caK1(x)≤a|x|+caa<1K12n ke dalam sebuah n + c a bit.nan+ca
Tapi ukurannya sangat terikat ketika membangun mesin Turing. Idenya adalah bahwa dalam blok menyatakan ada b 2 b cara untuk menemukan transisi untuk setiap negara dan itu lebih baik daripada 2 b cara biasa Anda dapat mengisi b bit. Kemudian Anda dapat menyimpan di setiap blok log 2 b bit informasi. (bukan 2 log 2 b karena Anda harus masuk dan keluar blok satu atau lain cara)bb2b2bblog2b2log2b
Jadi ya ... Dengan balok ukuran Anda mungkin bisa membuktikan K 1 ( x ) ≤ a | x | + c a . Tapi saya sudah menulis terlalu banyak tentang mengapa jumlah negara bukan fungsi kompleksitas Kolmogorov yang valid. Jika Anda ingin saya menguraikan, saya akan.21/aK1(x)≤a|x|+ca
Sekarang tentang K2
Bahasa deskriptif naif berkorespondensi kira-kira dengan (yaitu log 2 q untuk setiap negara bagian berikutnya dan rincian tentang menulis dan penghentian).K2(x)=q⋅2⋅(log2q+2)log2q
Seperti yang tampaknya, saya yakin bahwa cara yang lebih baik / curang adalah mengotorisasi untuk menyandikan "data" ke mesin Turing, mungkin dengan menambahkan tag biner dalam bahasa deskripsi yang mengatakan apakah suatu negara adalah keadaan data ( yang hanya menulis sedikit dan pergi ke negara bagian berikutnya) atau jika melakukan sesuatu yang lain. Dengan begitu Anda bisa menyimpan satu bit Anda dalam sedikit bahasa deskriptif Anda.x
Namun jika Anda menyimpan sama, Anda bisa menggunakan teknik yang sama yang saya gunakan di bagian sebelumnya untuk menghemat beberapa bit, tetapi saya sepertinya terjebak di K 2 ( x ) ≤ a | x | log | x | + c (untuk a > 0 ) .. mungkin kurang dari log | x | , bahkan, tetapi mendapatkan O ( | x | ) tampaknya sulit. (Dan saya berharap seharusnya | x | , bahkan bukan O ( |K2K2(x)≤a|x|log|x|+ca>0log|x|O(|x|)|x| .)O(|x|)