Apa kompleksitas komputasi kode bebas awalan yang optimal, ketika frekuensinya serupa?

13

Sudah diketahui bahwa ada algoritma optimal kasus terburuk untuk menghitung kode Huffman dalam waktu . Ini ditingkatkan dalam dua cara ortogonal:θ(nlgn)

  1. Kode bebas awalan yang optimal dapat dihitung lebih cepat jika rangkaian frekuensi yang berbeda kecil (misalnya ukuran ): mengurutkan frekuensi menggunakan [Munro dan Spira, 1976] sehingga untuk mengambil keuntungan dari nilai kecil σ , dan menghitung Huffman pohon dalam waktu linier dari frekuensi yang diurutkan. Ini menghasilkan solusi dalam O ( n lg σ )σσO(nlgσ)

  2. Ada algoritma untuk menghitung kode yang setara di mana k adalah jumlah panjang codeword yang berbeda [Belal dan Elmasry].O(n16k)k

Apakah ada cara untuk menggabungkan teknik-teknik itu, untuk meningkatkan kompleksitas terbaik saat ini ( n min { 16 k , lg σ } ) ?O(nmin{16k,lgσ})


THE HASIL DARI STACS 2006 TAMPAK SALAHO(nk) , Elmasry diterbitkan pada ARXIV pada 2010 (http://arxiv.org/abs/cs/0509015) versi yang mengumumkan - operasi pada input yang tidak disortir dan - O ( 9 k log 2 k - 1 n ) operasi pada input yang diurutkanO(16kn)O(9klog2k1n)


  1. Saya melihat analogi dengan kompleksitas komputasi planar convex hull, di mana algoritma dalam (berdasarkan penyortiran, sebagai algoritma O ( n lg n ) untuk kode Huffman) dan dalam O ( n h ) (pembungkus kado) ) digantikan oleh algoritma Kirkpatrick dan Seidel dalam O ( n lg h ) (kemudian terbukti optimal dengan kompleksitas bentuk O ( n H ( n 1 , , n kO(nlgn)O(nlgn)O(nh)O(nlgh) ). Dalam kasus kode Prefix Free, O ( n lg n ) versus O ( n k ) menunjukkan kemungkinan suatu algoritma dengan kompleksitas O ( n lg k ) , atau bahkan O ( n H ( n 1 , ... , n k ) di mana n i adalah jumlah codeword panjang i , menggunakan analogi dari tepi cembung cembung yang meliputi n iO(nH(n1,,nk)O(nlgn)O(nk)O(nlgk)O(nH(n1,,nk)niinimenunjuk ke panjang kode yang mencakup simbol .ni

  2. Contoh sederhana menunjukkan bahwa mengurutkan nilai-nilai logaritmik (bulat) dari frekuensi (dalam waktu linier dalam model RAM kata ) tidak memberikan kode bebas awalan yang optimal dalam waktu linier: θ(lgn)

    • Untuk , f 1 = 1 / 2 - ε dan f 2 = f 3 = 1 / 4 + εn=3f1=1/2εf2=f3=1/4+ε
    • jadi penyortiran log tidak mengubah urutanlgfi=2
    • namun dua kode dari tiga biaya bit lebih dari optimal.n/4
  3. k

    • k=nθ(lgn)n2
Jeremy
sumber

Jawaban:

1

Butuh beberapa tahun (lima!), Tetapi di sini ada sebagian jawaban untuk pertanyaan:

http://arxiv.org/abs/1602.00023

Kode Gratis Awalan Optimal Dengan Pengurutan Sebagian Jérémy Barbay (Diserahkan pada 29 Jan 2016)

Kami menggambarkan suatu algoritma yang menghitung kode bebas awalan yang optimal untuk n bobot positif yang tidak disortir dalam waktu dalam O (n (1 + lgα)) ⊆O (nlgn), di mana pergantian α∈ [1..n − 1] mengukur jumlah penyortiran diperlukan oleh perhitungan. Kompleksitas asimptotik ini berada dalam faktor konstan yang optimal dalam model perhitungan pohon keputusan aljabar, dalam kasus terburuk atas semua contoh ukuran n dan alternasi α. Hasil seperti itu memperbaiki keadaan kompleksitas seni Θ (nlgn) dalam kasus terburuk dibandingkan contoh ukuran n dalam model komputasi yang sama, tengara dalam kompresi dan pengkodean sejak 1952, dengan hanya kombinasi algoritma van Leeuwen untuk menghitung awalan optimal kode gratis dari bobot yang diurutkan (dikenal sejak 1976), dengan Struktur Data yang Ditangguhkan untuk mengurutkan sebagian multiset tergantung pada kueri di atasnya (dikenal sejak 1988).

Jeremy
sumber