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

Алгоритмы Кронекера. Разложение на множители, свободные от квадратов. Факторизация

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >

p-адический случай.

Формально алгоритм факторизации с использованием поля p - адической метрики совпадает с алгоритмом, приведенным выше для поля \mathbb R :

А26. АЛГОРИТМ. (Факторизовать многочлен с помощью p-адической метрики)

\begin{equation}
\text{Начало}\\
\text{Выбрать простое число $p$.}\\
\text{Определить требуемую точность вычислений $\varepsilon$.}\\
\text{Найти все неприводимые над $R_p$ нормированные делители
$h_1,\dots,h_m$}\\
\text{\qquad полинома $f$ с точностью $\varepsilon$}\\
\text{$I:= \{  1,\dots,m\}$}\\
 \text{цикл для каждого подмножества $\{ i_1,\dots,i_k\} \subset I$}\\
\text{\qquad Округлить коэффициенты полинома $g(x) = a\cdot h_{i_1}\cdot\dots\cdot
h_{i_k}$}\\
\text{\qquad \qquad  до ближайшего целого}\\
\text{\qquad $g(x) :=  g(x)/\cont(g(x))$}\\
\text{\qquad  если $g(x)$ делит $f(x)$  то}\\
\text{\qquad \qquad запомнить множитель $g(x)$}\\
\text{\qquad \qquad $f(x) := f(x)/g(x)$}\\
\text{\qquad \qquad удалить из множества $I$ подмножество $\{
i_1,\dots,i_k\}$}\\
\text{\qquad конец если}\\
\text{конец цикла}\\
\text{Конец}
\end{equation}

Основные отличия заключаются в следующем.

Добавляется новый шаг алгоритма, заключающийся в выборе простого числа p. На выбор его накладывается два условия: во-первых, при переходе к вычетам по модулю p не должна понизиться степень полинома f, т.е. p не должно делить старший коэффициент полинома f ; во-вторых, после перехода к классам по модулю p полином f должен остаться свободным от квадратов, т.е. p не должно делить результант полиномов f и f'.

Отметим, что от выбора простого числа p может зависеть количество множителей в разложении полинома по модулю p. В некоторых системах выполняется разложение исходного полинома по модулю нескольких различных значений p (обычно до пяти значений), из них выбирается такое p, разложение по модулю которого имеет наименьшее количество сомножителей, и разложение продолжается по этому модулю. Это замечание относится только ко временным характеристикам алгоритма и носит вероятностный характер (нет алгоритма, позволяющего проверить, что разложение по какому-то модулю имеет минимальное возможное количество сомножителей).

Далее, вместо рациональных чисел, приближающих вещественные коэффициенты, будут использоваться классы по модулю p^i для натуральных значений i. Требуемая точность вычислений определяется как натуральное число s, так что для факторизации полинома f(x) \in \mathbb Z[x] нам нужно разложить на множители этот полином по модулю p^s. Округление коэффициентов полинома до ближайшего целого состоит в том, что представители коэффициентов берутся из симметричной системы вычетов.

Как определить требуемую точность вычислений?

Предположим, что f(x), g(x)  \in  \mathbb Q[x], причем g(x) делит f(x). Предположим, что мы умеем оценивать сверху какой-то величиной B абсолютную величину коэффициентов полинома g(x) в зависимости от коэффициентов исходного полинома f(x) и от старшего коэффициента полинома g(x) и от его степени. Таким образом, ошибок округления при нахождении делителя исходного полинома не будет, если используемая симметричная система содержит значения от -B до +B, т.е. , если s удовлетворяет неравенству p^s > 2B.

Учитывая предположение, что полином f не имеет линейных делителей, т.е. нужно искать неприводимые делители степени не выше n-2, где n=\deg f, и максимальное значение старшего коэффициента полинома g(x) равно старшему коэффициенту a исходного полинома, шаг алгоритма

Определить требуемую точность вычислений \varepsilon }

принимает вид:

Найти наименьшее натуральное s , такое, что p^s
>  2^{n-1}\|f\|.

Перейдем теперь к рассмотрению основного шага алгоритма:

Найти все неприводимые над R_p нормированные делители h_1,\dots,h_m полинома f с точностью \varepsilon }

