Однокубитное преобразование вектора-состояния: различия между версиями
| [непроверенная версия] | [непроверенная версия] |
Нет описания правки |
|||
| Строка 3: | Строка 3: | ||
| serial_complexity = <math>3 \cdot 2^n</math> | | serial_complexity = <math>3 \cdot 2^n</math> | ||
| pf_height = <math>2</math> | | pf_height = <math>2</math> | ||
| pf_width = <math>2^n</math> | | pf_width = <math>2^{n+1}</math> | ||
| input_data = <math>2^n</math> | | input_data = <math>2^n+4</math> | ||
| output_data = <math>2^n</math> | | output_data = <math>2^n</math> | ||
}} | }} | ||
Версия от 14:52, 26 августа 2015
| Однокубитное преобразование вектора-состояния | |
| Последовательный алгоритм | |
| Последовательная сложность | [math]\displaystyle{ 3 \cdot 2^n }[/math] |
| Объём входных данных | [math]\displaystyle{ 2^n+4 }[/math] |
| Объём выходных данных | [math]\displaystyle{ 2^n }[/math] |
| Параллельный алгоритм | |
| Высота ярусно-параллельной формы | [math]\displaystyle{ 2 }[/math] |
| Ширина ярусно-параллельной формы | [math]\displaystyle{ 2^{n+1} }[/math] |
Основные авторы описания: А.Ю.Чернявский
Свойства и структура алгоритма
Общее описание алгоритма
Алгоритм производит моделирование действия однокубитного квантового вентиля на вектор-состояние.
Математическое описание алгоритма
Исходные данные:
Целочисленные параметры [math]\displaystyle{ n - }[/math] число кубитов (необязательно) и [math]\displaystyle{ k - }[/math] номер кубита, над которым производится преобразование.
Комплексная матрица [math]\displaystyle{ U = \begin{pmatrix} u_{00} & u_{01}\\ u_{10} & u_{11} \end{pmatrix} }[/math] однокубитного преобразования размера [math]\displaystyle{ 2 \times 2. }[/math]
Комплексный вектор [math]\displaystyle{ v }[/math] размерности [math]\displaystyle{ 2^n, }[/math] задающей начальное состояние многокубитной системы.
Вычисляемые данные: комплексный вектор [math]\displaystyle{ w }[/math] размерности [math]\displaystyle{ 2^n, }[/math] соответствующий состоянию после преобразования.
Формулы метода:
Состояние после действия преобразования [math]\displaystyle{ U }[/math] на [math]\displaystyle{ k- }[/math]й кубит имеет вид [math]\displaystyle{ v_{out} = I_{2^{k-1}}\otimes U \otimes I_{2^{n-k}}, }[/math] где [math]\displaystyle{ I_{j} - }[/math] единичная матрица размерности [math]\displaystyle{ j, }[/math] а [math]\displaystyle{ \otimes - }[/math] тензорное произведение (произведение Кронекера).
Однако, элементы итогового вектора можно записать и в прямом виде, что более удобно для вычислений:
- [math]\displaystyle{ w_{i_1i_2\ldots i_k \ldots i_n} = \sum\limits_{j_k=0}^1 u_{i_k j} v_{i_1i_2\ldots j_k \ldots i_n} = u_{i_k 0} v_{i_1i_2\ldots 0_k \ldots i_n} + u_{i_k 1} v_{i_1i_2\ldots 1_k \ldots i_n} }[/math]
Индекс-кортеж [math]\displaystyle{ i_1i_2\ldots i_n }[/math] представляет собой двоичную запись индекса элемента в массиве.
Вычислительное ядро алгоритма
Вычислительное ядро алгоритма представляет собой независимое вычисление всех [math]\displaystyle{ 2^n }[/math] элементов вектора [math]\displaystyle{ w. }[/math] Вычисление каждого элемента требует две операции умножения и одну операцию сложения. Кроме того необходимо вычислять индексы типа [math]\displaystyle{ i_1i_2\ldots 0_k \ldots i_n, }[/math] а также значение бита [math]\displaystyle{ i_k, }[/math] что требует побитовых операций.
Макроструктура алгоритма
Как записано и в описании ядра алгоритма, основную часть метода составляют независимые вычсиления элементов выходного вектора.
Схема реализации последовательного алгоритма
Для индекса [math]\displaystyle{ i }[/math] от [math]\displaystyle{ 0 }[/math] до [math]\displaystyle{ 2^n-1 }[/math]
- Вычислить элемент [math]\displaystyle{ i_k }[/math] двоичного представления индекса [math]\displaystyle{ i. }[/math]
- Вычислить индексы [math]\displaystyle{ j }[/math] имеющие двоичные представления [math]\displaystyle{ i_1i_2\ldots \overline{i_k} \ldots i_n, }[/math] где крышка означает обращение бита.
- Вычислить [math]\displaystyle{ w_i = u_{i_k i_k}\cdot v_{i} + u_{i_k \overline{i_k}}\cdot v_j. }[/math]
Последовательная сложность алгоритма
Алгоритм требует:
- [math]\displaystyle{ 2^{n+1} }[/math] операций умножения комплексных чисел;
- [math]\displaystyle{ 2^n }[/math] операций сложения комплексных чисел;
- [math]\displaystyle{ 2^n }[/math] операций получения значения [math]\displaystyle{ k }[/math]-го бита числа;
- [math]\displaystyle{ 2^n }[/math] операций изменения значения [math]\displaystyle{ k }[/math]-го бита числа.
Отметим, что данный алгоритм обычно применяется много раз подряд, в связи с чем вычисления, связанные с побитовыми операциями (3-4), могут единожды проводиться в начале алгоритма. Кроме того, от них можно избавиться, пользуясь сложением и логическим умножением с числом [math]\displaystyle{ 2^k, }[/math] которое сохраняется для всего алгоритма.
Информационный граф
Представим рисунки графов алгоритма для случая [math]\displaystyle{ n=3, k=1 }[/math] (рис.1) и [math]\displaystyle{ k=2 }[/math] (рис.2). На графах не представлены матрицы преобразования [math]\displaystyle{ U, }[/math] в связи с тем, что их размер при больших [math]\displaystyle{ n }[/math] много меньше, нежели размеры входного и выходного векторов. Отметим, что структура графа (а именно обращение к входным данным) сильно зависит от параметра [math]\displaystyle{ k. }[/math]


