Kesetaraan definisi Kolmogorov-Kompleksitas


20

Ada banyak cara untuk mendefinisikan Kolmogorov-Complexity , dan biasanya, semua definisi ini setara dengan konstanta aditif. Itu adalah jika dan adalah fungsi kompleksitas kolmogorov (didefinisikan melalui berbagai bahasa atau model), maka terdapat konstanta sedemikian rupa sehingga untuk setiap string , . Saya percaya ini karena untuk setiap fungsi kompleksitas Kolmogorov dan untuk setiap menyatakan bahwa , untuk beberapa konstanta .K 2 c x | K 1 ( x ) - K 2 ( x ) | < c K x K ( x ) | x | + c cK1K2cx|K1(x)K2(x)|<cKxK(x)|x|+cc

Saya tertarik pada definisi berikut untuk , berdasarkan pada mesin TuringK

  1. jumlah status : Tentukan sebagai jumlah minimal sedemikian sehingga TM dengan menyatakan output pada string kosong.q q xK1(x)qqx
  2. K2(x)xMMM xK2(x)=min|M|Mx

Apakah dan setara? Apa hubungan di antara mereka, dan yang mana yang lebih baik memahami konsep kompleksitas Kolmogorov, jika mereka tidak setara.K 2K1K2

Yang terutama mengganggu saya adalah laju meningkat dengan , yang tampaknya tidak super-linear (atau paling tidak linear dengan konstanta sedemikian rupa sehingga , daripada | x | + c ). Pertimbangkan TM paling sederhana yang menghasilkan x - yang hanya menyandikan x sebagai bagian dari fungsi status dan transisinya. langsung melihat bahwa K_1 (x) \ le | x | +1 . Namun pengkodean mesin yang sama jauh lebih besar, dan batas sepele yang saya dapatkan adalah K_2 (x) \ le | x | \ log | x | . x C > 1 K 2 < C | x | | x | + c x x K 1 ( x ) | x | + 1 K 2 ( x ) | x | log | x |K2xC>1K2<C|x||x|+cxxK1(x)|x|+1K2(x)|x|log|x|


Ada lebih dari mesin dengan n negara, dan ukuran rata-rata mereka setidaknya n 2 , oleh karena itu tidak mungkin bahwa ini hanya berbeda dengan konstanta aditif. 2n2nn2
Kaveh

1
Ada batasan yang diketahui bahwa untuk beberapa perbaikan c tidak tergantung pada x . Ini karena kita dapat menyandikan x ke bahasa bebas awalan dengan hanya menggandakan setiap bit x lalu diakhiri dengan 01 . Ini membutuhkan 2 | x | + 2 bit untuk mewakili x . Jadi, karena K 2 didefinisikan dalam istilah mesin universal bebas-awalan, K 2 ( x )K2(x)c+2|x|cxxx012|x|+2xK2 untuk beberapa perbaikan c . Ini dapat ditingkatkan beberapa dengan menggunakan cara yang lebih cerdas untuk menyandikan x ke bahasa bebas awalan. K2(x)2|x|+2+ccx
Carl Mummert

Saya tidak bisa melihat caranya. Tampaknya diberikan sebagai bagian dari penyandian (sebagai data mentah), atau Anda harus membuat x dengan mesin negara Anda. Opsi pertama tampaknya curang dan saya tidak melihat bagaimana hal itu dapat dibandingkan dengan opsi kedua (yang menyiratkan K 1 )xxK1
Ran G.

@Ran G .: Poin kuncinya adalah teorema invarian yang dijelaskan di en.wikipedia.org/wiki/Invariance_theorem . Jika saya dapat menggambarkan sistem yang efektif yang memiliki tingkat pertumbuhan maka mesin Turing universal (seperti yang Anda jelaskan untuk K 2 ) akan memenuhi ini dalam konstanta aditif. The mesin universal adalah salah satu yang mengambil M adalah input dan kembali output dari M jika M perhentian. 2|x|K2MMM
Carl Mummert

Jawaban:


6

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)=q2(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|)


apakah Anda mengklaim bahwa bukan fungsi kompleksitas-kolmogorov? Ini sangat mengejutkan bagi saya, karena K 1 sebenarnya definisi yang digunakan dalam beberapa pengantar ke kursus komputabilitas yang pernah saya ambil (bukan berarti ia mengatakan apa pun tentang kebenarannya). K1K1
Ran G.

Nah fakta bahwa cukup mengganggu. Pertimbangkan ini: ada2nkata yang mungkin darinbit dan Anda dapat menyandikannya menggunakan1K1(x)12|x|+c2nnbit? Itu berarti2n=O(2 112n+c(pengodean Anda harus injeksi)2n=O(212n)
jmad

Bagaimana jika program python memiliki karakter yang dicadangkan oleh C?
PyRulez
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.