Ось алгоритм, який б’є тривіальні спроби.
Наступний відомий факт (вправа 1.12 у книзі О'Доннелла): Якщо - булева функція, яка має ступінь як поліном, тоді кожен коефіцієнт Фур'є , - ціле число, кратне . За допомогою Коші-Шварца та Парсевала виходить, що існує не більше ненульових коефіцієнтів Фур'є та .f:{−1,1}n→{−1,1}≤dfF ( S ) 2 - d 4 d Σ S | Е ( S ) | ≤ 2 дf^(S)2−d4d∑S|f^(S)|≤2d
Це пропонує метод вибірки -
- Виберіть випадковий невід'ємні цілі числа для всіх множин розміру не більше , сума яких до .aSS⊆[n]d≤4d
- Нехай .f(x)=∑SaS2dχS(x)
- Перевірте, що булеве. Якщо так, поверніть . Інше, поверніться до .ff1
Зауважимо, що для кожного ступеня многочлена точно один вибір випадкових цілих чисел на етапі 1 генерує поліном . Імовірність отримання певного многочлена ступеня дорівнює
Отже, нам потрібно повторити цей процес максимум разів, сподіваючись, перед тим, як зупинити.≤dff≤d1/((n≤d)+4d4d)=1/O(n/d)d4d.
O(n/d)d4d
Залишилося показати, як виконати крок 3. Можна визначити . Перевірте, що (який слід проводити з допомогою нісан-Szegedy для кожної булевої функції) , а потім оцінити на всі можливі присвоєння змінних в . Це можна зробити в часі . Гур і Тамуз пропонують набагато швидший рандомізований алгоритм для виконання цього завдання, однак, оскільки ця частина не домінує у часовій складності, цього достатньо.A=⋃{S:aS≠0}|A|≤d2dfA2d2d
В цілому алгоритм виробляє випадкову вибірку многочлена градуса у часі . За припущенням, що часова складність дорівнює .≤dO(nd)d4dn≤d2d2O(d24d)
Це не алгоритм відбору поліноміального часу, хоча він набагато швидший, ніж вибіркове цілком випадкова функція (у цьому випадку ймовірність отримання певного ступеня полінома дорівнює ).≤d1/22n