КДПВ
КДПВ

Алгориитм Шора — квантовый алгоритм факторизации (разложения числа на простые множители), позволяющий разложить число M за время O((logM)^3) используя O(log M) логических кубитов.

Алгоритм Шора был разработан Питером Шором в 1994 году. Семь лет спустя, в 2001 году, его работоспособность была продемонстрирована группой специалистов IBM. Число 15 было разложено на множители 3 и 5 при помощи квантового компьютера с 7 кубитами.

Алгоритм Шора состоит из 2-х частей - квантовых и классических вычислений.

  • Квантовая часть алгоритма отвечает за определение периода функции с помощью квантовых вычислений.

  • Классические вычисления решают задачу как по найденному периоду степенной функции найти разложение на сомножители.

Алгоритм Шора. Квантовая часть
Алгоритм Шора. Квантовая часть

Практически, схема этого алгоритма полностью повторяет схему алгоритма Саймона, с отличием в последнем шаге - вместо применения оператора Адамара перед измерением входного регистра, используется оператор преобразования Фурье.

А какие есть ещё варианты определить период функции используя квантовые вычисления?

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

а так же начал повторять эту технологию при квантовых вычислениях

Так почему бы не повторить успешный успех и, заодно, обобщить теорию вопроса?

Начнём ...

Пусть у нас есть функция f: {0,1}^n to {0,1}^m.
Очевидно, что мы можем её так же записать, и как f: {0,1}^n to Z и как f: {0,1}^n to [0,1) без потери общности рассуждений (то есть {0,1}^m можно рассматривать и как двоичное представление целого числа, и как рациональную дробь полученную делением целого числа на 2^m)

Вычисление скалярного произведения через инверсию и свёрку

Пусть у нас есть кольцо с операцией op и пара функций a и b, отображающих кольцо в поле, например комплексных чисел

Операцией свёрки a и b мы будем называть функцию c = a x b, такую что c(i) = SUM a(ix)b(iy)|i=ix op iy

Пусть у нас есть кольцо с операцией op и функция f, отображающих кольцо в поле, например комплексных чисел (но здесь, если вы заметите, я использую только отображение в действительные числа)

Операцией инверсией аргумента назовём функцию inv f , такую что (inv f)(i) = f( -i ), где i op -i == 0

Скалярным произведением a и b называют (a,b) = SUM a(i)b(i) (=(a,b)(0) где (a,b)(i) = SUM a(ix)b(iy)|i=ix-iy)

Легко убедиться самостоятельно, что (a,b) = a x (inv b)

Пусть для регистров кубитов a и b

  • a = SUM A(i)|i>

  • b = SUM B(i)|i>

Тогда, если op:

  • xor: (a,b)(i) = a xor X(b) = SUM A(ix)B(iy)|i>|i=ix xor ~iy

  • add: (a,b)(i) = a sub b = a add X(b) add |1> = SUM A(ix)B(iy)|i>|i=ix-iy

Что даёт нам вычисление функции-скалярного произведения a и b?

Ответ - если A(i)~=B(i op k) для всех i и распределения отличны от тривиальных, то значение (a,b)(k) является максимальным (по модулю) среди других значений этой функции
А значит, если мы имеем пару регистров кубитов, содержащих частотные характеристики двух последовательностей, то

  1. вычисление свёртки этих двух регистров,

  2. измерение результата,

  3. даст нам наиболее вероятное значение |k>

И, соответственно, если мы работаем с одной функцией, и F(i)~=F(i (op k)^j), то

  1. вычисление свёртки функции самой с собой

  2. измерение результата

  3. с большой вероятностью даст нам значение 0 (op k)^j - то есть один из периодов функции

И как это применить?

Предположим, что мы можем сформировать состояние квантового регистра по правилу SUM SQRT(f(x))|x> (что, собственно, предполагает и алгоритм Шора).

Тогда, применив вышеизложенные рассуждения по свёртке функции f самой с собой, мы получим значения - кандидатуры на период функции f.

Таким образом, мы получили ещё один из вариантов для квантовой части алгоритма Шора - то есть алгоритм поиска периода функции, со своим бэк-джеком и шл... и без использования Фурье-трансформаций.

А как выглядит трансформация для вычисления свёртки?

Да весьма просто - это либо реализация операции арифметического вычитания в кольце 2^n, но реализованная на регистрах из кубитов, либо операция исключающего или над векторами длины n, реализованная на регистрах кубитов.

Схема алгоритма поиска периода с использованием свёртки
Схема алгоритма поиска периода с использованием свёртки

или другой вариант тех же рассуждений