Детализируем его следующим образом.

\begin{equation}
\text{\qquad Найти нулевое приближение разложения}\\
\text{\qquad Оценить необходимую точность вычислений}\\
\text{\qquad  цикл пока не достигнута требуемая точность}\\
\text{\qquad \qquad выполнить шаг итерации}\\
\text{\qquad конец цикла}
\end{equation}

Нулевое приближение разложения f(x) в поле p - адических чисел получается из разложения полинома f(x) в поле вычетов по модулю p. Это разложение выполняется с помощью алгоритма Берлекэмпа.

Итерационный шаг уточнения разложения заключается в переходе от сравнения по модулю p^k к сравнению по модулю q=p^t, где t  >  k. Этот переход выполняется с помощью леммы Гензеля. Наиболее часто используется случай t=2k (квадратичный подъем) или t=k+1 (линейный подъем). При этом в одной и той же системе могут применяться оба метода: сначала квадратичный, а после, когда применение квадратичного метода приведет к слишком большим числам, - линейный. Итерационный процесс заканчивается, когда показатель степени t будет не меньше значения s, определенного выше. В качестве представителей системы вычетов по модулю p^t берется сбалансированная система, т.е. целые числа, не превосходящие по абсолютной величине числа (p^t - 1)/2.

Проверка испытуемой комбинации на получение делителя полинома f(x) осуществляется пробным делением.

Отметим, что при переборе возможных комбинаций сомножителей мы можем ограничиться случаем, когда рассматриваемая комбинация содержит не более половины из общего количества неприводимых (над R_p ) сомножителей.

С учетом сделанных замечаний алгоритм факторизации принимает вид:

А27. АЛГОРИТМ (разложить на неприводимые (f,G) ).

\begin{equation}
 \text{Дано: \quad $f(x) \in\mathbb Z[x]$ }\\
\text{ Надо: \qquad $G$-разложение;} \\
 \text{Переменные:\quad $U$- разложение}\\
\text{\qquad множество $M$ элементов типа $\N$}\\
\text{Начало}\\
\text{выбрать простое число $p$}\\
\text{\qquad \qquad \qquad \quad // $p$ не должно делить $\textrm{lc} (f)$ и
результант $(f,f')$}\\
\text{$B := 2^{m-1}  \| f\|$\qquad \qquad \qquad \quad    // оценивается необходимая
точность вычислений}\\
\text{$s := [\log_p  B] + 1$}\\
\text{$q := p^s$}\\
\text{$f_1 (x) := \dfrac{f(x)}{\textrm{lc} (f)}\pmod q$}\\
\text{$U:=$нулевое приближение разложения $f_1 (x)$}\\
\text{поднять разложение $U$ до разложения по модулю $q$} \\
\text{\qquad \qquad \qquad // достигается кратным применением леммы Гензеля}\\
\text{$r := U.$число\_множителей}\\
\text{$t := 1$}\\
\text{$M := \{ 1, \dots, r\}$}\\
\text{цикл пока $t\leq [r/2]$}\\
\text{\qquad цикл для каждого подмножества $\{ i_1 , \dots, i_t \} \subset M$ пока $t\leq [\frac r2]$}\\
\text{\qquad \qquad $g(x) := \textrm{lc} (f) u_{i_1}(x) u_{i_2}(x) \dots u_{i_t}(x)$}\\
\text{\qquad \qquad $g(x) := g(x)/\cont(g)$}\\
\text{\qquad \qquad если $f(x)$ делится на $g(x)$ то}\\
\text{\qquad \qquad \qquad $G$.добавить $g(x)$}\\
\text{\qquad \qquad \qquad $f(x) := f(x)/g(x)$}\\
\text{\qquad \qquad \qquad $r := r - t$}\\
\text{\qquad \qquad \qquad $M$.удалить $\{i_1, i_2 ,\dots, i_t\}$}\\
\text{\qquad \qquad конец если}\\
\text{\qquad конец цикла}\\
\text{\qquad $t := t + 1$}\\
\text{конец цикла}\\
\text{$G$.добавить $f(x)$}\\
\text{Конец}
\end{equation}
< Лекция 6 || Лекция 7: 12345 || Лекция 8 >
Марина Подлевских
Марина Подлевских

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