Вот алгоритм, который побеждает тривиальные попытки.
Следующее является известным фактом (упражнение 1.12 в книге О'Доннелла): если f:{−1,1}n→{−1,1} - булева функция, у которой степень ≤d является полиномом, то каждый коэффициент Фурье из f , F ( S ) представляет собой целое число , кратное 2 - d . Используя Коши-Шварца и Парсеваля, получаем, что существует не более 4 d ненулевых коэффициентов Фурье и ∑ S | f^(S)2−d4d∑S|f^(S)|≤2d.
Это предполагает метод выборки -
- Выберите случайные неотрицательные целые числа aS для всех множеств S⊆ [ п ] размера не более d , сумма которых до ≤ 4d .
- Пусть f(x)=∑SaS2dχS(x).
- Убедитесь, что f логическое. Если так, верните f . Иначе вернитесь к 1 .
Обратите внимание, что для каждой степени ≤d полинома f точно один выбор случайных целых чисел на шаге 1 сгенерирует полином f . Вероятность получения определенной степени ≤d полинома равна
1/((n≤d)+4d4d)=1/O(n/d)d4d.
Следовательно, нам нужно повторить этот процесс самое большееO(n/d)d4dраз, в ожидании, прежде чем остановиться.
Осталось показать, как выполнить шаг 3. Можно определить A=⋃{S:aS≠0} . Проверьте это |A|≤d2d (который следует проводить с помощью нисан-Szegedy для каждой булевой функции) , а затем оценить f на все возможные присвоения переменных в A . Это можно сделать вовремя 2d2d . Гур и Тамуз предлагают гораздо более быстрый рандомизированный алгоритм для этой задачи, однако, поскольку эта часть не доминирует во временной сложности, этого достаточно.
В целом алгоритм выдает случайную выборку степени ≤d полинома во времени O(nd)d4d. В предположении, чтоn≤d2dвременная сложность составляет2O(d24d).
Это не полиномиальное время выборки алгоритма, хотя он гораздо быстрее , чем выборка совершенно случайная функции (в этом случае вероятность получения степени специфического ≤d полином 1/22n ).