Załóżmy, że mam obwód boolowski która oblicza jakąś funkcję . Załóżmy, że obwód składa się z AND, OR i NOT bramek z wachlarzem i wachlowaniem co najwyżej 2.
Pozwolić być danym wkładem. Dany i , Chcę ocenić na dane wejściowe, które różnią się od w pozycji pojedynczego bitu, tj. do obliczenia wartości gdzie jest taki sam jak oprócz tego, że to bit jest odwrócony.
Czy istnieje sposób, aby to zrobić, który jest bardziej wydajny niż niezależna ocena razy na różne dane wejściowe?
Założyć zawiera bramy Następnie samodzielnie ocenia na wszystkich wejścia zajmie czas. Czy istnieje sposób na obliczenie w czas?
Kontekst opcjonalny: Gdybyśmy mieli obwód arytmetyczny (którego bramkami jest mnożenie, dodawanie i negowanie) ponad, wówczas można obliczyć pochodne kierunkowe w czas. Zasadniczo moglibyśmy użyć standardowych metod obliczania gradientu (wsteczna propagacja / reguła łańcuchowa) wczas. Działa to, ponieważ odpowiednia funkcja jest ciągła i można ją rozróżnić. Zastanawiam się, czy coś podobnego można zrobić dla obwodów boolowskich. Obwody boolowskie nie są ciągłe i różnicowalne, więc nie możesz zrobić tej samej sztuczki, ale może jest jakaś inna sprytna technika, której można użyć? Może jakiś trik Fouriera lub coś takiego?
(Pytanie wariantowe: jeśli mamy bramki typu boolean z nieograniczonym wachlarzem i ograniczonym wachlarzem, czy można zrobić asymptotycznie lepiej niż oceniać czasy?)