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?)
Odpowiedzi:
Uważam, że jest mało prawdopodobne, że taka sztuczka jest łatwa do znalezienia i / lub da ci znaczące korzyści, ponieważ dałaby niełatwe algorytmy satysfakcji. Oto jak:
Przede wszystkim, choć pozornie łatwiejszy, twój problem może faktycznie rozwiązać bardziej ogólny problem, biorąc pod uwagę obwódC i N wejścia x0,…,xN−1 , oceń C przy wszystkich wejściach szybciej niż O~(N⋅|C|) czas. Powodem jest to, że możemy dostosowaćC w obwód C′ wielkościowy |C|+O~(Nn) który na wejściu 0i10N−1−i , wyjścia C(xi) . Zasadniczo tworzymy małą tabelę odnośników, która wysyła0i10N−1−i do xi i podłącz go C .
Nietrywialne algorytmy oceny partii obwodów boolowskich mogą być następnie wykorzystane do stworzenia szybkich algorytmów satysfakcji. Oto przykład w prostym przypadku, w którym przypuszczamy, że mamy algorytm dokonujący oceny na czasO~(|C|2−ϵ+(N⋅|C|)1−ϵ/2+N2−ϵ) dla dowolnej stałej ϵ>0 . Na wejściu obwoduC , możemy zadecydować o satysfakcji poprzez rozszerzenie C w obwód C′ wielkościowy 2n/2⋅|C| który jest po prostu OR dla wszystkich możliwych wyborów pierwszego n/2 dane wejściowe do C (pozostawiając inne wejścia wolne). Następnie oceniamy partięC′ na wszystkich jego 2n/2 wejścia. W rezultacie znajdujemy satysfakcjonujące zadanieC′ iff C jest zadowalający. Czas działania wynosiO~(2(n/2)(2−ϵ)⋅|C|2−ϵ)=O~(2n(1−ϵ/2)⋅poly(|C|)) .
źródło