Mengevaluasi rangkaian boolean pada batch input yang serupa


10

Misalkan saya memiliki sirkuit boolean yang menghitung beberapa fungsi f : { 0 , 1 } n{ 0 , 1 } . Asumsikan sirkuit terdiri dari AND, OR, dan NOT gerbang dengan fan-in dan fan-out paling banyak 2.Cf:{0,1}n{0,1}

Biarkan menjadi input yang diberikan. Mengingat C dan x , saya ingin mengevaluasi C pada n input yang berbeda dari x dalam posisi bit tunggal, yaitu, untuk menghitung n nilai C ( x 1 ) , C ( x 2 ) , ... , C ( x n ) di mana x i sama dengan x kecuali bahwa ix{0,1}nCxCnxnC(x1),C(x2),...,C(xn)xsayaxsayabit th dibalik.

Apakah ada cara untuk melakukan hal ini yang lebih efisien yang independen mengevaluasi n kali pada n yang berbeda input?C nn

Asumsikan mengandung m gerbang. Kemudian mengevaluasi C secara independen pada semua n input akan memakan waktu O ( m n ) . Apakah ada cara untuk menghitung C ( x 1 ) , C ( x 2 ) , ... , C ( x n ) dalam waktu o ( m n ) ?CmCnHAI(mn)C(x1),C(x2),...,C(xn)Hai(mn)


Konteks opsional: Jika kita memiliki sirkuit aritmatika (yang gandanya multiplikasi, penjumlahan, dan negasi) di atas , maka akan mungkin untuk menghitung n directional derivatives fRndalam waktuO(m). Pada dasarnya, kita dapat menggunakan metode standar untuk perhitungan gradien (back-propagation / aturan rantai), dalam waktuO(m). Itu bekerja karena fungsi yang sesuai kontinu dan dapat dibedakan. Saya bertanya-tanya apakah hal serupa dapat dilakukan untuk sirkuit boolean. Sirkuit Boolean tidak kontinu dan dapat dibedakan, jadi Anda tidak dapat melakukan trik yang sama, tetapi mungkin ada beberapa teknik pintar lain yang dapat digunakan? Mungkin semacam trik Fourier, atau semacamnya?fxsaya(x)HAI(m)HAI(m)

(Varian pertanyaan: jika kita memiliki gerbang boolean dengan fan-in tanpa batas dan fan-out terikat, dapatkah Anda melakukan asymptotically dengan lebih baik daripada mengevaluasi n kali?)C n


1
Karena Andrew menjawab pertanyaan Anda dengan cukup baik, saya hanya akan memberikan komentar. Jika besar (seperti O ( 2 n / n ) ) dan Anda mengevaluasi C pada banyak input (hingga 2 o ( n / log n ) ) maka ada C ukuran hanya O ( 2 n / n ) yang dapat mengevaluasi C pada mmO(2n/n)C2o(n/logn)CO(2n/n)Cminput. (Masalahnya juga disebut "produksi massal" dalam literatur.) Lihat Uhlig, "Tentang sintesis skema koreksi diri dari elemen fungsional dengan sejumlah kecil elemen yang dapat diandalkan." Math.Catatan Acad.Sci. USSR 15, 558--562. Jadi dalam beberapa kasus, Anda dapat melakukan yang lebih baik dengan ketidakseragaman.
Ryan Williams

Jawaban:


10

Saya menganggap itu tidak mungkin bahwa trik seperti itu mudah ditemukan dan / atau akan memberi Anda keuntungan yang signifikan, karena akan memberikan algoritma kepuasan yang tidak trivial. Begini caranya:

Pertama-tama, sementara tampaknya lebih mudah, masalah Anda sebenarnya dapat memecahkan masalah yang lebih umum, mengingat rangkaian dan N input x 0 , ... , x N - 1 , evaluasi C pada semua input lebih cepat daripada ˜ O ( N | C | ) waktu. Alasannya adalah bahwa kita dapat men-tweak C menjadi sirkuit C ' ukuran | C | + ˜ O ( N n ) yang, pada input 0CNx0,,xN1CO~(N|C|)CC|C|+O~(Nn) , menghasilkan C ( x i ) . Pada dasarnya, kami hanya membuat tabel kecil yang mengirimkan 0 i 10 N - 1 - i untuk x i , dan kawat itu ke C .0i10N1iC(xi)0i10N1ixiC

Algoritma nontrivial untuk evaluasi batch dari sirkuit boolean kemudian dapat digunakan untuk membuat algoritma kepuasan yang cepat. Berikut adalah contoh dalam kasus sederhana di mana kita mengira kita memiliki algoritma yang melakukan evaluasi dalam waktu untuk setiap konstanta ϵ > 0 . Pada input sirkuit C , kita dapat memutuskan kepuasan dengan memperluas C ke sirkuit CO~(|C|2ϵ+(N|C|)1ϵ/2+N2ϵ)ϵ>0CC Ukuran 2 n / 2| C | yang hanya OR atas semua pilihan yang mungkin dariinput n / 2 pertamake C (membiarkan input lain bebas). Kami kemudian melakukan batch-evaluasi C pada semuainput 2 n / 2-nya . Hasil akhirnya adalah bahwa kami menemukan tugas yang memuaskan untuk C jika C memuaskan. Waktu berjalan adalah ˜ O ( 2 ( n / 2 ) ( 2 - ϵC2n/2|C|n/2CC2n/2CC.O~(2(n/2)(2ϵ)|C|2ϵ)=O~(2n(1ϵ/2)poly(|C|))

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.