Analisis algoritma kasus rata-rata menggunakan Metode Incompressibility Kolmogorov


8

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:

  1. Pengantar Kompleksitas Kolmogorov dan Penerapannya, oleh Ming Li dan Paul MB Vitányi

  2. https://www.cs.duke.edu/~reif/courses/complectures/Li/KC-Lecture1.pdf

  3. 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.


Mungkin membuat beberapa kasus lebih mudah untuk dianalisis, tetapi saya tidak akan mengatakan itu masih mudah. Salah satu contoh terbaik adalah membuktikan bahwa ada bilangan prima yang tak terhingga banyaknya. Menerapkan metode untuk algoritma menarik tertentu berhasil cenderung layak menjadi makalah penelitian dari pengalaman saya.
Juho

Jawaban:


4

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 memproseskth karakter, "waktu berjalan" (atau lebih tepatnya proxy-nya, jumlah perbandingan ketika memeriksa daftar) adalah αk/2 perbandingan rata-rata, di mana αkadalah 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αk8k. Karena itu kecualik sangat kecil, αk harus sangat dekat 256, dan kami dapat menyimpulkan bahwa ada rata-rata 128perbandingan 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.


Terima kasih atas jawaban yang luar biasa itu, Yuval. Saya mendapat kesan keliru bahwa metode inkompresibilitas dapat berfungsi sebagai pengganti langsung untuk analisis probabilistik. Saya percaya jawaban Anda dan komentar Juho penting untuk digarisbawahi bahwa itu hanya dapat menyederhanakan analisis dalam beberapa kasus.
user3813812

1

Sebagai komentar lebih lanjut (tetapi sedikit lebih panjang dari komentar aktual) pada jawaban yang diterima:

  1. Kompleksitas Kolmogorov (atau Kompleksitas Algoritmik ) berurusan dengan deskripsi optimal "string" (dalam arti umum string sebagai urutan simbol )

  2. 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 .

  3. 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)

  4. 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.

  5. 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:

  1. Inputnya khas , dengan demikian analisis menggambarkan skenario rata-rata (poin 3 di atas)
  2. Ukuran input terkait dengan cara tertentu dengan kemungkinannya (poin 2 di atas)
  3. Seseorang dapat beralih dari tampilan algoritmik ke tampilan probabilistik (poin 4 di atas)
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.