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.
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 ibit th dibalik.
Apakah ada cara untuk melakukan hal ini yang lebih efisien yang independen mengevaluasi n kali pada n yang berbeda input?
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 ) ?
Konteks opsional: Jika kita memiliki sirkuit aritmatika (yang gandanya multiplikasi, penjumlahan, dan negasi) di atas , maka akan mungkin untuk menghitung n directional derivatives ∂ fdalam 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?
(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?)