Опубликован: 04.03.2008 | Доступ: свободный | Студентов: 1626 / 46 | Оценка: 4.56 / 3.67 | Длительность: 30:07:00
ISBN: 978-5-9556-0099-4
Специальности: Программист, Математик
Лекция 9:

Редуцированные базисы решетки. Редуцирование базиса в решетке

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >

Редуцирование базиса в решетке

В этом параграфе рассмотрим алгоритм построения редуцированного базиса решетки, полученный в работе [ 24 ] . Определение решетки и редуцированного базиса приведены в параграфе 19. Там же описаны основные свойства редуцированных базисов, которые понадобятся нам в алгоритмах факторизации многочленов.

Ниже сформулирован и обоснован алгоритм построения редуцированного базиса решетки. Построение редуцированного базиса ведем, последовательно присоединяя очередной ( k -ый) элемент исходного базиса решетки и редуцируя базис подрешетки, натянутой на векторы с 1-го по k -ый. Алгоритм содержит два основных шага: на одном из них мы из присоединяемого вектора вычитаем целые кратные векторов, уже включенных в редуцированный базис, чтобы обеспечить выполнение условия (19.4). При этом длина редуцированной части базиса не меняется. Второй шаг, направленный на выполнение условия 19.5, сводится к перестановке добавляемого вектора с последним вектором, уже включенным в редуцированный базис, при такой перестановке длина редуцированной части базиса уменьшается на 1. Переменная k указывает номер элемента, который пытаемся присоединить к редуцированной части базиса, т.е. редуцированная часть базиса содержит в каждый момент k-1 вектор. Начальное значение k равно 2, т. к. любой базис решетки, порождаемой одним вектором, является редуцированным (условия (19.4) и (19.5) выполняются автоматически, поскольку нет различных индексов).

В описании алгоритма редуцирования базиса пользуемся типом данных "решетка". В отличие от принятых ранее обозначений, здесь значения индексов принадлежат отрезку 1..n (а не 0..n-1 ), т.е.

\begin{equation}
\text{решетка: запись(\=ранг == $n$: $\mathbb Z +$} \\
                 \text{\qquad базис: \=вектор $b$ элементов типа (вектор
элементов }\\
                         \text{ \qquad \qquad типа $\mathbb R $ или $\mathbb Q $ с
индексом $1..n$) }\\
                          \text{\qquad \qquad  с индексом $1..n$}
\end{equation}

А33. АЛГОРИТМ (редуцирование-базиса).

\begin{equation} 
\text{Дано:\qquad &$L$ - решетка, задаваемая
исходным базисом}\\ 
\text{Надо: \qquad &$L$ - решетка,
задаваемая редуцированным базисом}\\
\text{Обозначения:\quad
        $n$ == $L$.ранг}\\
        \text{\qquad $b$ == $L$.базис}\\

\text{Переменные:\quad
      $\mu$-нижняя треугольная матрица  коэффициентов,}\\
                \text{\qquad \qquad  вычисляемых по формулам (19.1) и (19.2)}\\
     \text{\qquad $B$-вектор элементов типа $\mathbb R $ с индексом
$1..n$}
\end{equation}

Элементы вектора B представляют собой квадраты длин соответствующих векторов из ортогонального базиса b^*, вычисляемого по формулам (19.1) и (19.2).

\begin{equation*}
\text{Начало}\\
\text{начальная установка $(L, \mu , B)$}\\
\text{$k := 2$}\\
\text{цикл пока $k \leq  n$}\\
\text{\qquad обеспечить выполнение условия (19.4) для
                   $i=k$ и $j=k-1$}\\
\text{\qquad если условие (19.5) не
выполнено, то}\\
\text{\qquad \qquad переставить $k$-ый элемент базиса $b$ с
$(k-1)$-м}\\
\text{\qquad \qquad если$k > 2$ то}\\
\text{\qquad \qquad \qquad $k := k-1$}\\
\text{\qquad \qquad конец если}\\
\text{\qquad иначе}\\
\text{\qquad \qquad цикл для $j$ от $k-2$ до
$1$ шаг $-1$} \\
\text{\qquad \qquad \qquad обеспечить выполнение условия (19.4) для $k,j$}\\
\text{\qquad \qquad конец цикла}\\
\text{\qquad \qquad $k := k+1$}\\
\text{\qquad конец если}\\
\text{конец цикла}\\
\text{Конец}
\end{equation*}

Детализируем предложенный алгоритм.

А34. АЛГОРИТМ (начальная-установка).

\begin{equation*}\\
\text{Дано:\quad $L$-решетка}\\
\text{Надо: \qquad $\mu$ - нижняя  треугольная  матрица  коэффициентов,  }\\
           \text{\qquad \qquad вычисляемых  по    формулам (19.1) и (19.2).}\\
    \text{\qquad $B$ -  вектор элементов типа $\mathbb R $  с  индексом  $1..n$. Элементы }\\
	 \text{вектора   $B$   представляют   собой квадраты длин }\\
         \text{соответствующих   векторов   из  ортогонального }\\
         \text{базиса $b1$, вычисляемого по формулам (19.1) и (19.2).}}\\
