Серия «Математика»
2011. Т. 4, № 4. С. 12-26
Онлайн-доступ к журналу: http://isu.ru/izvestia
УДК 519.673
Приближенный алгоритм вычисления сложности обратимой функции в базисе Тоффоли *
С. Ф. Винокуров, А. С. Францева
Восточно-Сибирская государственная академия образования Аннотация.
В работе исследуются вопросы нахождения сложности обратимой функции при представлении ее обратимой схемой. Разработаны и реализованы алгоритмы минимизации обратимых схем в базисе Тоффоли [5]; приведены оценки сложности обратимых функций.
Ключевые слова: обратимые функции, сложность, базис Тоффоли, параллельные алгоритмы
Интерес к обратимым вычислениям на сегодняшний день связан с минимизацией потери энергии при преобразовании информации в современных вычислительных устройствах. C другой стороны, обратимые вычисления являются существенной частью квантовых вычислений. Более подробно об этом можно посмотреть в [2].
В работе исследуется вопрос о нахождении сложности обратимой функции в схемном представлении. В статье даны представления обратимой функции в виде таблицы значений, перестановочной матрицы, перестановки и логической схемы. Условимся, что в дальнейшем изложении понятия обратимой функции, таблицы значений, перестановочной матрицы, перестановки и логической схемы, если не указано обратное, воспринимаются как синонимы.
В качестве базиса логических схем для реализации обратимых функций использован известный базис Тоффоли. Можно заметить, что некоторые его элементы реализованы аппаратно [4].
Понятие обратимой функции и ее представления
Булевой (п, к)-функцией / = (/1,..., /) будем называть отображение из множества {0,1}п в множество {0,1}^. Синоним для таких функций
— многовыходные булевы функции.
* Работа выполнена при финансовой поддержке РФФИ, проект 09-01-00476а.
Под обратимой функцией /(ж1,ж„) будем понимать такую булеву (п, п) функцию (/1(ж1,жп),...,/„(ж1,ж„)), что отображение
/ : {(а1,а„)} ^ {(Л(аьа„),/„(«1,а„))} (*)
является однозначным.
Представления обратимой функции.
1. Таблица значений. Пусть а обозначает некоторый двоичный набор (а1,...,а„), 0 = (0,..., 0) - нулевой набор, 1 = (1,..., 1) - единичный набор. Все наборы а лексикографически упорядочиваются и каждому набору а сопоставляется набор /а такой, что /а = (/1(а),..., /„(а)). Тогда получается следующая таблица значений обратимой функции /:
(аі,. . . ап) в(аі > ••ап )
(0,. .,0) (/і(0),.. . , /п(0))
(7l,.. ., 7п) .,/п(7))
(1,. .,1) (/і(1),.. .,/п(1))
2. Перестановка. Пусть набору а = (аі, ...,ап) соответствует число X = а1 ■ 2п-і + а2 ■ 2п-2 + . ..ап ■ 20. Тогда, согласно определению (*) обратимой функции, ее таблицу значений можно ассоциировать с перестановкой:
р/0 1 2 ...X... 2п - 1 ^ V І0 іі І2 ... Іх ... ¿2"-і
3. Перестановочная матрица. Индуктивно введем однозначное соответствие между двоичными наборами и бинарными векторами через следующее отображение р :
Р(0) = ( 0 ) ; Р(1) = ( 1
р(аі...ап-іап) = р(аі...ап-і) ® р(ап),
где ® - кронекерово произведение векторов [3].
Поскольку набор (аі...ап-іап) интерпретируется как бинарная запись числа, то, очевидно, р отображает этот набор в вектор длины 2п с единицей на месте с номером (аі...ап-іап) и нулями на остальных местах; нумерация начинается с 0.
0 1
0
0
Матрица М/ имет следующий вид. Строка М/ с номером а есть бинарный вектор, соответствующий набору ва Действие функции / на набор а соответствует умножению матрицы М/ на вектор ^(а).
4. Схемное представление обратимых функций.
Структурное описание схемы. Логическая схема Б, как объект, имеет п входов и п выходов, попарно соединенных между собой.
Пусть заданы имена X = {ж»} и У = {у»}, г € {1,...,п} и пусть входам логической схемы Б сопоставлены имена ж», а выходам - у».
Тривиальная логическая схема изображается следующим образом:
Ж1о--------о У1
ж2 о-------о у2
жп о-------о уп
Логическая схема Б содержит элементы двух типов.
1. Элементы Ж»:
ж 1 о О У1
жг о £ У 0 Уг
жп о О Уп
Здесь круг «помещается» на любой вход ж», где г € (1, 2,..., п}.
2. Элементы В?:
ж1 о 6 р О у 1
У
жп о (1 11 п У ^У Р ?
Причем, круги могут располагаться на любых входах, на один вход не более одного круга, «закрашенный» круг - только один.
Функционирование схемы. Пусть Т - класс обратимых функций, построенных следующим образом:
Тр(жг) : (жь ...,ж», ...,жп) ^ (Ж1, ...,Ж», ...,жп),
V* € (1,..., п}
ТП //у». /у». 'У*- 'У*! _I 'У* -1 'У* • ^у» • . ^у» • 'У* |
к+1(ж»1 ,...,жг^ ,ж? ) : (ж1,...,ж? ,...,жп) ~ (ж1,...,ж? шжгх ... жг^ ^..^п)
Й < п, {*1, ...,**; } С (1, ..., п}
V; € {1,...,п}, ; € {*1,..., *к}
Функции Т” класса Т представляют собой одноместные отрицания N, функции Т”,..., Т” называются функциями Тоффоли [1].
Класс обратимых функций Т является базисом для множества обратимых функций [6].
В дальнейшем условимся, там где необходимо, в изображениях логических схем опускать входы «незанятые» кругами. Функционирование логической схемы:
— тривиальная логическая схема реализует тождественную функцию
I : {а} ^ {а}, по всем наборам а;
— каждому элементу Ж» сопоставим функцию Тоффоли ТП(жг) так, что вход ж» преобразуется в выход у» = ж», а входы жг (1 = г), преобразуются в выходы уг = жг;
жг ° г , уг — жг
— каждому вентилю В? сопоставим функцию Тоффоли
ТТ+1(ж.1ж^ , ж?) так, что вход ж? преобразуется в выход у? (закрашенный круг)
<71 . — /у> . /у> . . . гр .
у? — ж? Ш жг1 ... ж££ ,
где ж»1, ...,ж^ обозначают те входы, на которые помещены незакрашенные круги; входы ж^ (1 = ;), преобразуются в выходы уг = жг. Ниже приведен пример логической схемы на 4 входах и выходах, содержащей элемент В1, которому соответствует функция Тоффоли Тз (жз, ж4, ж1) : (ж1,ж2,жз,ж4) ^ (ж1 ® жз ■ ж4,ж2,жз,ж4).
ж1 о--Щ----о у1 = ж1 ® жз ■ ж4
—о у2 = ж2
Ж2 о-
Жз О--------е-------о У3 = Х3
Ж 4 О--------©---------о У4 = Ж 4
В дальнейшем изложении, элементы N и В? будем называть элементами Тоффоли ТП.
Для удобства записи введем обозначение Ж = (жі,..., жга). Пусть даны две обратимые функции /(Ж) = (/і(Ж),..., /п(Ж)), д(Ж) = (ді(Ж),..., д„(Ж)). Тогда функция
Ь(Ж) = д(/(Ж)) = (ді(/і(Ж),...,/п(Ж)),...,дп(/і(Ж),...,/п (Ж)))
называется суперпозицией функций / и д.
Пусть дана схема 5! на п входах и выходах, содержащая один элемент Тоффоли ТП+і, (к — п — 1), и схема £2, также, на п входах и выходах, содержащая один элемент Тоффоли Тт+і, (т — п — 1). Тогда логическая схема £3 является результатом склейки схем £і и 52, если выходы уі,...,уп схемы £і являются входами Жі,...,Жп схемы £2, причем Жі = у по всем і є {1, 2,...,п}. Склейке схем соответствует применение операции суперпозиции над функциями ТП+і и ТП+і. Схема £3 реализует обратимую функцию /3(Ж) = Тт+і(Т/П+і(Ж )). Естественно, обратимая функция может быть реализована различным схемами.
Схемы называют обратимыми, если входные значения однозначно восстанавливаются по значениям на выходах. Легко видеть, что схемы в базисе Тоффоли будут обратимыми.
Пример обратимой схемы функции /:
/(Х1, Х2, Хз) = (х\, Х2, Х2 ® Х1Х2 ® Х\ ® 1)
М(Ж1)ТМ(Ж2)Т Т2(х2,Хз) Тз(Х1,Х2,ХзУ Т2(хьхз) т ^Хз)т
Х1 о—
-Ф-
-о У1
Х2 о-
-Ф-
-£Э-
у2
Х3 о-
±
Уз
Отметим, что операции суперпозиции между функциями / и д соответствует, также, произведение перестановок Р/ и Рд, произведение перестановочных матриц М/ и Мд.
Сложность обратимой функции
Пусть 5 - обратимая схема с п входами. Тогда сложностью Ь(Б) схемы 5 будет называться количество элементов схемы. Обратимая схема
5 называется эквивалентной данной схеме 5, если обе схемы реализуют одну и ту же обратимую функцию. Обратимая схема называется минимальной, если не существует эквивалентной ей схемы меньшей сложности.
Сложность Ьк(/) функции / в классе К обратимых схем определяется так:
Ьк (/) = ттвек Ь(Б).
Сложность Ьк (п) класса Еп всех обратимых функций в классе обратимых схем К определяется следующим образом
Ьк (п) = шах/еРп Ьк (/).
Нижнюю оценку на Ьк(п) можно получить мощностным методом. Поскольку любая обратимая функция представляется перестановкой
2п чисел, легко вычислить общее количество обратимых функций -\Еп\ = 2п!. Легко показать, что для ТП элементов Тоффоли будет выполняться |ТП| = п2п-1. Тогда количество обратимых схем сложности к на п входах не больше, чем (п2п-1)к. Следовательно, для реализации всех функций из Рп должно выполняться неравенство:
(п2п-1)к > 2п!.
Логарфмируя получившееся неравенство и воспользовавшись оценкой Стирлинга ^2 к! « к ^2 к, получим:
к ^2 п + (п — 1)к > 2пп.
Отсюда,
2пп
к >
log2 п + п — 1 В [7] получена верхняя оценка к < ^ п. В итоге,
2пп п2п
< к <
^2 п + п — 1 ^2 п
Точное значение для Ьк(п) неизвестно, а полученные неравенства дают слишком большой интервал для сложности Ьк (п). Так при п = 4 интервал сложностей имеет размеры от 13 до 32.
Всвязи с трудностями решения задачи нахождения Ьк (п) возникает интерес к решению задачи нахождения Ьк (/). В дальнейшем изложении индекс К будет опускаться, поскольку все реализации функций рассматриваются только в классе обратимых схем.
Алгоритм 1 вычисления сложности обратимой функции
Пусть /(х1,...,хп) - обратимая функция, сложность которой Ь(/) требуется найти, М/ - перестановочная матрица функции, 5/ - минимальная обратимая схема, соответствующая функции. В этом случае выполняется Ь(/) = Ь(5/).
Существуют обратимые функции /1 и /2 с минимальными схемами 5/1 и 5/2, соответственно, такие что функции / = /1 (/2) соответствует минимальная схема 5/ .В матричном представлении
М/ = М/1 ' М/2 •
Предположим, Ь(5/1) = к. Тогда для вычисления сложности Ь(/) требуется перебрать все сформированные предварительно схемы сложности к в качестве 5/, соответствующей (М/1 )-1, в разложении
М/2 = (М/1 )-1 ■ М/
и выбрать минимальную для /2.
Таким образом, в данном алгоритме требуется предварительно сформировать библиотеку минимальных схем до сложности к включительно. Вычисляемая в данном алгоритме сложность Ь(/), находится в диапазоне от к + 1 до 2к, это значение является существенным для небольших п.
Итак, пусть X = Sf - минимальная обратимая схема функции f, сложность которой требуется вычислить. nt - библиотеки схем сложности 0, 1, ..., k — 1, nt_k - библиотека схем сложности k.
Запись алгоритма вычисления Sf.
integer cost_circuit_2k(nt, nt_k, X) {
cost, c; // текущая и промежуточная сложности схемы X l_nt_k; // число схем сложности k,
A, y; // схемы; cost ^ k+1;
for j ^ 0 to l_nt_k do {
A=product (X, nt_k[j]); // склейка схем; y=Search(nt, A); // поиск подсхемы A в библиотеке схем; if(y!=nt[last]+1) c ^ get_cost(y); // найдена подсхема y, получить ее сложность; if(c<cost) cost ^ c; } return k+cost; }
Реализация алгоритма 1 позволила сформировать библиотеку минимальных схем до сложности 8, включительно. Ее объем составил примерно 3,7Gb. Однако переход на большие сложности потребовал сокращения времени работы программы, что привело к параллельной версии алгоритма 1.
Пусть size - количество узлов кластера(процессов программы).
1) Процесс 0 считывает из файла и рассылает, разбитую на порции, библиотеку nt_k на процессы i, где 0 < i < size; процесс 0 считывает и себе порцию.
Процесс i получает порцию библиотеки nt_k.
2) Все процессы считывают библиотеку nt.
Процесс 0 получает обратимую функцию X, сформированную пользователем или случайно, проверяет ее на наличие в библиотеке nt, если ее там нет, рассылает процессам i.
Все процессы получают X, либо завершают работу.
Все процессы применяют подпрограмму
cost_circuit_2k(nt, nt_k, X) к своей порции библиотеки nt_k и отправляют вычисленную сложность процессу 0.
3) Процесс 0 получает значения сложности функции X от процессов и выбирает минимальное.
integer cost_circuit_2k_P(nt, nt_k, X){ myrank; // номер процесса, l_nt; // размер порции библиотеки nt,
l_nt_k; // размер библиотеки nt_k,
A; // схема,
Cost; // текущее значение сложности; costs: array; if(myrank==0){ // процесс 0;
ifstream file(nt_k.txt); // открыть файл с библиотекой nt_k; for i ^ 1 to size-1 do { read(file, nt_k, l_nt_k);
// считать порцию библиотеки схем;
send(nt_k, l_nt_k, i); } // отправить порцию на процесс i; read(file, nt_k, l_nt_k);} else recv(nt_k, l_nt_k, 0); // все процессы, кроме процесса 0, получают свою порцию библиотеки nt_k;
ifstream file2(nt.txt); read(file, nt, l_nt); Cost ^ k+1; if(myrank==0) {
gen(X); // сгенерировать случайно функцию;
// проверить, нет ли уже схемы X в библиотеке;
Cost^ Check_cost(Cost, nt, X); }
Bcast(Cost); // разослать сложность Cost на все процессы; if(Cost<k+1) return Cost; // схема X есть в библиотеке; else { Bcast(X); // разослать схему на все процессы
Cost ^ cost_circuit_2k(nt, nt_k, X); // применить предыдущий алгоритм на порции библиотеки nt_k; if(myrank!=0) send(Cost, 1, 0);
else{ costs[0] ^ Cost; // процесс 0 собирает сложности; for i ^ 1 to size-1 do recv(costs+i,1,i); return min_element(costs); } } }
Параллельный алгоритм был реализован на языке программирования C++ с использованием mpi-библиотеки и запущен в работу на кластере ВСГАО с 16 узлами. Существенное сокращение времени работы параллельного алгоритма связано с тем, что на различных процессах происходит одновременное выполнение двух самых трудоемких операций, это произведение схем (A=product(X, nt_k[j])) и поиск в библиотеке (Search(nt, A)).
Статистические данные работы алгоритма на классе из 1140 функций, предположительно сложности больше 9.
Сложность 9 10 11 12 13 14 15 16
Количество 0 2 4 42 183 431 409 69
Алгоритм синтеза библиотеки сложностей
Для работы алгоритма 1 требуется сформировать библиотеку минимальных схем до некоторой сложности к. В соответствующем алгоритме синтеза значение к зависит, с одной стороны, от п - чем больше п, тем
быстрее растет количество схем с ростом их сложности. Отсюда, увеличивается потребность в емкости дискового пространства для хранения этих схем. С другой стороны, k зависит от мощности вычислительной системы, на которой будет запускаться данный алгоритм.
Пусть X - схема текущей сложности i, Mx - перестановочная матрица соответствующей обратимой функции. j-й шаг алгоритма:
1) Вычислить произведение Му = Мх ■ Му матриц Мх и My, где T
- элемент Тоффоли,
2) Проверить схему Y, соответствующую матрице Му, на наличие в библиотеке схем nt,
3) Если схемы нет, добавить Y в библиотеку.
Повторять j-й шаг для всех элементов класса T и для всех схем сложности i. Причем, при проверки схемы Y в библиотеке достаточно ограничиться схемами сложности i — 2, i — 1, i.
Формальная запись алгоритма синтеза
void Synthesis(){
basis, nt: array; // базис Тоффоли и библиотека схем,
1; // число базисных элементов,
Cost; // текущая сложность,
Count_; // число схем текущей сложности,
Count_a11; // текущий размер библиотеки схем,
X; // схема; nt [0] — =e; // схема сложности 0, e - число, соответствующее единичной матрице, при n=4 e=0x123456789abcdef; gen_basis(basis); // формирование базиса; nt—— basis; // схемы сложности 1 - базисные элементы;
Costal; Count_ — 1; Count_a11 — 1+1; while(Count_a11!=2~n!){
il — Count_a11-Count_; i2 — Count_; Cost++;Count_ — 0; for i — il to i2 do {// по всем схемам сложности Cost-1; for j — 0 to 1-1 do{// по всем базисным элементам;
X — product(nt [i] , basis [j]); // новая схема; x — Search(Cost, nt, X);
// поиск среди схем сложности Cost-2, Cost-1, Cost; if(x==0){ nt[Count_a11]—X; Count_a11++; Count_++}
// пополнение библиотеки;
} } } }
Ниже в таблице представлено количество схем по сложностям и время работы программы.
Сложность Количество Время (сек)
0 1
1 20
2 316
3 4190
4 49827
5 545477
6 5530949 50
7 51730709 100
8 444320918 852
В ходе работы программы алгоритма синтеза в оперативную память компьютера помещается отсортированная библиотека схем сложности
i — 2, i — 1 и сформированные схемы сложности i. Далее осуществляется поиск текущей схемы в указанных массивах. Причем поиск среди схем сложности i — 2,i — 1 - двоичный, его сложность приблизительно равна log2(Nl), где Nl - число схем. Поиск среди схем текущей сложности
i - последовательный. Учитывая рост числа схем с ростом сложности i, последовательный поиск существенно замедляет работу алгоритма. Поэтому алгоритм синтеза для конструирования схем следующей сложности (k + 1) был распараллелен.
1) Процесс 0:
а) Считывает из файла по частям библиотеку схем сложности k — 1, k (массив nt_) и отправляет эти части на процессы 1, 2,..., size — 2, где size - число процессов.
б) Формирует часть схем сложности k + 1 (nt_k1), сортирует, убирает повторы и отправляет процессу 1.
2) Процесс i : (i = 1, 2,..., size — 2)
а) Получает свою часть библиотеки схем сложности k — 1, k от процесса 0.
б) Получает часть схем сложности k + 1 (nt_k1) от процесса i — 1 и сверяет каждую схему со схемами из библиотеки.
в) Отправляет схемы, прошедшие проверку, процессу i + 1.
3) Процесс size — 1:
а) Получает части схем сложности k + 1 от процесса size — 2, накапливая их в одном массиве, nt_k1, до определенного предела, который зависит от объема оперативной памяти узла.
б) Сортирует и удаляет повторы в массиве nt_k1, затем записывает его в файл.
void Synth_parallel(){
nt_, nt_k, nt_k1: array; //библиотеки k — 1,k, сложности k, сложности k + 1, l; // размер порции схем; if(myrank==0){ ifstream file(nt_.txt); // открыть файл с библиотекой; for(i ^ 1 to size-1 do {
read(file, nt_, l); // считать порцию схем из файла; send(nt_, l, i); } // отправить порцию процессу i; ifstream file2(nt_k.txt); // открыть файл с библиотекой; for(j ^ 1 to limit do { read(file2, nt_k, l);
gener(nt_k1, nt_k, l); // сформировать схемы сложности k + 1 в массив nt_k1;
sort(nt_k1, l); unique(nt_k1); erase(nt_k1);
// отсотритовать и удалить повторяющиеся схемы в массиве; send(nt_k1, l, 1); } // отправить порцию nt_k1 процессу l; else if((myrank > 0) and (myrank < size-1)){
recv(nt_, l, 0); // получить порцию библиотеки схем сложности k — 1,k от процесса 0; for(j=1 ^ to limit do {
//limit - количество порций сформированных схем; recv(nt_k1, l, myrank-1); // получить порцию сформированных схем сложности k + 1 от процесса myrank — 1; check(nt_k1, nt_); //убрать схемы порции nt_k1, встречающиеся среди схем сложности k — 1,k; send(nt_k1, l, myrank+1); } // отправить порцию nt_k1 следующему процессу myrank + 1; else{ // процесс size — 1; n-^0; ofstream file3(nt_k1.txt); for(j ^ 1 to limit do {
recv(nt_k1, l, myrank-1); n++; if(n==f_limit) {
// f_limit - количество накапливаемых порций; sort(nt_k1, l); unique(nt_k1); erase(nt_k1); write(file3, nt_k1, l); n-^0; } } } } // запись в файл;
Параллельный алгоритм позволил сформировать библиотеку схем сложности 9.
Замечания о работе алгоритмов
1) Перевод матриц в векторы. В выше предложенных алгоритмах наиболее часто используемая операция - это операция суперпозиции обратимых функций, которой соответствует произведение перестановочных матриц, произведение перестановок и склейка обратимых схем, реализующих функции.
Пусть перестановке Рр — ( 0 1 2 2 1 ) обратимой функ-
у го il Î2 ••• i2n-1 J
ции F соответствует последовательность (а0,а1, •••, a2n-1) длины
2n, где Oj = ¿j по всем 0 < j < 2n — 1.
2) Пусть даны последовательности (а0,а1, •••, a2n-1), (b0,b1, •••, b2n-1), соответствующие перестановкам Рр и Pg. Тогда произведению перестановок PgPf соответствует произведение последовательностей (Со, С1, • • •, C2n —1), где
Сг —
3) Для введения естественного порядка в библиотеку обратимых схем используется факториальная система счисления [1].
По определению число X — onon-ь-а записано в факториальной системе счисления, если
X — «1 ■ 1! + а2 ■ 2! + ••• + on ■ N!,
Каждой последовательности (ао,а1, ... ,а2п-1) длины 2П ставится в соответствие число в факториальной системе А = ода! ... а2"-2, которое вычисляется так:
од — число цифр, меньших а и стоящих в последовательности справа от него.
Перевод в десятичную систему счисления. Далее, предварительно вычислив факториалы 1!, 2!, ..., (2П — 1)!, число X, записанное в факториальной системе счисления переводится в десятичную. Пусть это будет число У.
В силу того, что в последовательности (йо, й1, ... , а2«-1) нет повторяющихся цифр, введенное соответствие является однозначным, поэтому позволяет задать для каждой последовательности свой индивидуальный номер У. По этому номеру легко восстановить последовательность и значит перестановку Рр соответствующей функции Р. В выше предложенном алгоритме 1 обратимая функция Р, сложность которой вычисляется, задается через номер Ур соответствующей перестановки Рр.
4) Перевод последовательности в шестнадцатеричную систему счисления.
Пусть обратимой функции Р, зависящей от 4-х переменных, соответствует последовательность (ао, аі, ... , аі5). Сопоставим последовательности (ао,аі, ... , аі5) число Z, записанное в шестнадцатеричной системе счисления:
Z = аоаі...аі5.
Тогда, учитывая диапазон значений элементов а^ последовательности (а0,аі, ... , аі5), для хранения числа Z требуется 64 бита, а не 256 бит, как для хранения последовательности.
Еще одно преимущество перехода в шестнадцатеричную систему счисления заключается в том, что теперь произведение последовательностей заменяется на произведение чисел, в котором используются логические операции и операции побитового сдвига (эти операции существенно экономят время работы алгоритмов).
5) В числе Z последняя цифра аі5 заменим на значение сложности ¿(5) соответствующей минимальной обратимой схемы 5. Теперь
Z = а0аі...аі4Ь(5)
(в алгоритме Р(£) не превышает 9). Восстанавливается аі5 через сложение по модулю 2 остальных цифр: аі5 = ^і:40 а^.
Алгоритм 2 вычисления сложности обратимой функции
В задаче вычисления сложности обратимой функции / рассмотрим случай, когда Р(/) > 2 ■ к. Здесь возможны два пути изменения алгоритма и оба эти пути приводят к получению приближенного алгоритма. Первый путь аналогичен алгоритму 1, только здесь схема X разбивается не на две, а на три подсхемы и осуществляется перебор 2-х подсхем. Однако, в этом случае сложность ¿(/) будет ограничена значением 3к, с одной стороны. С другой стороны, даже при п = 4 невозможно осуществить полный перебор подсхем.
Пусть Р/ - перестановка обратимой функции /.
1 шаг. Р/ разбивается на циклы:
Рр = АіА2...Ак.
Все циклы А, разбиваются на произведение транспозиций.
Пусть Д, = (а, а2,..., а,), тогда легко проверить, что
= (аі, а22)(аі, а33)...(аі, а;^).
2 шаг. Итак, Pf = ToTi...Ts, где Tj - транспозиции. Вычислить суммарную сложность Cost минимальных схем, соответствующих транспозициям Tj.
3 шаг. Вычислить произведения транспозиций:
TPo = To ■ Ti, TPi = Ti ■ T2, ...TPs-i = Ts-i ■ Ts
4 шаг. Вычислить сложности Cj минимальных схем, соответствующих произведениям TPj и выбрать среди них наименьшую сложность C. Пусть сложности C соответствует произведение TPj = Tj ■ Tj+i. Если c > 2 ■ k, возвратить Cost и выйти из алгоритма.
5 шаг. Заменить Tj на TPj; удалить Tj+i и пересчитать TPj-i и TPj.
6 шаг. Если суммарная сложность Cost = k или, если среди произведений TPj осталось одно, то выйти и возвратить Cost иначе вернуться к шагу 4.
void Tr_cost(T, c_T, nt, nt8, X) {
get_transpositions(T, c_T, X);// разложить перестановку X в транспозиции T и вычислить их сложности c_T; j ^ 0; while(j<last) { // по всем элементам массива T, кроме последнего;
TP [j] ^ product (T[j] , T [j+1]); c[j] ^ Cost_circuit(nt, nt8, TP[j]); j++; }
while(TP.size()!=0) {
m=min_element(c); // возвращает указатель на минимальный элемент в массиве c;
if(*m<17) { //заменить транспозицию на соответствующую подсхему;
T[m-T.begin()] ^ TP[m-TP.begin()] ; c_T[m-c_T.begin()] ^ c[m-c.begin()]; delete(T, c_T, m+1); // удалить лишние; recount_neighb(TP, c); // пересчитать соседние элементы в массивах TP и с;
} else break; } }
В заключении работы алгоритма 2 массив T содержит минимальные подсхемы схемы обратимой функции f. В данном алгоритме при вычислении элементов массивов c и c_T используется последовательный алгоритм 1.
Список литературы
1. Гашков С. Б. Системы счисления и их применение / С. Б. Гашков. - М. : МЦНМО, 2004. - 52 с.: ил. - (Б-ка «Математическое просвещение») ; вып. 29).
2. Квантовый компьютер и квантовые вычисления. Т. 2. - Ижевск : Ред. журн. «Регулярная и хаотическая динамика», 1999. - 287 с.
3. Мальцев А. И. Основы линейной алгебры / А. И. Мальцев. - М. : Наука, 1970. - 400 с.
4. Monz T. [et al.] Realization of the quantum Toffoli gate with trapped ions. arXiv:0804.0082v1 [quant-ph] 1 Apr 2008.
5. Toffoli T. Reversible Computing. Tech.Memo MIT/LCS/TM-151, MIT Lab. for Comp.Sci. - 1980.
6. Toffoli T. Bicontinuous Extensions of Invetible Combinatorial Functions // Mathematical Systems Theory. - 1981. - Vol. 14. - P. 13-23.
7. Vivek V. Shende at al. Synthesis of Reversible Logic Circuits //IEEE Transactions on Computer-Aided design of integrated circuits and systems.- 2003. - Vol. 22, N6.
S. F. Vinokurov, A. S. Frantseva
An approximate algorithm for computing the complexity of reversible functions in the basis of Toffoli
Abstract.
We investigate questions of computing of the complexity of the arbitrarily given reversible function. Previously introduced the concept of reversible computation required, in particular, the concept of a reversible function. We consider various representations of reversible functions (the table of values, permutation matrices, permutations and logic circuits). As the basis of reversible circuits is considered a well-known Toffoli gates[1]. Presented sequential and parallel algorithms for computing of the complexity of the reversible function. The algorithms were run on a cluster containing 16 nodes, each of which has a Intel Pentium Dual CPU, 1,86 Gz, 1,87 Gz, 2Gb, Ethernet network 100Mbit/sek. The cluster is organized in ESSAE. We present estimates of the complexity.
Keywords: reversible functions, complexity, Toffoli gates, sequential and parallel algorithms.
Винокуров Сергей Федорович, доктор физико-математических наук, профессор, Восточно-Сибирская государственная академия образования, 664011, Иркутск, ул. Н. Набережная, 6 тел.: (3952) 240435 (servin38@gmail.com)
Францева Анастасия Сергеевна, аспирант кафедры математической информатики Восточно-Сибирская государственная академия образования, 664011, Иркутск, ул. Н. Набережная, 6 тел.: (3952) 240435 (a.s.frantseva@gmail.com)
Vinokurov Sergey, East Siberian State Academy of Education, 6, N. Naberezhnaya St., Irkutsk, 664011, professor, phone: (3952) 240435 (servin38@gmail.com)
Frantseva Anastasiya East Siberian State Academy of Education, 6, N. Naberezhnaya St., Irkutsk, 664011, postgraduate, phone: (3952) 240435 (a.s.frantseva@gmail.com)