2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Выразить операцию сложения
Сообщение25.08.2012, 17:11 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
Дано $F = \mathbb{Z}_2^k$. На $F$ задан обычный побитовый $\mathbf{xor}$ и умножение, так, что умножение вместе с этим ксором, рассматриваемым как сложение, задаёт на $F$ структуру поля Галуа. Теперь начинаем мыслить об элементах $F$ как о двоичных записях натуральных чисел от $0$ до $2^k - 1$. Можно ли выразить сложение таких чисел по модулю $2^k$ через полевые операции?

В выражении (если оно, конечно, существует, в чём я не уверен, хотя не уверен и в обратном) можно использовать $\mathbf{xor}$, умножение (которое в поле), константы $\mathbf{0}$, $\mathbf{1}$ и $\mathbf{u}$, где ноль с единицей понятно что такое, а $\mathbf{u}$ - порождающая мультипликативной группы поля $F$. Для определённости будем считать $\mathbf{1} = (0, \ldots, 0, 1)$, $\mathbf{u}^s = (0, \ldots, 0, 1, 0, \ldots, 0)$, где $s < k$ и единственная единица в выражении для $\mathbf{u}^{s}$ стоит на $(s+1)$-ом месте, считая с правого края.

Замучился я с этим дурацким переносом разрядов!!! Но ведь как-то же в процессорах все эти штуки реализуют :shock:

 Профиль  
                  
 
 Re: Выразить операцию сложения
Сообщение25.08.2012, 18:48 
Заслуженный участник


04/05/09
4589
Профессор Снэйп в сообщении #610441 писал(а):
Замучился я с этим дурацким переносом разрядов!!! Но ведь как-то же в процессорах все эти штуки реализуют :shock:
В процессорах используют не xor, а not-and и/или not-or.

 Профиль  
                  
 
 Re: Выразить операцию сложения
Сообщение25.08.2012, 19:16 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
venco в сообщении #610469 писал(а):
Замучился я с этим дурацким переносом разрядов!!! Но ведь как-то же в процессорах все эти штуки реализуют :shock:
В процессорах используют не xor, а not-and и/или not-or.[/quote]
Охотно верю :-)

Я про процессор не потому заговорил, что думаю, будто там пользуются именно ксором. Более того, я почти уверен, что поля Галуа туда не зашивают. Просто сказал про процессоры в некоем "собирательном" смысле: работают с битами, реализуют много разных вещей минимальным набором инструментов...

А задача эта меня давно волновала в связи с другой темой: про перестановки на абелевых группах. Там всё свелось к перестановкам на группах $\mathbb{Z}_{2^n} \times \mathbb{Z}_{2^m}$ и $\mathbb{Z}_{2^n} \times \mathbb{Z}_{2^m} \times \mathbb{Z}^{2^k}$, была идея для начала "уравнять" все биты в правах, задать перестановку как умножение на ненулевой неединичный элемент поля, а потом восстанавливать старую операцию сложения. Правда, так и не удалось понять, как это можно сделать и можно ли вообще.

Ну да чёрт с ними, с теми группами. Задача про выражение операций сама по себе интересна. Для маленьких $k$ выразить вроде бы получается. К примеру, при $k = 2$ можно взять
$$
x + y = x \mathop{\mathbf{xor}} y \mathop{\mathbf{xor}} \mathbf{u}(x \mathop{\mathbf{xor}} \mathbf{1})(x \mathop{\mathbf{xor}} \mathbf{u} \mathop{\mathbf{xor}} \mathbf{1}) (y \mathop{\mathbf{xor}} \mathbf{1})(y \mathop{\mathbf{xor}} \mathbf{u} \mathop{\mathbf{xor}} \mathbf{1})
$$

 Профиль  
                  
 
 Re: Выразить операцию сложения
Сообщение25.08.2012, 21:37 
Заслуженный участник


27/04/09
28128
$x + y = s(x, y, P)$.

$P_0 = \mathbf 0$,
$P_{n + 1} = \mathbf u p(d_n(x), d_n(y), P_n)$.

$P = \mathop{\mathbf{xor}}_{i = 0}^{k - 1} P_i$.

$d_i(x)$ — выделенный $i$-й разряд $x$. Не совсем понимаю пока, как выражается.

$s$ и $p$ — функции [порязрядной суммы трёх чисел без учёта переносов] и [переносов суммы трёх чисел без сдвига] с таблицами истинности $01101001$ и $00010111$ в каждом разряде. Вообще не понимаю, как с таким умножением выражаются. Возможно, стоит сначала выразить порязрядное умножение, а потом эти через него.

Вы так же действовали для $k = 2$?

Попробую выразить себе поразрядное умножение и выделение разряда; и, надеюсь, не напутал.

-- Вс авг 26, 2012 00:40:33 --

(Боюсь, ничего практически здесь полезного не написал.)

-- Вс авг 26, 2012 01:08:25 --

А ведь поразрядное умножение реализуется через выделение разряда! Выделяем, сдвигаем, умножаем, сдвигаем назад, а потом всё ксорим.

 Профиль  
                  
 
 Re: Выразить операцию сложения
Сообщение25.08.2012, 22:47 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
arseniiv в сообщении #610517 писал(а):
Вы так же действовали для $k = 2$?

Для $k = 2$ я в явном виде выписал многочлен $f(x) = (x-1)(x-u+1)+1$, принимающий значения $1$ на числах $1$, $3$ (имеются в виду единица с тройкой при сложении по модулю $4$) и $0$ на остальных. И теперь, складывая числа $x$ и $y$, я их вначале складываю побитовым ксором, а если $f(x)f(y)$ оказывается равным единице, то дополнительно ксорю $1$ в старший разряд суммы.

При $k = 2$ больше ничего делать и не надо, поскольку более старших разрядов у нас уже и нет. А вот при бОльшем $k$ надо начинать учитывать дальнейшие переносы... Конечно, для каждого конкретного $k$ можно тупо перебирать все возможные значения слагаемых и наворачивать многочлены, осуществляющие особое сложение для каждой их пары. Но это плохой метод: всё равно что составлять специальные таблицы умножения двухзначных, трёхзначных и т. д. чисел вместо того, чтобы учиться умножать столбиком. И длины формул будут экспоненциально разрастаться с ростом $k$. Хуже того, я даже не вижу систему, которое бы позволила однородным образом выписывать такие длинные формулы, просто замечаю, что раз $F$ конечно, то там будет конечный перебор.

В идеале бы хотелось иметь одну и ту же формулу для всех достаточно больших $k$ :?

-- Вс авг 26, 2012 01:51:16 --

arseniiv в сообщении #610517 писал(а):
А ведь поразрядное умножение реализуется через выделение разряда! Выделяем, сдвигаем, умножаем, сдвигаем назад, а потом всё ксорим.

Я это мыслю так: храним в уме бит переноса, движемся справа налево, на очередной позиции ксорим два имеющихся разряда и бит переноса к ним до кучи, если проксорили не менее двух единиц, кладём в бит переноса $1$, иначе кладём $0$, сдвигаемся влево на следующую позицию и повторяем процедуру, останавливаемся, когда доходим до левого края.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: YandexBot [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group