Aquí hay un algoritmo que supera los intentos triviales.
El siguiente es un hecho conocido (Ejercicio 1.12 en el libro de O'Donnell): Si f:{−1,1}n→{−1,1} es una función booleana que tiene un grado ≤d como polinomio, entonces cada coeficiente de Fourier de f , f ( S ) es un múltiplo entero de 2 - d . Usando Cauchy-Schwarz y Parseval se obtiene que hay como máximo 4 d coeficientes de Fourier distintos de cero y ∑ S | ˆf^(S)2−d4d∑S|f^(S)|≤2d.
Esto sugiere un método de muestreo:
- Elija enteros no negativos aleatorios aS para todos los conjuntos S⊆[n] de tamaño como máximo d , que suman ≤4d .
- Deje f(x)=∑SaS2dχS(x).
- Verifique que f sea booleana. Si es así, regrese f . De lo contrario, regrese a 1 .
Tenga en cuenta que por cada grado ≤d polinomio f exactamente una elección de enteros aleatorios en el Paso 1 generará el polinomio f . La probabilidad de obtener un grado específico ≤d polinomio es
Por lo tanto, necesitamos repetir este proceso como máximo veces, con expectativa, antes de detenerlo.1/((n≤d)+4d4d)=1/O(n/d)d4d.
O(n/d)d4d
Queda por mostrar cómo realizar el paso 3. Se puede definir . Compruebe que (que debe contener por Nisan-Szegedy para cada función booleana) y luego evaluar en todas las posibles asignaciones a las variables en . Esto se puede hacer a tiempo . Gur y Tamuz ofrecen un algoritmo aleatorio mucho más rápido para esta tarea, sin embargo, dado que esta parte no domina la complejidad del tiempo, es suficiente.A=⋃{S:aS≠0}|A|≤d2dfA2d2d
En general, el algoritmo produce una muestra aleatoria de un grado polinomio en el tiempo . Bajo el supuesto de que la complejidad del tiempo es .≤dO(nd)d4dn≤d2d2O(d24d)
Este no es un algoritmo de muestreo de tiempo polinómico, aunque es mucho más rápido que muestrear una función completamente aleatoria (en cuyo caso la probabilidad de obtener un grado específico polinomio es 1/2 ).≤d1/22n