\text{Переменные:\quad $b1$ -  вектор элементов типа (вектор элементов типа }\\
      \text{\qquad $\mathbb R $ с  индексом $1..n$)  с индексом $1..n$}\\
\text{Обозначения:
       \qquad $n$ == $L$.ранг }\\
       \text{\qquad $b$ == $L$.базис  \ исходный базис решетки }  \\
       \text{\qquad $(a,b)$ == скалярное произведение векторов}\\
\text{Начало}\\
\text{цикл для $q$ от $1$ до $n$}\\
\text{\qquad $b1[q] := b[q]$}\\
\text{\qquad цикл для $l$ от $1$ до $q-1$}\\
\text{\qquad \qquad $\mu [q,l] := \dfrac{(b[q],b1[l])}{B[l]}$}\\
\text{\qquad \qquad $b1[q]  := b1[q] - \mu [q,l]\cdot b1[l]$}\\
\text{\qquad конец цикла}\\
\text{\qquad $B[q] := (b1[q],b1[q])$}\\
\text{конец цикла}\\
\text{Конец}
\end{equation*}

Отметим, что в предлагаемой версии алгоритма переменная b1 (двумерный массив, соответствующий ортогональному базису b^* ) локальна, в остальной части алгоритма этот базис в явном виде не используется. Применяется вектор B, элементы которого представляют собой квадраты длин ортогонального базиса, что позволяет значительно экономить память, используемую основной программой (вместо двумерного массива хранится одномерный). При этом нужно проследить, как изменяются компоненты вектора B при различных выполняемых преобразованиях, что сделано при описании соответствующих предписаний.

А35. АЛГОРИТМ (обеспечить-выполнение-условия-(19.4)).

\begin{equation*}\\
\text{Дано:\quad $L$-решетка} \\
                \text{\qquad $\mu$- матрица "проекций"}\\
                \text{\qquad $k>j$ - индексы}\\
\text{Надо: \qquad $\mu$-треугольная матрица коэффициентов,}\\
             \text{\qquad \qquad вычисляемых по формулам (19.1) и (19.2).}\\
\text{Переменные:\quad $r$ - целое}\\
\text{Начало}\\
\text{если $| \mu [k,j]|  > 1/2$ то}\\
\text{\qquad $r :=$ ближайшее целое к $\mu [k,j]$}\\
\text{\qquad $b[k] := b[k] - r\cdot b[j]$}\\
\text{\qquad цикл для $i$ от $1$ до $j-1$}\\
\text{\qquad \qquad $\mu [k,i] := \mu [k,i] - r\cdot \mu [j,i]$}\\
\text{\qquad конец цикла}\\
\text{\qquad $\mu [k,j] := \mu [k,j] - r$}\\
\text{конец если}\\
\text{Конец}
\end{equation*}

