( N + 1 ) n
Berapa banyak poin yang diperlukan untuk secara unik menentukan fungsi yang dapat dihitung , mengingat lamanya program yang menghitung dalam bahasa tetap? (Yaitu terikat pada kompleksitas Kolmogorov dari ).f : N → N
Idenya adalah bahwa, setidaknya secara teoritis, seseorang dapat membuktikan kebenaran suatu program dengan membuat tes yang cukup.
Jika seseorang memiliki program panjang yang menghitung , ada terikat pada jumlah fungsi yang dapat dihitung dengan panjang sumber paling .P
Karena itu seseorang "hanya" perlu membuktikan bahwa:
- f
f dapat dihitung dengan panjang sumber≤L≤L - P
P tidak menghitung fungsi lain yang dapat dihitung dalam byte atau kurang (dengan pengujian)LL
Gagasan ini mungkin tidak memiliki konsekuensi praktis (batas-batasnya pasti bersifat eksponensial).
Jawaban:
(Ini dimaksudkan sebagai komentar, tetapi berlangsung lama). Pertanyaan yang sangat menarik. Jika Anda bersedia untuk memikirkan langkah-langkah kompleksitas lain selain Kolmogorov, maka ada beberapa jawaban dalam teori Belajar yang mungkin memuaskan Anda. Saya meninggalkannya untuk para ahli di daerah.
Misalnya, jika saya tidak salah, dalam "Sebuah teori yang dapat dipelajari" Valiant membuktikan bahwa fungsi boolean dapat direkonstruksi dengan jumlah polinomial "titik positif" pada ukuran rumus k-CNF-nya (untuk setiap k , dan maksud saya dengan "poin positif" yang ada dalam formulir ).(x1,…,xn,1)(x1,…,xn,1)
Dalam TAOCP 7.2.1.6 Knuth ditunjukkan dengan cara yang menakjubkan (menggunakan pola pohon Natal) bahwa untuk merekonstruksi fungsi monote boolean (yaitu tidak menurun pada setiap variabel) Anda membutuhkan tepat poin.(n+1⌊n/2⌋+1)(n+1⌊n/2⌋+1)
sumber
Untuk melanjutkan jawaban Deigo, kompleksitas sampel standar yang dibatasi oleh teori belajar memberi tahu Anda bahwa jika Anda puas menemukan program yang "kira-kira benar", Anda tidak perlu mencoba banyak poin sama sekali. Katakanlah kita meng-encode program dalam biner, sehingga hanya ada program dengan panjang d. Mari kita misalkan juga bahwa ada beberapa distribusi lebih contoh masukan . Mungkin tujuan Anda adalah untuk menemukan program yang Anda yakini hampir benar ("Kemungkinan Sekitar Tepat" yaitu seperti dalam model pembelajaran Pali Valiants). Artinya, Anda ingin menjalankan algoritma yang akan mengambil sejumlah kecil sampel bersama dengan , dan akan dengan probabilitas setidaknya2d2d DD x∼Dx∼D f(x)f(x) (1−δ)(1−δ) Output program beberapa yang setuju dengan pada setidaknya sebagian kecil dari input diambil dari . PP ff (1−ϵ)(1−ϵ) DD
Kami hanya akan menggambar contoh , dan menampilkan program dengan panjang yang sesuai dengan pada semua contoh. (Satu dijamin ada karena kami menganggap memiliki kompleksitas Kolmogorov paling banyak ) ...mm x∼Dx∼D PP ≤d≤d ff ff dd
Berapa probabilitas bahwa suatu program tertentu yang tidak setuju dengan pada lebih dari fraksi contoh konsisten dengan contoh kami pilih? Paling banyak . Kami ingin menjadikan probabilitas ini paling banyak sehingga kami dapat mengambil ikatan serikat atas semua program dan mengatakan bahwa dengan probabilitas setidaknya , tidak ada program "buruk" yang konsisten dengan contoh menarik kami. Memecahkan, kita melihat bahwa itu cukup untuk mengambil contoh hanya . (Yaitu hanya banyak linear dalam kompleksitas Kolmogorov dariPP ff ϵϵ mm (1−ϵ)m(1−ϵ)m δ/2dδ/2d 2d2d 1−δ1−δ m≥1ϵ(d+log1/δ)
BTW, argumen seperti ini dapat digunakan untuk menjustifikasi "Occam's Razor": mengingat sejumlah pengamatan, di antara semua teori yang menjelaskannya, Anda harus memilih teori dengan kompleksitas Kolmogorov terendah, karena ada sedikit peluang untuk overfitting.
Tentu saja, jika Anda hanya ingin memeriksa satu program tetap dengan cara ini, Anda hanya perlu contoh ...O(log(1/δ)/ϵ)O(log(1/δ)/ϵ)
sumber
Inilah jawaban yang sepele: dengan asumsi L ≥ lg | N | , maka Anda perlu tahu nilai f sama sekali | N | poin untuk menentukan secara unik f . Oleh karena itu, pendekatan yang Anda buat sketsa sama sekali tidak membantu, kecuali Anda entah bagaimana tahu bahwa panjang L dari program ini sangat pendek: jauh lebih pendek daripada lg | N | bit.L≥lg|N| f |N| f L lg|N|
Pertimbangkan sekumpulan fungsi F = { f i : i ∈ N } , di mana f i didefinisikan sebagai fungsi f i ( x ) = 1 jika i = x dan f i ( x ) = 0 jika i ≠ x . Perhatikan bahwa kompleksitas Kolmogorov komputasi f i adalah tentang lg | N | bit, karena Anda dapat meng-hardcode nilai iF={fi:i∈N} fi fi(x)=1 i=x fi(x)=0 i≠x fi lg|N| i dalam kode sumber dan kemudian yang Anda butuhkan hanyalah pernyataan kondisional sederhana ( O ( 1 ) ekstra).O(1)
Namun, Anda tidak dapat membedakan f i dari fungsi all-zero kecuali Anda mengujinya di input i . Anda tidak dapat membedakan f i dari f j kecuali Anda menguji pada input i atau j . Karena itu, Anda harus mengevaluasi f sama sekali | N | input, untuk secara unik menentukan f i kita hadapi. (OK, secara teknis, Anda perlu mengevaluasinya di | N | - 1 input, tapi apa pun.)fi i
sumber
Anda bisa membuat program ini panjang dan sewenang-wenang. Jadi dengan program apa pun, Anda dapat memutuskan apakah bahasanya setara dengan program ini. Anda tidak dapat melakukannya dengan teorema Rice.
sumber