Однокубитное преобразование вектора-состояния: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Строка 47: Строка 47:
  
 
=== Описание схемы реализации последовательного алгоритма ===
 
=== Описание схемы реализации последовательного алгоритма ===
 
+
Для индекса <math>i</math> от <math>0</math> до <math>2^n-1</math>
 
+
#Вычислить элемент <math>i_k</math> двоичного представления индекса <math>i.</math>
 +
#Вычислить индексы <math>j</math> имеющие двоичные представления <math>i_1i_2\ldots \overline{i_k} \ldots i_n,</math> где крышка означает обращение бита.
 +
#Вычислить <math>w_i = u_{i_k i_k}\cdot v_{i} + u_{i_k \overline{i_k}}\cdot v_j.</math>
  
 
=== Информационный граф ===
 
=== Информационный граф ===

Версия 21:42, 3 декабря 2014


1 Описание свойств и структуры алгоритма

1.1 Общее описание алгоритма

Алгоритм производит моделирование действия однокубитного квантового вентиля на вектор-состояние.


1.2 Математическое описание

Исходные данные:

Целочисленные параметры n - число кубитов (необязательно) и k - номер кубита, над которым производится преобразование.

Комплексная матрица U = \begin{pmatrix} u_{00} & u_{01}\\ u_{10} & u_{11} \end{pmatrix} однокубитного преобразования размера 2 \times 2.

Комплексный вектор v размерности 2^n, задающей начальное состояние многокубитной системы.


Вычисляемые данные: комплексный вектор w размерности 2^n, соответствующий состоянию после преобразования.


Формулы метода:

Состояние после действия преобразования U на k-й кубит имеет вид v_{out} = I_{2^{k-1}}\otimes U \otimes I_{2^{n-k}}, где I_{j} - единичная матрица размерности j, а \otimes - тензорное произведение (произведение Кронекера).

Однако, элементы итогового вектора можно записать и в прямом виде, что более удобно для вычислений:

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}

Индекс-кортеж i_1i_2\ldots i_n представляет собой двоичную запись индекса элемента в массиве.


1.3 Вычислительное ядро алгоритма

Вычислительное ядро алгоритма представляет собой независимое вычисление всех 2^n элементов вектора w. Вычисление каждого элемента требует две операции умножения и одну операцию сложения. Кроме того необходимо вычислять индексы типа i_1i_2\ldots 0_k \ldots i_n, а также значение бита i_k, что требует побитовых операций.

1.4 Макроструктура алгоритма

Как записано и в описании ядра алгоритма, основную часть метода составляют независимые вычсиления элементов выходного вектора.

1.5 Описание схемы реализации последовательного алгоритма

Для индекса i от 0 до 2^n-1

  1. Вычислить элемент i_k двоичного представления индекса i.
  2. Вычислить индексы j имеющие двоичные представления i_1i_2\ldots \overline{i_k} \ldots i_n, где крышка означает обращение бита.
  3. Вычислить w_i = u_{i_k i_k}\cdot v_{i} + u_{i_k \overline{i_k}}\cdot v_j.

1.6 Информационный граф

1.7 Описание ресурса параллелизма алгоритма

1.8 Описание входных и выходных данных

1.9 Свойства алгоритма

2 Программная реализация

2.1 Особенности реализации последовательного алгоритма

2.2 Описание локальности данных и вычислений

2.2.1 Описание локальности алгоритма

2.2.2 Описание локальности реализации алгоритма

2.2.2.1 Описание структуры обращений в память и качественная оценка локальности

3 Литература