Angenommen, ich habe eine boolesche Schaltung , die eine Funktion berechnet . Angenommen, die Schaltung besteht aus UND-, ODER- und NICHT-Gattern mit höchstens Fan-In und Fan-Out 2.f : { 0 , 1 } n → { 0 , 1 }
Sei eine gegebene Eingabe. Wenn und , möchte ich an den Eingängen auswerten , die sich von in einer einzelnen Bitposition unterscheiden, dh um die Werte zu berechnen wobei dasselbe ist wie außer dass sein tes Bit umgedreht wird. C x C n x n C ( x 1 ) , C ( x 2 ) , … , C ( x n ) x i x i
Gibt es eine effizientere Möglichkeit, als mal an den verschiedenen Eingängen unabhängig auszuwerten ?n n
Angenommen, enthält Tore. Die unabhängige Auswertung von an allen Eingängen dauert dann . Gibt es eine Möglichkeit, in Zeit zu berechnen ?m C n O ( m n ) C ( x 1 ) , C ( x 2 ) , … , C ( x n ) o ( m n )
Optionaler Kontext: Wenn wir eine arithmetische Schaltung (deren Gatter Multiplikation, Addition und Negation sind) über , wäre es möglich, die n Richtungsableitungen ∂ f zu berechneninZeit. Grundsätzlich könnten wir Standardmethoden zur Berechnung des Gradienten (Rückausbreitung / Kettenregel) in. Das funktioniert, weil die entsprechende Funktion stetig und differenzierbar ist. Ich frage mich, ob etwas Ähnliches für boolesche Schaltungen getan werden kann. Boolesche Schaltkreise sind nicht kontinuierlich und differenzierbar, daher können Sie nicht denselben Trick ausführen, aber vielleicht gibt es eine andere clevere Technik, die Sie verwenden können? Vielleicht eine Art Fourier-Trick oder so?
(Variantenfrage: Wenn wir boolesche Gates mit unbegrenztem Fan-In und begrenztem Fan-Out haben, können Sie dies asymptotisch besser machen als die Bewertung von n -Zeiten?)