Metode Incompressibility dikatakan menyederhanakan analisis algoritma untuk kasus rata-rata. Dari apa yang saya pahami, ini karena tidak perlu menghitung semua kemungkinan kombinasi input untuk algoritma itu dan kemudian mendapatkan kompleksitas rata-rata. Sebagai gantinya, satu string yang tidak dapat dimampatkan diambil sebagai input. Karena string yang tidak dapat dimampatkan adalah tipikal, kita dapat mengasumsikan bahwa input ini dapat bertindak sebagai perkiraan yang akurat dari kasus rata-rata.
Saya tersesat dalam hal benar-benar menerapkan Metode Incompressibility ke suatu algoritma. Sebagai tambahan, saya bukan ahli matematika, tetapi berpikir bahwa teori ini memiliki aplikasi praktis dalam pemrograman sehari-hari.
Pada akhirnya, saya ingin belajar bagaimana saya dapat menyimpulkan kasus rata-rata dari algoritma yang diberikan, apakah itu sepele atau kompleks. Bisakah seseorang menunjukkan kepada saya bagaimana metode ini dapat diterapkan pada algoritma sederhana? Misalnya, diberi string input S, simpan semua karakter unik dalam S, lalu cetak masing-masing secara individual:
void uniqueChars(String s) {
char[] chars = chars[ s.length() ]
int free_idx = 0;
for (int i = 0; i < s.length(); i++) {
if (! s[i] in chars) {
chars[free_idx] = s[i]
free_idx++;
}
}
for (int i = 0; i < chars.length(); i++) {
print (chars[i])
}
}
Asumsikan pencarian linear untuk memeriksa apakah array mengandung elemen.
Cuplikan kode di atas hanya untuk argumen. Algoritma yang lebih baik di mana teori dapat didemonstrasikan dapat diterima, tentu saja.
Saya menanyakan pertanyaan ini di StackOverflow ( https://stackoverflow.com/q/24619383/3813812 ) kembali pada bulan Juli 2014, dan telah menerima beberapa komentar bermanfaat tetapi bukan jawaban yang pasti. Seperti yang ditunjukkan oleh salah satu komentator, pertanyaan ini lebih cocok untuk Ilmu Komputer StackExchange, jadi saya bertanya di sini hari ini.
Beberapa literatur yang telah saya ulas meliputi:
Pengantar Kompleksitas Kolmogorov dan Penerapannya, oleh Ming Li dan Paul MB Vitányi
https://www.cs.duke.edu/~reif/courses/complectures/Li/KC-Lecture1.pdf
http://www.detectingdesign.com/PDF%20Files/Kolmogorov%20Complexity%202.pdf
Di antara beberapa sumber lain yang saya tidak punya tautannya.
Jika pemahaman saya tentang penerapan kompleksitas Kolmogorov tidak akurat atau apa yang saya minta tidak praktis, saya akan menghargai pernyataan yang berkaitan dengan fakta.
sumber
Jawaban:
Gagasan metode inkompresibilitas adalah bahwa input yang tidak dapat dimampatkan memenuhi sifat-sifat tertentu yang dapat membantu dalam analisis. Dalam kasus Anda, kompleksitas algoritma tergantung pada berapa banyak karakter yang muncul dalam string. Saat memprosesk th karakter, "waktu berjalan" (atau lebih tepatnya proxy-nya, jumlah perbandingan ketika memeriksa daftar) adalah ≈αk/2 perbandingan rata-rata, di mana αk adalah jumlah karakter yang berbeda yang telah dilihat sejauh ini. Untuk memperkirakanαk , perhatikan bahwa kita dapat menyandikan yang pertama k karakter menggunakan kurang lebih 8αk+klogαk bit, dan kami menyimpulkan itu 8αk+klog2αk≥8k . Karena itu kecualik sangat kecil, αk harus sangat dekat 256 , dan kami dapat menyimpulkan bahwa ada rata-rata 128 perbandingan per karakter. Kita bisa menggunakan ketimpangan untuk menentukan seberapa besark perlu, dan juga apa yang terjadi kapan k kecil.
Alasan kami mencoba untuk menghitung kompleksitas yang tepat dalam kasus algoritme Anda adalah karena waktu menjalankannya yang terburuk dan terbaik adalah keduanyaΘ(n) . Kami menggunakan inkompresibilitas untuk memperkirakanαk , yang juga dapat diestimasi secara langsung menggunakan metode probabilistik, tetapi perhitungan ketidakkompresan mungkin lebih sederhana. Namun, inkompresibilitas tidak meniadakan kebutuhan untuk menganalisis algoritma secara probabilistik - itu hanya membuat analisis lebih mudah ditelusuri dalam beberapa kasus.
sumber
Sebagai komentar lebih lanjut (tetapi sedikit lebih panjang dari komentar aktual) pada jawaban yang diterima:
Kompleksitas Kolmogorov (atau Kompleksitas Algoritmik ) berurusan dengan deskripsi optimal "string" (dalam arti umum string sebagai urutan simbol )
Sebuah string (cukup) tidak dapat dimampatkan atau (cukup) algoritmik secara acak jika deskripsi (algoritmik) (kolmogorov comlplexity K ) tidak kurang dari ukurannya (literal) . Dengan kata lain deskripsi optimal dari string, adalah string itu sendiri .
Hasil utama dari teori ini adalah bahwa sebagian besar string adalah (algoritmik) acak (atau khas) (yang juga terkait dengan bidang lain seperti Teorema Goedel, melalui karya Chaitin)
Kompleksitas Kolmogorov terkait dengan Entropi Probabilistik (atau Shannon) , pada kenyataannya Entropi adalah batas atas pada KC. Dan ini menghubungkan analisis berdasarkan kompleksitas deskriptif dengan analisis berbasis probabilistik. Mereka bisa saling berubah.
Kadang-kadang mungkin lebih mudah untuk menggunakan analisis probabilisrtic, kompleksitas deskriptif lain (pandangan yang sama katakanlah)
Jadi dalam terang di atas, dengan asumsi input acak algoritmik ke suatu algoritma, kita mengasumsikan sebagai berikut:
sumber