MakarovSuites
Русский
EnglishDeutschРусскийУкраїнськаFrançaisEspañolItalianoPolski
Связь и лицензии

Math

Один вопрос, заданный однажды

Чёрный ящик считает функцию f из n битов в один бит, и спрашивать его можно только про входы. Чтобы наверняка узнать, постоянна она или сбалансирована, классически нужно полтаблицы плюс один вызов. Адамар на все, ОДИН вызов с ответом в виде знака, снова Адамар — и исход «все нули» решает дело. Таблица истинности здесь кликается, так что обещание можно нарушить руками: для любой таблицы ответ выпадает с вероятностью (1 − 2k/N)². А если таблица оказалась f(x) = s·x, тот же один вызов возвращает саму строку s.

Один вопрос, заданный однажды — Изображение из программы
Изображение из программы

Что происходит

Чёрный ящик считает какую-то функцию f из n битов в один бит. Обещано, что она либо постоянна, либо сбалансирована — один и тот же ответ везде, или один ответ ровно на половине входов, — и надо сказать, что именно. Классически обхода нет: половина таблицы может совпадать, а следующая запись всё испортит, поэтому уверенность стоит N/2 + 1 вызовов. Девять при шестнадцати входах, тридцать три при шестидесяти четырёх. Теперь квантовый вариант, и он в три строки. Адамар на каждый кубит — все N входов спрошены разом. Вызов оракула, который отвечает не битом, а ЗНАКОМ: ставит минус на каждый вход, где f равна единице. Снова Адамар на каждый кубит. Измерить. Если все кубиты прочитались нулями — функция была постоянной; что угодно другое означает сбалансированную, и всё это заняло один вызов. Модуль больше, чем демонстрация, потому что таблица истинности сверху кликается. Нарушь обещание: переверни одну ячейку — и f не постоянна и не сбалансирована, а алгоритм не ломается, он ухудшается на величину, которую можно выписать. Для ЛЮБОЙ таблицы исход «все нули» имеет вероятность (1 − 2k/N)², где k — сколько в таблице единиц. Постоянная — это k = 0, и получается единица. Сбалансированная — k = N/2, и получается ровно ноль. Одна перевёрнутая ячейка при шестнадцати входах даёт 4/256, один прогон из шестидесяти четырёх, и панель называет это число прежде, чем ты станешь считать. Вот чего стоит обещание внутри алгоритма, в цифрах. Здесь прячется и второе. Когда таблица оказывается линейной — f(x) = s·x mod 2 для какой-то скрытой строки s, — те же три шага не просто отвечают «да» или «нет»: исходом становится сама s, с вероятностью единица, а у всех прочих исходов вероятность ровно ноль. Это Бернштейн — Вазирани, и классически она стоит n вызовов, по одному на бит s. Спроси один раз — прочти всю строку. Под обоими фактами одна формула: амплитуда исхода y — это преобразование Уолша — Адамара от (−1)^f, и модуль считает её второй раз прямо по таблице истинности, чтобы держать оба пути вместе.

Уравнения модуля
Уравнения
три шага:  H на каждом кубите;  один вызов оракула как знак, |x> -> (−1)^f(x) |x>;  снова H на каждом кубите
амплитуда исхода y:  (1/N) сумма по x от (−1)^(f(x) + x·y) - преобразование Уолша–Адамара от (−1)^f
P(все нули) = (1 − 2k/N)²  где k - число единиц в таблице истинности; ТОЧНО, для любой таблицы вообще
константа (k = 0 или N):  1;  сбалансированная (k = N/2):  0;  одна клетка сбалансированной таблицы перевёрнута:  4/N² = 1/64 при N = 16
классическая стоимость, чтобы быть УВЕРЕННЫМ:  N/2 + 1 вызовов (3, 5, 9, 17, 33 при n = 2…6) против 1
линейная таблица f(x) = s·x mod 2 (Бернстайн–Вазирани):  исход И ЕСТЬ s, вероятность 1, любой другой исход ровно 0;  классическая стоимость n вызовов, по одному на бит
f = 1 везде даёт в точности те же вероятности, что и f = 0 везде - разница в глобальном знаке, а глобальный знак не измеряется
подсчитано, 2000 запусков при n = 4:  константа 2000 из 2000 на всех нулях;  скрытое s = 11, 2000 из 2000 на 11;  сбалансированная 0 на всех нулях;  одна клетка перевёрнута 30 (точно 31.25)

Другие эксперименты

К каталогу
Коды исправления ошибок — Изображение из программы

Math

Коды исправления ошибок

Внесите X, Z или Y на объёмной плате, прочитайте синдром и раскройте исправление. Сравните остаточный логический оператор и верность входного состояния, затем проверьте точную вероятность серией прогонов.

Алгоритм Евклида и цепные дроби — Изображение из программы

Math

Алгоритм Евклида и цепные дроби

На столе из дерева и латуни видно, почему НОД(a,b)=НОД(b,r). Переносите остаток, изучайте точные коэффициенты Безу и цепную дробь, сравнивайте пары и воспроизводимые выборки.

Часы по модулю — Изображение из программы

Math

Часы по модулю

Циферблат из m делений и одна стрелка. Сложение рисует звезду, замыкающуюся за m/НОД(s, m) ходов; умножение — цикл, длина которого делит φ(m). У некоторых модулей первообразных корней нет вовсе, и карточка это говорит: такова теорема, а не неудача поиска.