Схема алгоритма поиска периода с использованием свёртки
Схема алгоритма поиска периода с использованием свёртки

где Uf отвечает за перераспределение вероятностей в соответствии со значениями функции f

В чём квантовое превосходство по сравнению с классическими вычислениями?

Если функция f (или пара функций) задана на множестве мощности N (обычно N=2^n) то при вычислении свёртки "в лоб" требуется O(N^2) операций, но благодаря "быстрым преобразованиям" таким, как БФП, преобразования Адамара и так далее, вычисление свёртки удаётся реализовать за O(NlogN) операций. При этом алгоритм обычно выглядит следующим образом:

  1. Применяем "прямое быстрое преобразование" к функции (паре функций)

  2. Поэлементно умножаем элементы (второй множитель берётся сопряжённым)

  3. Выполняется "обратное быстрое преобразование" от полученного произведения

При использовании квантовых вычислений - вычисление свёртки происходит за один "шаг" то есть за одну не сложную трансформацию.

Вот и всё ...

И бонусом - как реализовать SUM SQRT(f(x))|x>, используя базисные гейты?

Если погуглить, то можно найти разные способы решения этой задачи, например Decomposing unitary matrix into Q# quantum gates.

Но мы не ищем лёгких путей!!!

Например, ранее я писал статью, как задать требуемое состояние в кубите, а эту технику легко адаптировать к нашей задаче - задать состояние регистра кубитов равным значениям исследуемой функции.

И таки да - мы не занимаемся экономией кубитов - в данных рассуждениях потребовалось ещё (m+1)2^n дополнительных кубитов, только для того, чтобы задать коэффициенты с нужным значением вероятности у регистра из n кубитов (но и сам алгорим Шора не отвечает на вопрос как задать требуемое состояние регистра кубитов).

Ссылки

Ранее

