Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений
- Алгоритм: Алгоритм решения линейной системы сравнений.
- Исполнитель: Кинжикеева Дина.
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
Введем некоторые определения.
Определение 1 Пусть m целое число большее единицы (m>1). Говорят, что a сравнимо с b по модулю m, если m делит (a-b) (обозначение: m|(a-b)), а именно выполняется равенство: a = b+tm, где t некоторое целое число. Сравнение записывает таким образом: a ≡ b (mod m) .
Определение 2 Число НОД(a,b) называется наибольшим общим делителем двух чисел a,b если:
- НОД(a,b) делит оба числа a и b;
- НОД(a,b) является наибольшим общим делителем чисел a и b, то если d|a и d|b, то d|НОД(a,b) (или, что то же самое, d меньше либо равно НОД(a,b)).
Определение 3 Числа a и b называются взаимно простыми, если НОД(a,b)=1.
Задана линейная система сравнений вида:
- x ≡ a_1 (mod m_1)
- x ≡ a_2 (mod m_2)
- ...
- x ≡ a_n (mod m_n) ,
- где m_1,m_2,...,m_n - натуральные взаимно простые числа, a_1, a_2,..., a_n -некоторые целые числа.
Рассматривается задача решения линейной системы сравнений вида, описанного выше. Данная система сравнений имеет единственное решение по модулю M=m_1m_2...m_n по китайской теореме об остатках. Эта теорема утверждает, что можно восстановить целое число по множеству его остатков от деления числа из некоторого набора попарно взаимно простых чисел. Теорема в её арифметической формулировке была описана в трактате китайского математика Сунь Цзы, предположительно датируемом третьим веком н. э. и затем была обобщена Цинь Цзюшао в его книге «Математические рассуждения в 9 главах» датируемой 1247 годом, где было приведено точное решение. Утверждение этой теоремы можно рассматривать как алгоритм решения линейной системы сравнений требуемого вида. Искомое решение ищется как сумма вида:
- x= ∑_{i=1}^{n} a_i M_i N_i (mod M) ,
- где M_i=M / m_i , N_i= M_{i}^{-1} (mod m_i) .
1.2 Математическое описание алгоритма
Алгоритм строится на утверждении китайской теоремы об остатках.
Теорема. (Китайская теорема об остатках)
- Пусть m_1,m_2,...,m_n натуральные числа такие, что НОД(m_i,m_j)=1, при i≠j для любых i,j=1,2,..,n. И пусть a_1,a_2,...,a_n целые числа. Тогда система сравнений вида:
- x ≡ a_1 (mod m_1)
- x ≡ a_2 (mod m_2)
- ...
- x ≡ a_n (mod m_n) ,
- имеет единственное решение по модулю числа M=m_1m_2...m_n:
- x= ∑_{i=1}^{n} a_i M_i N_i (mod M) (1),
- где M_i=M / m_i , N_i= M_{i}^{-1} (mod m_i) .
Доказательство. Докажем существование решения, а именно, что решение x удовлетворяет заданной системе сравнений. Рассмотрим x (mod m_1). Все слагаемые в сумме (1), кроме первого, делятся на m_1, а первое слагаемое a_1M_1N_1 ≡ a_1 (mod m_1), так как M_1N_1≡1 (mod m_1). Таким образом, x ≡ a_1 (mod m_1) . Аналогичным образом для m_2,..,m_n. Следовательно, x -решение. Покажем единственность решения. Пусть существуют два различных решения системы x_1 и x_2.
- x_0=x_1-x_2
Тогда для любого i=1,..,n m_i|x_0, а следовательно и M|x_0 (M|(x_1-x_2)). Это означает, что x_1 можно представить в виде: x_1=x_2+kM, k некоторое целое число. Следовательно, x_1=x_2 (mod M), что и требовалось доказать. Теорема доказана.
Поэтапное описание алгоритма:
- Вычисление значения M.
- M=m_1m_2...m_n
- Вычисление значений M_i, для всех i=1,...,n.
- M_i=M/m_i
- Нахождение обратных элементов к M_i по соответствующему модулю при помощи алгоритма Евклида. Описание расширенного алгоритма Евклида:
- a^{-1} (mod b)
- t_0=a t_1=b
- t_0=t_1q_1+t_2
- t_1=t_2q_2+t_3
- ...
- t_{k-2}=t_{k-1}q_{k-1}+t_{k} t_{k}=1
- t_{k-1}=t_{k}q_{k}
- p_0=1 p_1=q_1
- p_j=q_jp_{j-1}+p_{j-2} j=2,...,k
- a^{-1}=(-1)^{k+1}p_{k-1}
- Формирование итогового ответа.
- x=a_1 M_1 N_1+...+a_n M_n N_n (mod M)
1.3 Вычислительное ядро алгоритма
Вычислительное ядро алгоритма составляет определение для каждого числа M_i=M/m_i , i=1,..., n, обратного к нему числа по модулю m_i при помощи расширенного алгоритма Евклида.
1.4 Макроструктура алгоритма
В алгоритм последовательно входят следующие макроструктуры:
- Вычисление M_i как произведение всех m_j для всех j≠i, j =1, ...,n ;
- Вычисление обратного числа к M_i по расширенному алгоритму Евклида;
- Суммирование произведений вида a_i M_i N_i, i=1, ...,n , по модулю M.
1.5 Схема реализации последовательного алгоритма
Общая схема реализации программы:
- for i:=0 to n
- M=M*m_i;
- for i:=0 to n
- M_i=M/m_i;
- M_{i}^{-1}=РасширенныйАлгоритмЕвклида(M_i,m_i);
- x=x+a_i*M_i*M_{i}^{-1};
- x=x mod M;
Предлагаемая реализация Расширенного Алгоритма Евклида (С/С++):
- int inverse(int a, int m) {//a<m
- int c,cur=0, q,p0=0,p1=1,p2,m0=m;
- while (a) {
- cur++;
- c = m % a;
- q = (m-c)/a;
- p2 = q*p1+p0;
- p0 = p1;
- p1 = p2;
- m = a;
- a = c;
- }
- if (m==1) {
- if (cur%2)
- return p0;
- return m0-p0;
- }
- if (cur%2)
- return -1;
- }
1.6 Последовательная сложность алгоритма
Последовательная сложность алгоритма составляет 3nlogk, где k равен максимальному значению M_i, i=1, ...,n . Основная сложность приходится на расчет обратного элемента к M_i по модулю m_i по расширенному Алгоритму Евклида, т.к при работе алгоритма Евклида (не расширенного) совершается максимальное число шагов log(max\{a,b\}), когда подаются на вход числа a и b взаимно простые (по условию данной задачи рассматриваются только такие числа), и число шагов в расширенном алгоритме совпадает, то исходя из предложенной реализации расширенного Алгоритма Евклида сложность его работы составит 3logk. Всего данный алгоритм будет отрабатывать n раз, следовательно сложность Алгоритм решения линейной системы сравнений составит 3nlogk.
1.7 Информационный граф
Описание графа алгоримта. В графе алгоритма в яросно-параллельной форме выделяется 3 яруса (см. рис.1). Первый ярус: расчет M и M_i. Второй ярус: умножение вида M_ia_i. Третий ярус: растчет M_{i}^{-1} по расширенному Алгоритму Евклида, и формирование итогового ответа как сумму M_ia_iM_{i}^{-1}. Во всех ярусах i=1, ..., n.
Входные данные m_i подаются на первый ярус, a_i -на второй (см. рис.2).
1.8 Ресурс параллелизма алгоритма
Для реализации алгоритма решения линейной системы сравнений потребуется выполнить последовательно следующие ярусы:
- n раз первый ярус
- 1 раз второй ярус
- 3*log(k)+n раз третий ярус, где k равен максимальному значению M_i, i=1, ...,n .
Таким образом параллельная сложность алгоритма составит 3logk+2n+1.
1.9 Входные и выходные данные алгоритма
Входные данные: n пар числе (a_i, m_i), соответствующая линейному сравнению вида x ≡ a_i (mod m_i) , где m_i - натуральные взаимно простые числа, a_i -некоторые целые числа, i=1, ..., n.
Объем входных данных: 2n.
Выходные данные: число x - решение линейной системы сравнений.
Объем выходных данных: 1.
2 Программная реализация алгоритма
2.1 Особенности реализации последовательного алгоритма
2.2 Локальность данных и вычислений
2.3 Возможные способы и особенности параллельной реализации алгоритма
2.4 Масштабируемость алгоритма и его реализации
Исследование масштабируемости проводилось на суперкомпьютере "Ломоносов"[1] Суперкомпьютерного комплекса Московского университета. Набор и границы значений изменяемых параметров запуска реализации алгоритма:
- Число MPI процессов: [1:128] с шагом по степеням 2;
- Размер входа: [1000:10000000], число пар (a_i,m_i), задаваемых одно сравнение.
На основе параллельной реализации алгоритма производительность с ростом числа процессов увеличивается, а при приближении к числу процессов 64-128 , в зависимости от числа входных данных, начинает уменьшаться. Это объясняется использованием коллективных операций для расчета произведения всех модулей, по которым производятся вычисления, а также для формирования итогового ответа, а траты на коммуникационные обмены существенно возрастают с ростом числа использованных процессов. Ускорение производимых вычислений на каждом процессоре не компенсирует траты на коммуникационные обмены.
2.5 Динамические характеристики и эффективность реализации алгоритма
2.6 Выводы для классов архитектур
2.7 Существующие реализации алгоритма
Реализации данного алгоритма решения системы линейных сравнений на основе утверждения китайской теоремы об остатках не было найдено.
3 Литература
- Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, N 7, С. 36-39.
- Применко Э.А. Алгебраические основы криптографии: Учебное пособие. M.:Книжный Дом "ЛИБРОКОМ",2013.-288с.
- Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9
- Переславцева О. Н. Распараллеливание алгоритмов с применением китайской теоремы об остатках. — Вестник ТГУ, 2009. — № 4. — ISSN 1810-0198.
- ↑ Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, N 7, С. 36-39.