|
СЕМИНАРЫ |
Научный семинар «Актуальные проблемы геометрии и механики» имени проф. В. В. Трофимова
|
|||
|
Градуированные вычисления и быстрое умножение матриц Р. Р. Айдагулов Московский государственный университет имени М. В. Ломоносова, Научно-исследовательский институт механики |
|||
Аннотация: При решении задач с большим параметром (размерности) Сортировка. Продемонстрируем этот метод в задаче упорядочивания (сортировки) $$x[i[1]]<x[i[2]]<...<x[i[n_1]], \ \ \ x[j[1]]<x[j[2]]<...<x[j[n_2-1]].$$ Для этого достаточно установить два указателя для двух массивов $$while(l<n)\{ if(x[i[l_1]]<x[j[l_2]])\{ii[l++]=i[l_1];if(l_1<n_1)l_1++;$$ $$else\{while(l_2<=n_2)ii[l++]=j[l_2++]\}\}else ...$$ В случае не выполнения сравнения передвижение по второму счетчику. Обозначая количество операций (в нашем случае сравнений) через $$T(n)= Cn^\alpha+mT(\frac nl).$$ В нашем случае При использовании метода фильтрации промежуточные вычисления (сравнения в низших ветках) используются только выше в своей ветке. Поэтому этот метод менее эффективен по сравнению метода градуированного вычисления. В задаче сортировки градуировка по битам переменных отличает от всех элементов, которые относятся к другой градуировке. Таким образом, общее количество битовых операций равно Умножение по методу фильтрации. Большие числа на компьютере представляются в M – ичной системе исчисления как значения многочлена: $$X=x_0+x_1M+...+x_{k-1}M^{k-1}.$$ Допустим имеется еще другое большое число $$Z=XY=\sum_{i=0}^{m-1}z_iM^i, \ \ z_i=\sum_{j\le i}x_jy_{i-j}.$$ Правда, здесь после вычисления надо осуществить переносы, когда цифры становятся не меньше Более эффективный метод умножения больших чисел впервые использовал А.А. Карацуба в 1962 г. Он использовал метод фильтрации (разделяй и властвуй), разделяя умножаемые числа на композицию двух поменьше: $$X=X_0+X_1*N, \ N=2^R, \ Y=Y_0+Y_1*N.$$ Здесь $$XY=X_0Y_0+N(X_0Y_1+X_1Y_0)+X_1Y_1N^2.$$ Среднее число вычисляется одним дополнительным умножением, используя результаты умножений крайних: $$X_0Y_1+X_1Y_0=(X_0+X_1)(Y_0+Y_1)-X_0Y_0-X_1Y_1.$$ Таким образом, принцип разделяй и властвуй для умножения двух $$T(n)=3T(\frac n2)+Cn.$$ Решая эту рекурсию получаем: \begin{equation}\label{Eq2.1} T(n)=C(2^k+3*2^{k-1}+...+3^k)=C(3^{k+1}-2^{k+1})=O(n^{\log 3}). \end{equation} В соответствии с приведенной мастер теоремой принципа разделяй и властвуй, число операций при умножении методом Карацуба оценивается величиной Впоследствии в 1969 г. Штрассеном найден аналог такого умножения и для матриц. Для этого разобьем матрицы $$X=\binom{A \ B}{C \ D}, \ Y=\binom{E \ F}{G \ H}, \ XY=\binom{AE+BG \ \ \ AF+BH}{CE+DG \ \ \ CF+DH}.$$ Вводя 7 произведений: $$P_1=A(F-H), \ P_2=(A+B)H, \ P_3=(C+D)E,$$ $$P_4=D(G-E), \ P_5=(A+D)(E+H),$$ $$P_6=(B-D)(G+H), \ P_7=(A-C)(E+F),$$ произведение матриц можно представить в виде: $$XY=\binom{P_5+P_4-P_2+P_6 \ \ \ \ \ \ \ P_1+P_2}{ \ \ \ \ \ \ \ \ \ \ \ \ P_3+P_4 \ \ \ \ \ \ \ \ \ P_1+P_5-P_3-P_7}.$$ Это приводит к рекурентному соотношению относительно необходимого количества операций для умножения матриц размера $$T(n)=7T(\frac n2)+\frac{9}{2}n^2.$$ Решая рекурентное соотношение получаем $$T(n)=O(n^{\log 7}), \ \log 7\approx 2.81.$$ Точнее, без учета операций с адресами элементов при Через оценку ранга умножения матриц добились уменьшения показателя степени, называемого предельной экспонентой умножения, до величины Умножение градуировкой В методе градуировки умножение переносится в умножение в градуированной алгебре. Например, для умножения двух многочленов от $$f(x)=f(x_1,x_2,...,x_k)=\sum_{0\le i_j<m_j}a[i_1,..,i_k]x_1^{i_1}...x_{k}^{i_k}, \phi(x)=\sum_i b[i_1,..,i_k]x_1^{i_1}...x_{k}^{i_k}$$ градуируем по степеням многочлена сопоставляя однородным элементам элементы группы $G=Z_{n_1}\bigoplus Z_{n_2}\bigoplus ...\bigoplus Z_{n_k}, n_i=2m_i-1.$ Здесь учитывается, что произведение двух многочленов, имеющих степень $$f=\sum_{g\in G}a(g)g \to \mu(f)=\sum_{g\in G}a(g)\mu(g).$$ В силу $$\psi=\sum_{g_k} c(g_k)g_k=(\sum_{g_i}a(g_i)g_i )(\sum_{g_j} b(g_j)g_j ), \ c(g_k)=\sum_{g_ig_j=g_k} a(g_i)b(g_j),$$ $$nc_{g_k}=\sum_{\mu} \mu(g_k^{-1})\mu(\psi)=\sum_i \sum_{\mu}c(g_i)\mu(g_k^{-1}g_i)=\sum_i \delta_k^i c(g_i)n.$$ Ясно, что меньшим количеством умножений нельзя вычислить произведение. Поэтому и здесь метод градуировки можно назвать алгоритмом от бога. Вычисление произведения требует предварительного вычисления Отметим, что в каждом произведении В случае не коммутативного умножения возникают следующие трудности. Произведения Удобнее работать с группой $$y^j=(y^j_{il}), \ y^j_{i,l}=\delta_{i}^{j\bigoplus l},(y^j)^2=1=E.$$ Здесь все операции сложения, умножения производятся покомпонентно (без переносов). В качестве характеров служат диагональные матрицы $$x^i=(x^i_{lj}), x^i_{lj}=\delta_l^j(-1)^{(i,j)}, (i,j)=\sum_{m=1}^k i_m*j_m, (x^i)^2=1=E.$$ Легко проверяется, что $$\mu_{t_1,t_2}(x^iy^j)=x^{t_1}y^{t_2}x^iy^j(x^{t_1}y^{t_2})^{-1}(x^iy^j)^{-1}=(-1)^{(t_1,j)-(t_2,i)}.$$ Этих характеров достаточно для выделения нужных коэффициентов многочлена. Однако, для выделения коэффициентов с произведений $$a(i_1,j_1)b(i_2,j_2)\mu(x^{i_1}y^{j_1}x^{i_2}y^{j_2})=a(i_1,j_1)b(i_2,j_2)(-1)^{(j_1,i_2)}\mu(x^{i_1+i_2}y^{j_1+j_2}$$ необходимо разделить члены с разными знаками $$\mu^*_{t_1,t_2}(x^iy^j)=(-1)^{(i,j)}\mu_{t_1,t_2}(x^iy^j).$$ Это соответствует значению транспонированной матрицы. У нечетных элементов значения характеров отличаются знаком. Этот набор характеров, совместно с предыдущим набором позволяет отличить порядок произведения в выражении $$(-1)^{(i_1,j_2)-(j_1,i_2)}=(-1)^{(i_1,j_1)+(i_2,j_2)+(i_1+i_2,j_1+j_2)}.$$ Это позволяет получить коэффициенты разложения произведения через произведения значений из |