Комментарии (23)


  1. dprotopopov Автор
    10.11.2023 08:31
    -3

    Думаю пора выпиливаться с хабра ... скучно тут у вас ...


    1. Travisw
      10.11.2023 08:31

      хоть бы объяснил что такое период функции и как он находится, математическими значками естественно


      1. dprotopopov Автор
        10.11.2023 08:31

        Вроде, как обычно - подразумевается, что f(x+p)=f(x) - так и у Шора.

        Естественно на "зацикленность" особо внимания не обращают - то есть полагают 0 < p << 2^n

        А для взлома RSA полагают f(x)=a^x mod N для случайного a и после нахождения периода в дело вступает классический алгоритм, который выполнит факторизацию. И вероятность успеха этой цепочки вычислений ~1/2. То есть 10 попыток дадут вероятность угадывания 99.99% - чище чистого золота.


        1. AndrChm
          10.11.2023 08:31

          То есть 10 попыток дадут вероятность угадывания 99.99% - чище чистого золота.

          Вы бы хоть что-нибудь почитали про вероятность, что-ли. Например, можно Джозефа Мазура «Игра случая» для начала, вполне популярно и доходчиво. Про слабый закон больших чисел и теорему Бернулли. А то как-то совсем уж…


  1. tumbler
    10.11.2023 08:31
    +1

    В 2004-м проходили его на курсе квантовой физики. Неужели с тех пор ничего поновее и поинтереснее не придумали?


    1. dprotopopov Автор
      10.11.2023 08:31

      а чем мой вариант не устраивает?


    1. dprotopopov Автор
      10.11.2023 08:31

      Нескромный вопрос - где был курс?

      В каком полку служили?
      В каком полку служили?


  1. quverty
    10.11.2023 08:31

    Вычисление свертки за один шаг часто приводят как аргумент в пользу оптических вычислений. Однако, в квантовых вычислениях очень много информации может теряться в процессе измерения состояния регистра, так что там надо и это учитывать, чтобы оставалось какое-то преимущество.


    1. dprotopopov Автор
      10.11.2023 08:31

      повторенье - мать учения

      в квантовых вычислениях всё носит вероятностный характер ... ну а в жизни, что имеет вероятность 99.99% мы считаем абсолютной истинной (даже в быту)


      1. quverty
        10.11.2023 08:31

        Откуда 99.99% ? По той же квантовой обработке образов есть разные работы. Можно посмотреть. Вероятности зависят от набора данных и не обязаны быть близкими к единице.


        1. dprotopopov Автор
          10.11.2023 08:31

          https://pikabu.ru/story/kogda_stoit_puskat_2_raketyi_pvo_9032985

          Для начала 2 факта, о которых возможно многие не подозревали:
          1. Зенитная ракета часто промахивается
          И это норма, поэтому у них и стоят осколочные и осколочно стержневые бч, способные и на расстоянии 20м поразить цель.
          2. Вероятность поражения цели около 0.6
          В принципе вытекает из первого. Да, у ракеты есть промах, а еще (удивительно) цель не хочет чтобы в неё попали, поэтому всячески маневрирует и стреляет ловушками тепловыми.

          Ну и теперь, когда вы готовы представляю скромную табличку, где на основании имитационной мат. модели, (основанной на 19 дифф. уравнениях и методе Рунге-Кутты 4го порядка с запаздыванием) я собственно и рассматривал разные схемы/тактики пуска.

          Сложные слова выше можно не читать, просто обратите внимание на сколько повышается вероятность поражения при пуске двух ракет.

          Когда стоит пускать 2 ракеты ПВО? Оружие, Ракета, Наука, Математика, Инженер, Видео, Вертикальное видео
          Когда стоит пускать 2 ракеты ПВО? Оружие, Ракета, Наука, Математика, Инженер, Видео, Вертикальное видео

          Да, многое зависит от самой ракеты и тут весьма специфические данные для специфической ракеты, о которой мы говорить не будем :)


          1. quverty
            10.11.2023 08:31
            +1

            Темой были квантовые вычисления, а не зенитные ракеты. В квантовых вычислениях из-за линейности квантовой механики формулы достаточно простые - вероятность неудачи возводится в степень количества попыток. Вероятность успеха - единица минус вероятность неудачи. Если она не очень большая, то её приближённо можно просто умножать на количество попыток.


            1. dprotopopov Автор
              10.11.2023 08:31

              Да ... вы сами ответили на свой вопрос


              1. quverty
                10.11.2023 08:31
                -1

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


                1. dprotopopov Автор
                  10.11.2023 08:31

                  Вас никто не заставляет городить вавилонскую башню из кучи последовательных трансформаций, чтобы в итоге получить нулевую вероятность успеха, которую уже многократными попытками не вытянешь ... неужели так трудно делать расчёты "по-шагам"?


                  1. quverty
                    10.11.2023 08:31

                    Вы уже писали о вавилонской башне, но мне не очень понятно что имеется в виду. На всякий случай повторю, что квантовые вычисления линейны и требование учитывать предыдущие шаги по моему опыту может быть действительно трудным. Не могу сказать что невозможным, так что желаю успехов.


  1. AndrChm
    10.11.2023 08:31

    сокращений с использованием операции вычисления скалярного произведения, которую я делал с помощью свёртки на основе БФП.

    Что такое БФП? Рискну предположить, что это БПФ, а именно Быстрое Преобразование Фурье. Специалисты используют такой акроним. Иными словами, эффективный способ вычисления дискретного преобразования Фурье (с полиномиальной трудоёмкостью). Будем считать, что это описка. Поясните в противном случае.


    1. dprotopopov Автор
      10.11.2023 08:31

      Быстрое  Фурье Преобразование (с точность до перестановки) . по-англицки: Fast Fourier Transfer

      И у специалистов оно идёт под FFT


      1. AndrChm
        10.11.2023 08:31

        https://ru.wikipedia.org/wiki/Быстрое_преобразование_Фурье

        Вы же пишете по-русски, а не по-английски…

        Операцией свёрки a и b мы будем называть функцию c = a x b, такую что c(i) = SUB a(ix)b(iy)|i=ix op iy

        А что такое SUB? Наверное SUM? Может лучше в LaTex формулы делать, что бы было как у человеков принято?


        1. dprotopopov Автор
          10.11.2023 08:31

          Спасибо, поправил

          Так может это не для человеков? ;)


  1. AndrChm
    10.11.2023 08:31

    Можно много вопросов задать по-поводу этого текста. Но в какой-то момент начинаешь понимать, что это шутка такая…


    1. dprotopopov Автор
      10.11.2023 08:31

      Ага ... и которая, на удивление, работает, и работает отлично ...


      1. AndrChm
        10.11.2023 08:31

        Ага… И как работает? Где работает? Почему работает? И что значит отлично? Это всё слова. Нет никакого внятного объяснения. Вы вводите какие-то странные обозначения, которые можно по-разному истолковывать. Да и тематика довольно затасканная сама по себе. На мой взгляд, это всё выглядит как очередной «Корчеватель». Возможно над текстом ещё и AI поработал. Уж больно характерные языковые ошибки просматриваются, начиная с грамматики и пунктуации, и заканчивая стилистикой. Более того, публикации такого рода вполне возможны, — ведь на Хабр отсутствует рецензирование.

        В общем, всё что тут публикуется надо тщательно фильтровать.