Pertimbangkan masalah keputusan berikut. Biarkan dan biarkan (C_0 ^ n, C_1 ^ n, \ dots, C_ {q-1} ^ n) menjadi cocok enumerasi himpunan bagian dari \ {0,1, \ dots, n-1 \} yang memiliki paling banyak n / 4 elemen.
Input Keanggotaan Quarter-Subset : tupel bilangan bulat non-negatif diwakili dalam biner
Pertanyaan: apakah ?
Dengan memilih enumerasi "bagus" , dapatkah Keanggotaan Sub-Bagian ditentukan oleh mesin Turing deterministik menggunakan tidak lebih dari bit ruang kerja, untuk semua n cukup besar ?
Diskusi
Biarkan . Sangat mudah untuk menghitung semua himpunan bagian dari elemen k paling banyak dipilih dari dengan melacak indeks ukuran masing-masing bit. (Lihat juga diskusi di bagian TAOCP Knuth 7.2.1.3.) Ketika adalah konstan, ini hanya bit. Namun, jika kita membiarkan untuk beberapa konstanta , maka skema enumerasi seperti itu menggunakan ruang . Satu juga dapat menggunakan vektor karakteristik bit bersama-sama dengan cek untuk jumlah bit yang ditetapkan. Saya tertarik pada skema yang mengalahkan bit.
Pertanyaan yang berkaitan erat adalah:
Untuk positif memuaskan ketimpangan , apakah ada kode yang mewakili himpunan bagian dari paling banyak elemen dipilih dari yang menggunakan bit untuk beberapa konstanta , dan dapat diterjemahkan secara efisien?c log ( e ( 1 + c ) / c ) < 1 c n n d n d < 1
Perhatikan bahwa untuk cukup besar , dan karena ketika maka informasi-secara teoritis mengikuti bahwa akan dicapai dengan kode yang sempurna. (Ini kurang dari jika .) Karena itu saya mencari kode yang cukup bersih yang dapat dimanipulasi tanpa menggunakan banyak ruang.k ∑ i = 0 ( nlog ( n+k-1
Untuk mendapatkan kode yang sempurna, seseorang dapat memilih enumerasi himpunan bagian, menjalankan indeks melalui enumerasi dalam urutan yang meningkat, dan kemudian memperoleh setiap kombinasi dengan mendekode indeks. Namun, mendekode kode seperti itu ketika tampaknya memerlukan penggunaan setidaknya bit ruang untuk enumerasi yang telah saya lihat, seperti melalui vektor karakteristik yang dipesan dengan menambah berat Hamming dan kemudian secara leksikografis , atau melalui kode Gray.n
Mungkin ada cara untuk melakukan ini dengan ruang, tapi saya pikir lebih mungkin untuk dilakukan. ( 1 - ε ) n
Perhatikan bahwa karena , informasi-teoretis batas bawah sudah bit, jadi ini benar-benar tentang apakah dapat dicapai untuk beberapa . Kode yang cukup bagus (tapi belum tentu sempurna) tampaknya sudah cukup untuk menjawab pertanyaan saya di afirmatif. Mungkin juga halnya Keanggotaan Quarter-Subset dapat diputuskan secara efisien tanpa membuat kode secara eksplisit. Di sisi lain, enumerasi semacam itu mungkin tidak ada: misalnya, setiap urutan enumerasi untuk nilaiΩ(n)(1-ε)nε>0n(1-ε)n mungkin secara inheren tidak seragam, atau mungkin terjadi bahwa setiap bit terikat harus sering dilanggar tanpa batas.
sumber
Jawaban:
Saya berasumsi dari diskusi bahwa Anda sebenarnya tidak tertarik pada ruang kerja seperti yang diklaim, tetapi dalam ruang total termasuk ukuran input. (Kalau tidak, skema pengkodean bit sepele dapat didekodekan dalam ruang logaritmik.)n
Biarkan menjadi konstanta yang cukup besar, dan pertimbangkan skema penyandian berikut untuk . Pisahkan menjadi blok , , dengan ukuranX ⊆ { 0 , … , n - 1 } { 0 , … , n - 1 } k B u u < kk X⊆{0,…,n−1} {0,…,n−1} k Bu u<k X u = X ∩ B u X u < kn/k masing-masing , dan masukkan . Pengkodean terdiri dari urutan angka-angka berikut (ditulis dalam biner) untuk setiap :Xu=X∩Bu X u<k
ukuran;su=|Xu|
nomor sesuai dengan s uXu dalam sistem angka kombinatorial untuk himpunan s_u.su
Sedangkan untuk ukuran encoding, asumsikan . Angka mengambil bit, yang akan diabaikan. Kami memiliki untuk setidaknya dari , dalam hal mana pengkodean memakan waktu sekitars u O ( k log ( n / k ) ) s u ≤ n / ( 3 k )|X|≤n/4 su O(klog(n/k)) su≤n/(3k) u X u H ( 1 / 3 ) nk/4 u Xu X u n / k 0 . 98 nH(1/3)nk≈0.92n/k bits; sisa - mengambil paling banyak bit. Totalnya adalah paling banyak bit.Xu n/k 0.98n
Mengurai jumlah untuk menentukan blok mana yang masuki, dan kemudian mencari tahuX u n / k + O ( log n ) 2 n / k ki Xu ; yang terakhir dilakukan dengan mudah di ruang , dan kita dapat menggunakan kembali ruang yang ditempati oleh penyandian dari blok yang tersisa (selama total ruang setidaknya , yang OK untuk cukup besar).n/k+O(logn) 2n/k k
Analisis yang lebih baik menunjukkan bahwa skema ini menghasilkan ruang yang pada dasarnya : misalkan . Karena , rata-rata lebih dari paling banyak . Pengkodean membutuhkan waktu sekitar bit. Sekarang, fungsi entropi adalah cekung, maka rata-rata lebih dari paling banyakp u = s u / ( n / k ) | X | / N ≤ 1 / 4 p u u < k 1 / 4 X u HH(1/4)n≈0.812n pu=su/(n/k) |X|/n≤1/4 pu u<k 1/4 Xu H ( p u ) u < k H ( 1H(pu)n/k H(pu) u<k H ( 1 / 4 ) n + O ( log n ) O ( log n )H(1/4) , dan total ruang adalah . Ini optimal hingga .H(1/4)n+O(logn) O(logn)
Tentu saja tidak ada yang istimewa tentang . Argumen yang sama menunjukkan bahwa untuk sembarang konstanta , ada skema penyandian untuk -ukuran subset dari yang mengambil bit, dan dapat didekodekan di tempat. Sampai batas tertentu, ia bahkan dapat digunakan untuk subset -ukuran mana lln , dengan mengambil jumlah blok yang tidak konstan ( atau lebih), tetapi kemudian overhead menjadi lebih jelas, dan menyusul istilah utama ketika turun di bawah kira-kira .0 < c < 1 / 2 ≤ c n { 0 , ... , n - 1 } H ( c ) n + O ( log n ) ≤ s ( n ) s ( n )1/4 0<c<1/2 ≤cn {0,…,n−1} H(c)n+O(logn) ≤s(n) k ≥ 2 / H ( s ( n ) / n ) O ( k logs(n)≪n k≥2/H(s(n)/n) s ( n ) √O(klog(n/k)) s(n) n−−√
sumber