Supposons que j'ai un circuit booléen qui calcule une fonction f : { 0 , 1 } n → { 0 , 1 } . Supposons que le circuit est composé de portes ET, OU et NON avec au plus fan-in et fan-out 2.
Soit une entrée donnée. Étant donné C et x , je veux évaluer C sur les n entrées qui diffèrent de x dans une position de bit unique, c'est-à-dire calculer les n valeurs C ( x 1 ) , C ( x 2 ) , … , C ( x n ) où x i est identique à x sauf que son ie bit est retourné.
Existe-t-il un moyen de le faire plus efficace qu'une évaluation indépendante de n fois sur les n différentes entrées?
Supposons que contient m portes. Ensuite, l'évaluation indépendante de C sur toutes les n entrées prendra du temps O ( m n ) . Existe-t-il un moyen de calculer C ( x 1 ) , C ( x 2 ) , … , C ( x n ) en temps o ( m n ) ?
Contexte optionnel: Si nous avions un circuit arithmétique (dont les portes sont la multiplication, l'addition et la négation) sur , alors il serait possible de calculer les n dérivées directionnelles ∂ fen tempsO(m). Fondamentalement, nous pourrions utiliser des méthodes standard pour le calcul du gradient (règle de rétropropagation / chaîne), en tempsO(m). Cela fonctionne parce que la fonction correspondante est continue et différenciable. Je me demande si quelque chose de similaire peut être fait pour les circuits booléens. Les circuits booléens ne sont pas continus et différenciables, vous ne pouvez donc pas faire la même astuce, mais peut-être existe-t-il une autre technique intelligente que l'on peut utiliser? Peut-être une sorte de truc de Fourier, ou quelque chose?
(Question variante: si nous avons des portes booléennes avec fan-in illimité et fan-out borné, pouvez-vous faire mieux asymptotiquement que d'évaluer n fois?)