Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Алгоритм Шора (1994) — по заданному целому числу N, найти его простые множители



В 2001 квантовый компьютер на 7 кубитах с помощью этого алгоритма смог разложить 15 на 3×5. (Наибольшее число, разложенное на квантовом устройстве = 56153 — 2014 год, но не Шором, а адиабатическое вычисление)

Алгоритм состоит из двух частей:

1. классическая часть - свести задачу к нахождению периода функции.

2. квантовая часть — найти период.

Классическая часть:

1. берём произвольное число a < N.

2. вычисляем НОД(a,N) (наибольший общий делитель). Например, с помощью алгоритма Эвклида — вычитаем из большего числа меньшее.

3. Если НОД(a,N)≠1, то нетривиальный множитель найден, конец.

4. В противном случае, с помощью квантового алгоритма, основанного на дискретном преобразовании Фурье, находим период функции , т. е. такое целое число r, что

5. если r нечётное, или a r/2≡ −1 (mod N) - возвращаемся к шагу 1.

6. НОД(ar/2+ 1, N) и НОД(ar/2- 1, N) — нетривиальные множители N. Конец.

 

Например: . , где

и

(Примечание: самый быстрый классический алгоритм решения этой задачи — квадратичное решето — основан на той же идее. Но медленнее, т. к. задача поиска порядка функции тяжело решается классическим компьютером)

 

Квантовая часть:

Квантовая цепочка создаётся каждый раз отдельно для каждого N, и каждого случайного выбора a.

Находим некоторое Q = 2q,такое что , что означает .

Вход и выход будут содержать суперпозиции состояний от 0 до Q − 1, поэтому состоят из q кубитов.

1. Создаём суперпозицию всех состояний — с помощью вентилей Адамара, или к. преобразования Фурье

2. Конструируем f(x) как к. функцию, и применяем к состоянию выше

(Шор использовал алгоритм быстрого возведения в степень, чтобы достичь этого. Это самый долгий шаг. Он заметно сложнее, чем QFT – нужно много вентилей. По сути, он имитирует классический обратимый алгоритм для этой задачи)

3. Применяем к. преобразование Фурье ко входу.

(Шор использовал для реализации QFT вентили фазового сдвига и вентили Адамара)

(Вентиль Адамара: переводит n кубитов, инициализированных в |0>, в суперпозицию всех 2nортогональных состояний в базисе (|0>,|1>) с равными весами)

QFTиспользует Qтый комплексный корень единицы: , чтобы равномерно распределить амплитуду любого данного состояния |x> между всеми Q для состояния |y> - и делать это по-разному для каждого |x>.

В результате приходим к состоянию , или если записать иначе:

Возьмём x0- наименьший x, что f(x) = z (x0<r), и b — индексирует эти x, пробегая от 0 до (Q- x0-1)/r, так что x0+rb<Q. Тогда получим:

Каждое слагаемое в этой сумме даёт разные пути к одной цели — и возникает к. интерференция: амплитуды состояний, для которых единичные векторы направлены практически в одну сторону (что значит что вектор направлен вдоль положительной вещественной оси), усиливаются; остальные ослабевают.

4. Производим измерение, и получаем y на входе, и z на выходе. Вероятность получить данные y и z тем выше, чем ближе к положительной вещественной оси, или чем ближе yr/Q к целому числу.

5. Т.к. yr/Q близко к некоторому целому c, то известное значение y/Q близко к неизвестному c/r. Осуществив (классически) непрерывную дробную последовательность, мы найдём такие аппроксимации d/s, что:

· s<N

· |y/Q - d/s| < 1/2Q.

Если d/s не упрощаемая дробь, то s — весьма вероятно наш искомый период r.

6. Проверяем (классически), что . Если да, то конец. Иначе, пробуем прогнать всю эту часть ещё раз.

 

Говоря просто, алгоритм Шора разбивает задачу на Q состояний, каждое из которых — один из возможных r – периодов функции. И затем, благодаря к. спутанности и интерференции, вычисление производится по всем путям одновременно (по сути, это аналог алгоритма к. оценки фазы: вследствие интерференции, амплитуды состояний вдоль перспективных путей стремительно растут, остальные стремительно падают). Отсюда к. выигрыш в скорости.

Также алгоритм Шора может использоваться для нахождения дискретного логарифма.

 

2) Алгоритм Гровера (Leo Grover, 1996) — найти х по заданному у, такой что f(x)=y. Это, по сути, алгоритм инвертирования функции — но он может быть и переформулирован как алгоритм поиска по базе данных (f(x) тогда будет функцией, возвращающей 1 для искомого х, и 0 для всех остальных). В общем виде, f(x) - это чёрный ящик, или оракул, как-то отвечающий на запрос «да» или «нет».

Алгоритм Гровера работает за время O(N1/2), где N – размер области определения f(x). Классический алгоритм не может решить этой проблемы за время меньше O(N). И доказано, что O(N1/2) — наименьшее возможное время для любого квантового алгоритма решения, т.е. алгоритм Гровера — оптимальный.

На практике, этот алгоритм тоже можно использовать для взлома 128-битного криптографического ключа - методом перебора за 264итераций. Т.е., алгоритм Гровера даёт не экспоненциальное ускорение, по сравнению с классическим (как другие квантовые алгоритмы, применимые в более специфических случаях) — а лишь квадратичное. Но и то неплохо.

Алгоритм — вероятностный, т. е. даёт правильный ответ с вероятностью <1. Но предполагается, что количество повторов, чтобы приблизить вероятность к 1 — это постоянная величина, и не зависит от N.

Описание:

Алгоритм работает на N-мерном пространстве состояний H - для которого надо n=log2 N кубитов. У нас есть унитарный оператор , который зеркально отражает вектор состояния относительно гиперплоскости, перпендикулярной ω.

Мы начинаем с состояния - равномерной суперпозиции всех возможных состояний величин x:

Тогда , Осуществляем «гроверовскую итерацию» r(N) раз ( ):

1. Применяем оператор .

2. Применяем оператор .

Осуществляем измерение, и получаем искомую ω с вероятностью, стремящейся к 1.

 

Геометрическое объяснение:

- кет, перпендикулярный :

 

Оператор - это, по сути, отражение вектора по отношению к . Оператор - это отражение по отношению к . Таким образом, каждая итерация алгоритма (т. е. применение оператора ) поворачивает его вектор состояния на угол .

Нам нужно остановиться, когда вектор состояния подойдёт достаточно близко к ; дальнейшие итерации будут удалять вектор состояния от , снижая вероятность правильного ответа. Вероятность измерения правильного ответа будет , где r — это количество гроверовских итераций.

Смысл GSA состоит в «подскоке амплитуды» (amplitude amplification) целевого состояния за счёт убывания амплитуды всех других состояний.

На практике, в 2012м, реализовали алгоритм Гровера для четырёх вариантов перебора.

 



 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.