Berikut adalah algoritma yang mengalahkan upaya sepele.
Berikut ini adalah fakta yang diketahui (Latihan 1.12 dalam buku O'Donnell): Jika f:{−1,1}n→{−1,1} adalah fungsi Boolean yang memiliki derajat ≤d sebagai polinomial, maka setiap koefisien Fourier dari f , f ( S ) merupakan kelipatan bilangan bulat dari 2 - d . Menggunakan Cauchy-Schwarz dan Parseval mendapatkan bahwa ada paling banyak 4 d koefisien Fourier bukan nol dan ∑ S | ˆf^(S)2−d4d∑S|f^(S)|≤2d.
Ini menyarankan metode pengambilan sampel -
- Pilih bilangan bulat non-negatif acak aS untuk semua set S⊆[n] dari ukuran paling d , yang jumlah sampai dengan ≤4d .
- Biarkan f(x)=∑SaS2dχS(x).
- Verifikasi bahwa f adalah Boolean. Jika demikian, kembalikan f . Lain, kembali ke 1 .
Perhatikan bahwa untuk setiap derajat ≤d polinomial f tepat satu pilihan bilangan bulat acak pada Langkah 1 akan menghasilkan polinomial f . Probabilitas untuk mendapatkan derajat spesifik ≤d polinomial adalah
1/((n≤d)+4d4d)=1/O(n/d)d4d.
Oleh karena itu, kita perlu mengulangi proses ini paling banyakO(n/d)d4dkali, dengan harapan, sebelum berhenti.
Tetap menunjukkan bagaimana melakukan langkah 3. Seseorang dapat mendefinisikan A=⋃{S:aS≠0} . Periksa itu |A|≤d2d (yang harus dipegang oleh Nisan-Szegedy untuk setiap fungsi Boolean) dan kemudian mengevaluasi f pada semua tugas mungkin untuk variabel dalam A . Ini dapat dilakukan dalam waktu 2d2d . Gur dan Tamuz menawarkan algoritma acak yang jauh lebih cepat untuk tugas ini, namun karena bagian ini tidak mendominasi kompleksitas waktu, ini sudah cukup.
Secara keseluruhan, algoritma menghasilkan sampel acak dengan derajat polinomial ≤d dalam waktu O(nd)d4d. Dengan asumsi bahwan≤d2dkompleksitas waktu adalah2O(d24d).
Ini bukan waktu polinomial sampel algoritma, meskipun jauh lebih cepat kemudian sampling fungsi-benar acak (dalam hal probabilitas mendapatkan gelar tertentu ≤d polinomial adalah 1/22n ).