Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений

Материал из Алговики
Перейти к навигации Перейти к поиску
Алгоритм: Алгоритм решения линейной системы сравнений.
Исполнитель: Кинжикеева Дина.

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 если:

  1. НОД(a,b) делит оба числа a и b;
  2. НОД(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), что и требовалось доказать. Теорема доказана.

Поэтапное описание алгоритма:

  1. Вычисление значения M.
    M=m_1m_2...m_n
  2. Вычисление значений M_i, для всех i=1,...,n.
    M_i=M/m_i
  3. Нахождение обратных элементов к 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}
  4. Формирование итогового ответа.
    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 Макроструктура алгоритма

В алгоритм последовательно входят следующие макроструктуры:

  1. Вычисление M_i как произведение всех m_j для всех j≠i, j =1, ...,n ;
  2. Вычисление обратного числа к M_i по расширенному алгоритму Евклида;
  3. Суммирование произведений вида 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;
}
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.

рис.1 Информационный граф. Оранжевый- операция 1 (п. 1.2); желтый -операции 2 (п. 1.2); зеленый- операция умножения на ai ;синий-операции 3 (п. 1.2), голубой -операция 4 (п. 1.2).

Входные данные m_i подаются на первый ярус, a_i -на второй (см. рис.2).

рис.2 Информационный граф с изображением входных данных.] Оранжевый- операция 1 (п. 1.2); желтый -операции 2 (п. 1.2); зеленый- операция умножения на ai ;синий-операции 3 (п. 1.2), голубой -операция 4 (п. 1.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), задаваемых одно сравнение.
рис.3 График сильной масштабируемости. Диапазон[0:10000000]-число входных данных, диапазон[0:140]-число процессоров, диапазон[0:2000000000]-производительность.
рис.4 График слабой масштабируемости. Диапазон[0:10000000]-число входных данных, диапазон[0:140]-число процессоров, диапазон[0:1800000000]-производительность.

На основе параллельной реализации алгоритма производительность с ростом числа процессов увеличивается, а при приближении к числу процессов 64-128 , в зависимости от числа входных данных, начинает уменьшаться. Это объясняется использованием коллективных операций для расчета произведения всех модулей, по которым производятся вычисления, а также для формирования итогового ответа, а траты на коммуникационные обмены существенно возрастают с ростом числа использованных процессов. Ускорение производимых вычислений на каждом процессоре не компенсирует траты на коммуникационные обмены.

2.5 Динамические характеристики и эффективность реализации алгоритма

2.6 Выводы для классов архитектур

2.7 Существующие реализации алгоритма

Реализации данного алгоритма решения системы линейных сравнений на основе утверждения китайской теоремы об остатках не было найдено.

3 Литература

  1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, N 7, С. 36-39.
  2. Применко Э.А. Алгебраические основы криптографии: Учебное пособие. M.:Книжный Дом "ЛИБРОКОМ",2013.-288с.
  3. Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9
  4. Переславцева О. Н. Распараллеливание алгоритмов с применением китайской теоремы об остатках. — Вестник ТГУ, 2009. — № 4. — ISSN 1810-0198.
    1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, N 7, С. 36-39.