Ресурс параллелизма алгоритма
Как видно из информационного графа, прямой алгоритм моделирования однокубитного преобразования обладает высочайшей степенью параллелизма. Все операции вычисления элементов нового вектора-состояния могут быть произведены параллельно. Для вычисления одного элемента необходимо выполнить две операции умножения и одну операцию сложения, операции умножения, в свою очередь, также могут быть выполнены параллельно. Таким образом, необходимо выполнение двух ярусов: одного, состоящего из [math]\displaystyle{ 2^{n+1} }[/math] умножений и другого, состоящего из [math]\displaystyle{ 2^n }[/math] сложений.
Входные и выходные данные алгоритма
Входные данные:
- Комплексный вектор состояния [math]\displaystyle{ u }[/math] длины [math]\displaystyle{ 2^n. }[/math] Обычно нормирован на единицу.
- Унитарная матрица [math]\displaystyle{ U }[/math] порядка [math]\displaystyle{ 2 }[/math].
- Номер кубита [math]\displaystyle{ q }[/math].
Выходные данные:
- Комплексный вектор состояния [math]\displaystyle{ w }[/math] длины [math]\displaystyle{ 2^n }[/math].
Объем входных данных: [math]\displaystyle{ 2^n+4 }[/math] комплексных чисел и [math]\displaystyle{ 1 }[/math] одно целое.
Объем выходных данных: [math]\displaystyle{ 2^n }[/math] комплексных чисел [math]\displaystyle{ 1. }[/math]