Tidak sulit untuk menunjukkan bahwa mengurutkan array angka sulit untuk . Jika input adalah array dari 1s dan 0s maka pada dasarnya fungsi (diberikan bit, output jumlah 1s dalam biner) karena lengkap untuk dan dimungkinkan untuk mengkonversi angka unary ke angka biner dan (logaritmik) angka biner kecil ke angka unary di : C o u n t n C o u n t T C 0 A C 0
Jadi kekuatan pada dasarnya menyortir string biner (mis. 100011 hingga 000111). Ini berlaku lebih umum ketika angka-angka dalam array dibatasi. Pertanyaan saya adalah bagaimana jika jumlahnya tidak dibatasi?
Apakah masalah pengurutan array nomor tidak terikat masih di ? Apakah lengkap untuk kelas yang lebih besar seperti ?
Jawaban:
Misalkan Anda memiliki angka x 1 , … , x n lebar m ≥ log n . Tanpa kehilangan keumuman, semua angka berbeda (tambahkan log ekstra dan bit urutan lebih rendah). Dua angka dapat dibandingkan dalam AC 0 , jadi dalam AC 0 kita dapat menghitung, untuk setiap x i , vektor biner v , yang didefinisikan oleh v j = 1 jika x j ≥ x i . Di TC 0 kita bisa mengurutkan v ken x1, ... , xn m ≥ logn catatann xsaya v vj= 1 xj≥xi v , dan kemudian cari (di AC0) posisi k sehingga w k = 1 sedangkan w k - 1 = 0 (di mana w 0 = 0 , w n + 1 = 1 ). Dengan nilai-nilai ini k untuk setiap i ∈ [ n ] , kita dapat menghitung array yang diurutkan dalam AC0. Secara total, kami mendapatkansirkuitTC0.w k wk=1 wk−1=0 w0=0 wn+1=1 k i∈[n]
sumber