2014 dxdy logo

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

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


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Остаток от деления многочленов конечного поля
Сообщение04.01.2023, 16:24 
Аватара пользователя


03/01/23
57
Я пишу библиотеку для вычислений в конечных полях. Сейчас я делаю функции для операций над многочленами над полем $GF(2)$. Вот пример функции взятия остатка, которую я нашел в одной книге на псевдокоде.

Код:
int degree(uint8_t a) {
    if (a == 0)
        return -1;
    else
        return bit_length(a) - 1;
}


uint8_t rem(uint8_t a, uint8_t b) {
    uint8_t result = a;

    while (degree(result) >= degree(b)) {
        int position = degree(result) - degree(b);
        result ^= b << position;    // minus x^pos
    }

    return result;
}


Мне непонятна в функции $rem$ операция
Код:
result ^= b << position

Что здесь происходит? Строкой выше разность степеней многочленов $result$ и $b$ это степень икса в частном при делении в столбик. А что происходит потом, где операция $xor$ и битовый сдвиг? Здесь мой комментарий 'minus x power pos', я предположил, что это вычитание результата умножения делителя на степень икса как при делении в столбик, но я не уверен.

 Профиль  
                  
 
 Re: Остаток от деления многочленов конечного поля
Сообщение04.01.2023, 16:55 
Заслуженный участник
Аватара пользователя


16/07/14
8450
Цюрих
Видимо считается, что в битах числа хранятся коэффициенты при соответствующих степенях многочлена. Тогда r ^ (b << p) это просто $r - b \cdot x^p$. Если у $r$ была степень $m$, а у $b$ степень $m < n$, то $b \cdot x^{n - m}$ - это многочлен степени $m$, а $r - b \cdot x^{n-m}$ - степени не выше $m - 1$.

(и это не псевдокод, это С)

 Профиль  
                  
 
 Re: Остаток от деления многочленов конечного поля
Сообщение04.01.2023, 17:03 
Аватара пользователя


03/01/23
57
mihaild в сообщении #1576195 писал(а):
Видимо считается, что в битах числа хранятся коэффициенты при соответствующих степенях многочлена.

Да, все верно. А почему умножение на степень икс реализуется именно как сдвиг, какая тут логика? То есть почему
Код:
b << p
это $bx^p$?
Это не псевдокод, это то, что я пишу на си по этому псевдокоду :)

 Профиль  
                  
 
 Re: Остаток от деления многочленов конечного поля
Сообщение04.01.2023, 17:25 
Заслуженный участник
Аватара пользователя


16/07/14
8450
Цюрих
Потому что как при умножении на $x^p$ коэффициент при $x^i$ становится коэффициентом при $x^{i + p}$, так и при битовом сдвиге $i$-й бит становится $i+p$-м.

(и я сильно подозреваю, что 8 бит вам не хватит, советую взять сразу 64 или завести псевдоним для типа, чтобы потом было легко поменять)

 Профиль  
                  
 
 Re: Остаток от деления многочленов конечного поля
Сообщение24.01.2023, 15:46 
Аватара пользователя


03/01/23
57
А как в этом коде получить кроме остатка от деления еще неполное частное $quo$? Смотрю и не могу придумать, только решением уравнения додумался находить неполное частное. Или можно накапливать вот эти степени $b << power$ в переменной $quo$?

Код:
// FIXME
void quo_rem(gf_element a, gf_element b, gf_element& quo, gf_element& rem) {
    gf_element result = a;
    quo = 0;

    while (degree(result) >= degree(b)) {
        int power = degree(result) - degree(b);
        result ^= b << power; // result - bx^power
    }

    rem = result;
}

 Профиль  
                  
 
 Re: Остаток от деления многочленов конечного поля
Сообщение24.01.2023, 16:25 
Заслуженный участник
Аватара пользователя


23/07/08
10652
Crna Gora
Что-то я перестал понимать. Вы используете многочлены, чтобы построить расширение поля $GF(2)$, как в этой теме? То есть каждый многочлен представляет некий элемент поля $GF(2^m)$, так? Тогда какой остаток, в поле любые два элемента делятся без остатка (лишь на нуль делить нельзя).

Где я ошибаюсь?

 Профиль  
                  
 
 Re: Остаток от деления многочленов конечного поля
Сообщение24.01.2023, 16:33 
Аватара пользователя


03/01/23
57
Я хочу в итоге реализовать расширенный алгоритм Евклида в конечном поле. Для этого нужны все эти операции. Но некоторые операции я пишу просто для работы с многочленами, они не обязательно должны быть в поле. Алгоритм Евклида будет для любых многочленов над $F_2$. Так что одни операции у меня работают в расширении поля, а другие - с многочленами над $F_2$

Вас смутил псевдоним типа $gf_element$, его лучше переименовать на $polynom$ для функций, которые работают с обычными многочленами.

 Профиль  
                  
 
 Re: Остаток от деления многочленов конечного поля
Сообщение24.01.2023, 16:38 
Заслуженный участник
Аватара пользователя


23/07/08
10652
Crna Gora
Я понимаю, что Вам это нужно. Давайте возьмём какое-нибудь игрушечное поле, например, $GF(2^2)$. Вот здесь таблица умножения. Покажите мне какие-нибудь два полинома, которые при делении друг на друга дают остаток.

-- Вт янв 24, 2023 14:39:58 --

Without Name в сообщении #1578596 писал(а):
Так что одни операции у меня работают в расширении поля, а другие - с многочленами над $F_2$
Понял.

 Профиль  
                  
 
 Re: Остаток от деления многочленов конечного поля
Сообщение24.01.2023, 16:50 
Аватара пользователя


03/01/23
57
Вроде я додумался. Правильно?

Код:
// FIXME
void quo_rem(polynomial a, polynomial b, polynomial& quo, polynomial& rem) {
    rem = a;
    quo = 0;

    while (degree(rem) >= degree(b)) {
        int power = degree(rem) - degree(b);
        rem ^= b << power; // rem - b*x^power
        quo ^= 1 << power; // quo + x^power
    }
}

 Профиль  
                  
 
 Re: Остаток от деления многочленов конечного поля
Сообщение25.01.2023, 08:16 
Заслуженный участник
Аватара пользователя


23/07/08
10652
Crna Gora
Да, правильно.
Функцию можно проверить так. Возьмите несколько раз случайные a и b, найдите quo и rem. Они вычислены правильно, если
1) b*quo+rem равно a (сложение и умножение ясно в каком смысле)
2) степень rem ниже степени b

 Профиль  
                  
 
 Re: Остаток от деления многочленов конечного поля
Сообщение25.01.2023, 11:36 


11/07/16
802
Without Name
Цитата:
Я пишу библиотеку для вычислений в конечных полях


Это механизировано в Мэйпле. См. (28)-(31) здесь.

 Профиль  
                  
 
 Re: Остаток от деления многочленов конечного поля
Сообщение25.01.2023, 18:21 
Заслуженный участник
Аватара пользователя


23/07/08
10652
Crna Gora
Markiyan Hirnyk, спасибо за ссылку и информацию.
К сожалению, не всегда можно использовать Maple. Представьте себе, например, декодер кода Рида-Соломона по методу Евклида, работающий на микроконтроллере во встроенной системе (где нет ни клавиатуры, ни монитора, а объём памяти минимальный).

 Профиль  
                  
 
 Re: Остаток от деления многочленов конечного поля
Сообщение25.01.2023, 23:04 


11/07/16
802
svv
Вопрос задан не о железе, а о программе. См. также это.

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

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



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

Сейчас этот форум просматривают: mihaild


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

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