Voici un algorithme qui bat les tentatives triviales.
Ce qui suit est un fait connu (exercice 1.12 dans le livre d'O'Donnell): Si est une fonction booléenne dont le degré est un polynôme, alors tout coefficient de Fourier de , est un multiple entier de . En utilisant Cauchy-Schwarz et Parseval, on obtient qu'il y a au plus coefficients de Fourier non nuls et .F: { - 1 , 1 }n→ { - 1,1}≤ dFf ( S ) 2 - d 4 d Σ S | F ( S ) | ≤ 2 joursF^( S)2- d4ré∑S| F^( S) | ≤ 2ré
Cela suggère une méthode d'échantillonnage -
- Choisissez des entiers non négatifs aléatoires uneS pour tous les ensembles S⊆[n] de taille au plus ré , qui totalisent ≤ 4ré .
- Soit F( x ) = ∑SuneS2réχS( x ).
- Vérifiez que F est booléen. Si oui, retournez F . Sinon, revenez à 1 .
Notez que pour chaque degré ≤ d polynôme F exactement un choix d'entiers aléatoires à l'étape 1 générera le polynôme F . La probabilité d'obtenir un polynôme de degré ≤ d spécifique est de
1 / ( ( n≤ d) +4ré4ré) =1/O(n/d)ré4ré.
Par conséquent, nous devons répéter ce processus au plusO ( n / d)ré4réfois, dans l'attente, avant de nous arrêter.
Reste à montrer comment réaliser l'étape 3. On peut définir A = ⋃ { S: unS≠ 0 } . Vérifiez que | A | ≤d2ré (qui doit contenir par Nisan-Szegedy pour chaque fonction booléenne), puis d' évaluer F sur toutes les affectations possibles des variables UNE . Cela peut se faire dans le temps 2ré2ré . Gur et Tamuz offrent un algorithme randomisé beaucoup plus rapide pour cette tâche, mais comme cette partie ne domine pas la complexité temporelle, cela suffit.
Globalement, l'algorithme produit un échantillon aléatoire d'un polynôme de degré ≤ d dans le temps O(nd)d4d. Dans l'hypothèse oùn≤d2dla complexité temporelle est de2O(d24d).
Cela ne veut pas un algorithme d' échantillonnage en temps polynomial, bien qu'il soit beaucoup plus rapide que l' échantillonnage d' une fonction complètement aléatoire (dans ce cas , la probabilité d'obtenir un degré spécifique ≤d polynôme est 1/22n ).