Элементы нижней треугольной матрицы \mu вычисляются по формулам (19.2). В данном алгоритме меняем только вектор с индексом k. При этом меняется только k -ая строка матрицы \mu, из нее вычитается j -ая строка матрицы (\mu
-E), умноженная на r. ( E - единичная матрица.)

Прежде чем переходить к формулировке алгоритма перестановки k -го элемента базиса с (k-1) -м, выведем соответствующие формулы. Пусть b_1,\dots,  b_n - текущий базис, ему соответствует ортогональный базис b^* и нижняя треугольная матрица \mu. Элементы нового базиса обозначим буквой c с соответствующим индексом, соответствующий ортогональный базис - c^*, нижнюю треугольную матрицу - \nu. Вычислить элементы базиса c не представляет труда:

\begin{equation*}
 c_{k-1 } = b_k,\quad
  c_k = b_{k-1 },\quad
  c_i =  b_i\quad\text{для}\quad  i  \neq  k,k-1.
\end{equation*} ( 20.1)

Переходим к вычислению ортогонального базиса. Как отмечалось выше, левая часть равенства (19.5) представляет собой квадрат длины ортогонального дополнения i -го вектора к подпространству, порожденному векторами с 1-го по (i-2) -ой.

Таким образом,

\begin{equation}
    c_{k-1 }^*  = b_k^* + \mu _{k,k-1 }    b^*_{k-1 }. 
\end{equation} ( 20.2)

Для вычисления c_k^* спроектируем b_{k-1 }^* на ортогональное дополнение к \mathbb R  c_{k-1 }^*. Получим

\nu_{k,k-1}& = \frac{(b_{k-1}^*, c_{k-1}^* )}{(c_{k-1}^*,c_{k-1}^*)}\notag \\
   &= \mu_{k,k-1} | b_{k-1}^* |^2/| c_{k-1}^* |^2 ( 20.3)
c_k^*& = b_{k-1}^*   - \nu_{k,k-1}    c_{k-1}^*. ( 20.4)
c_i^* &= b_i^*\quad\text{для}\quad i \neq  k-1,k. ( 20.5)

Для вычисления коэффициентов \nu нам понадобится выразить старый ортогональный базис через новый. Из соотношений (20.2), (20.3) и (20.4) получаем

b_{k-1}^*&= \nu_{k,k-1 }    c_{k-1 }^*   + c_k^* ( 20.6)
b_k^*    &= (1 - \mu_{k,k-1 }\nu_{k,k-1})c_{k-1}^*- \mu_{k,k-1}c_k^*\notag\\
           &=(| b_k^*| ^2/| c_{k-1 }^*  | ^2)\cdot c_{k-1}^*  - \mu_{k,k-1}   
c_k^*. ( 20.7)

Подставив соотношения (20.1)-(20.7)в формулу (19.1) и приведя подобные члены, получим для i > k

\nu_{i,k-1}&= \mu _{i,k-1 }\nu_{k,k-1 }+ \mu _{i,k }  | b_k^*| ^2/| c_{k-1
}^*  | ^2, ( 20.8)
\nu_{i,k} &= \mu _{i,k-1}- \mu_{i,k }\mu_{k,k-1 }. ( 20.9)

Наконец,

\nu_{k-1,j}&=\mu_{k,j},\qquad \nu_{k,j} = \mu _{k-1,j }\quad\text{для}\quad 
1\leq j<k-1 ; ( 20.10)
\nu_{i,j}  &=\mu_{i,j}\quad\text{для}\quad 1\leq j<i\leq n,\quad \{i,j\}
\cap  \{k-1,k\} = \emptyset. ( 20.11)

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >
Марина Подлевских
Марина Подлевских

Пожалуйста, проясните ситуацию. Был выбран курс " Компьютерная алгебра" для самостоятельного изучения. Как теперь записаться на этот курс с целью получения диплома о повышении квалификации? На данный момент он имеет статус " изучаю". Если я пройду экзаменационный тест в таком статусе без оформления документов и оплаты диплома, придется ли еще раз регистрироваться на этот курс и заново проходить тестирование?