
Литература / Дискретная математика (пособие ЛЭТИ) / Дискретная математика (пособие ЛЭТИ)
.pdfÑ.Покупатель:
получает подписанную банком купюру:
z= yd = (f(x) re)d = fd(x) red ≡ fd(x) r (m)
èснимает затемняющий множитель делит на r;
посылает продавцу подписанную банком купюру x; fd(x) .
D.Продавец:
проверяет подлинность полученной купюры (x; y) следующим обра зом: ye ≡ f(x) (m);
проверяет, не была ли купюра потрачена покупателем ранее, для чего посылает ее на проверку в банк.
Å.Áàíê:
сравнивает купюру (x; y) с выданными ранее; если купюра не исполь зовалась, то продавцу посылается подтверждение, а купюра заносит ся в список использованных (заметим, что благодаря затемняющему множителю банк не знает, кому была выдана, точнее, подписана, эта купюра);
на счет продавца начисляется денежная единица.
4.Многочлены
4.1.Арифметика многочленов
Определение 4.1. Алгебраическое выражение с переменной x назы вается многочленом над полем K, если оно может быть представлено в
âèäå
p(x) = anxn + an−1xn−1 + · · · + a1x + a0, ãäå ai K, an 6= 0.
При этом используются следующие обозначения:
def
K[x] = множество многочленов от переменной x над полем K,
def
l(p) = старший коэффициент многочлена, l(p) = an,
def
deg p = степень многочлена, deg p = n.
Арифметические операции с многочленами в некотором смысле про ще операций с натуральными числами, так как операции межразрядного переноса для многочленов отсутствуют.
40
Многочлен степени n определяется упорядоченным набором своих n + 1 коэффициентов: {anan−1 · · · a0}.
Замечание 4.1. Между многочленами и позиционными записями натуральных чисел есть очевидная аналогия, которая распространяется
и на алгоритмы выполнения арифметических операций над многочлена ми.
Замечание 4.2. В дальнейшем, когда это не вызывает разночтений, вместо p(x) будем писать p.
Сложение и умножение многочлена на число осуществляется как сложение-вычитание векторов.
Алгоритм сложения двух многочленов :
pn(x) = anxn + · · · + a0 è qm(x) = bmxm + · · · + b0, n > m
i : = 0; |
|
|
ÖÈÊË ÏÎ i ÎÒ 0 ÄÎ m |
ci : = ai + bi |
ÊÖ |
ÖÈÊË ÏÎ i ÎÒ m + 1 ÄÎ n |
ci : = ai |
ÊÖ |
Умножение многочленов. Произведение многочленов pn степени n è qm степени m вычисляется по формуле
n+m
XX
pn qm = aibj xk.
k=0 i+j=k
Алгоритм умножения многочленов. Считаем, что изначально
все коэффициенты ci результирующего многочлена pnqm равны 0.
ÖÈÊË ÏÎ i ÎÒ 0 ÄÎ n + m
ÖÈÊË ÏÎ j ÎÒ 0 ÄÎ i ci : = ci + aj · bi−j ÊÖ
ÊÖ
Заметим, что l(pq) = l(p) l(q) è deg(pq) = deg(p) + deg(q).
Деление многочленов.
Определение 4.2. Пусть m, n K [x] и m = n q + r, причем
deg r < deg n. Тогда q называется частным от деления m на n, а r остатком.
Существование m и r можно обосновать конструктивно. Построим для этого алгоритм, аналогичный делению чисел уголком.
41

Алгоритм деления многочленов.
r : = m, q : = 0;
ÖÈÊË ÏÎÊÀ deg r > deg n
t : = l(r) · xdeg r−deg n; q : = q + t; r : = r − t · n; l(n)
ÊÖ
После каждого шага цикла степень r уменьшается, но равенство
m = nq + r сохраняется. Когда степень r станет меньше степени n, алго ритм свою работу заканчивает.
Замечание 4.3. Деление в алгоритме производится один раз в
1
начале работы нужно вычислить l(n) .
Для многочленов в K[x] справедливо представление, аналогичное (1.1) для чисел из Z.
Теорема 4.1. Пусть m, n K[x], тогда если n 6= const, то существу ют и единственны многочлены q и r, такие, что справедливо представ ление m = nq + r, причем deg r < deg n.
Доказательство. Существование доказано ранее. Единственность докажем от противного. Пусть m = n q1 + r1, m = n q2 + r2. Тогда, после
вычитания равенств, получим n(q1 − q2) = r1 − r2. Степень левой части не меньше deg n, если только q1 не совпадает с q2; степень же правой части меньше deg n, òàê êàê deg r1 < deg n è deg r2 < deg n. Итак, равенство будет справедливо только при q1 = q2 и, следовательно, r1 = r2.
4.2.Схема Горнера
Рассмотрим результат деления многочлена p(x) K[x] на многочлен
g(x) = x − a K[x]:
p(x) = (x − a)q(x) + r(x), ãäå deg r(x) < deg(x − a) = 1,
ò. å. deg r(x) = 0 è r(x) = const = r.
Замечание 4.4. deg q(x) = deg p(x) − 1.
Теорема 4.2 (Безу). Остаток от деления многочлена p(x) на x −a равен значению многочлена p(a).
Доказательство. p(x) = (x − a)q(x) + r, следовательно, p(a) = r.
42
Следствие 4.1. Многочлен x − a является делителем многочлена p(x) тогда и только тогда, когда p(a) = 0.
Замечание 4.5. Теорема Безу связывает 2 разных взгляда на много члены алгебраический (деление многочленов, остаток) и аналитический
(вычисление значений многочлена как функции r).
На основании теоремы Безу в основу вычисления многочлена может быть положен алгоритм деления многочлена на двучлен. Этот алгоритм называется схемой Горнера. Рассмотрим его подробнее, положив
p(x) = anxn + an−1xn−1 + · · · + akxk + a1x + a0, q(x) = bn−1xn−1 + bn−2xn−2 + · · · + bkxk + b1x + b0.
Тогда из равенства p(x) = (x − a)q(a) + r получаем:
anxn+an−1xn−1+· · ·+a1x+a0 = (x−a)(bn−1xn−1+bn−2xn−2+· · ·+b1x+b0)+r.
Раскрыв скобки и приведя подобные, имеем:
anxn + an−1xn−1 + · · · + akxk + a1x + a0 =
bn−1xn +(bn−2 −abn−1)xn−1 +· · ·+(bk−1 −abk)xk +· · ·+(b0 −ab1)x+(r−ab0).
В силу единственности канонического представления многочлена полу |
|||||||||||||
÷àåì: |
|
|
abn−1, |
|
|
|
|
|
|
bn−2 |
= an−1 + abn−1, |
||
an−1 = bn−2 |
|
|
|
|
|
|
|||||||
|
an = bn−1 |
, |
− |
|
|
|
|
|
|
|
bn−1 |
= an, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
· · · · · · · · · · · · · · · |
выражая |
|
|
находим |
|
· · · · · · · · · · · · · · · |
||||||
ak = bk 1 |
|
abk, |
|
|
|
b |
, |
|
bk 1 = ak + abk, |
||||
|
|
− |
|
|
|
|
|
k |
|
|
|
− |
|
|
|
− |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a· ·1·=· ·b·0· ·−· ·ab· ·1·,· · |
|
|
|
|
|
|
b·0· ·=· ·a·1· ·+· ·ab· ·1·,· · |
||||||
a0 = r ab0, |
|
|
|
|
|
|
r = a0 + ab0. |
||||||
|
|
− |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
|
|
|
Нетрудно видеть, что первые |
|
равенств позволяют последовательно (от |
старших к младшим) находить коэффициенты многочлена q(x) частно го от деления p(x) на x − a. Последнее равенство формула вычисления
остатка r.
Эту последовательность вычисления описывает следующая рекуррент ная формула: bn−1 = an; bk−1 = ak + abk, где k меняется от n − 1 до 0,
ïðè ýòîì b−1 обозначает остаток r.
Замечание 4.6. При ручных вычислениях промежуточные вычисле ния схемы Горнера удобно помещать в следующей таблице:
43
an |
an−1 |
an−2 |
· · · |
a1 |
a0 |
bn−1 |
bn−2 |
bn−3 |
· · · |
b0 |
b−1 = r |
Каждое следующее вычисление использует только значение a и числа, помещенные в соседних (левой и верхней) клетках.
· · · |
ak |
· · · |
bk |
bk−1 = ak + abk |
· · · |
Следствие 4.2. Схему Горнера можно применять многократно: к частному q(x) от деления p(x) на x − a, затем к получившемуся част
íîìó q1(x) è ò. ä.
В результате получаются коэффициенты разложения многочлена p(x) по степеням x − a (от младших степеней к старшим):
p(x) = (x − a)q(x) + r0 = (x − a)[(x − a)q1(x) + r1] + r0 = (x − a)2q1(x)+ + r1(x − a) + r0 = · · · = rn(x − a)n + rn−1(x − a)n−1 + · · · + r1(x − a) + r0.
Замечание 4.7. При выполнении вычислений вручную протокол вы числений удобно вести в следующей треугольной таблице:
an |
an−1 |
an−2 |
. . . |
a1 |
a0 |
bn−1 |
bn−2 |
. . . |
. . . |
b0 |
b−1 = r0 |
cn−2 |
. . . |
. . . |
. . . |
c−1 = r1 |
|
. . . |
. . . |
. . . |
|
|
|
|
|
|
|
|
|
. . . |
. . . |
|
|
|
|
|
|
|
|
|
|
. . . |
|
|
|
|
|
|
|
|
|
|
|
rn |
|
|
|
|
|
Таблица заполняется слева направо и сверху вниз по правилу, указан ному ранее.
Упражнение 4.1. Написать алгоритм генерации коэффициентов многочлена r(x) : r0, r1, . . . , rn, полученного из многочлена p(x) с коэф
фициентами an, an−1, . . . , a0 разложением по степеням x − a.
4.3.Алгоритм Евклида для многочленов. Линейное представление НОД
1.Алгоритм Евклида для многочленов не отличается от алгоритма деления чисел при соответствующей интерпретации входящих в него пере менных и операций.
44
Сравним определения деления нацело, лежащие в основе алгоритма Евклида, для чисел и многочленов.
n = m q + r |
p(x) = g(x) q(x) + r(x) |
|
|
0 6 r < |m| |
0 6 deg r(x) < deg g(x) |
q частное, r остаток |
q(x) частное, r(x) остаток |
|
|
Видно, что определения отличаются лишь характеристиками (абсо лютной величиной числа, степенью многочлена), используемыми для на хождения остатка и частного.
Несмотря на то что частное и остаток при делении как целых чисел, так и многочленов, определяются однозначно, выбор наибольшего общего делителя многочленов неоднозначен. Это связано с тем, что НОД опре деляется как общий делитель наибольшей степени, а таких многочленов
бесконечно много (если d(x) ÍÎÄ p(x) è g(x), òî cd(x) ïðè c 6= 0 также будет наибольшим общим делителем этих многочленов). Можно было бы среди всех наибольших общих делителей выбрать многочлен с единичным старшим коэффициентом, тогда НОД будет определен единственным обра зом. Однако для вычислений это не всегда удобно. Например, можно рас смотреть модификацию стандартного алгоритма Евклида с домножением промежуточных результатов на ненулевую константу, что позволит, находя НОД целочисленных многочленов, избежать дробных коэффициентов.
Пример 4.1. Найдем D(2x2 + x − 1, 3x2 + 2x − 1).
1)D(2x2 + x − 1, 3x2 + 2x − 1) = D(6x2 + 3x + 3, 3x2 + 2x − 1).
2)D(6x2 + 3x − 3, 3x2 + 2x − 1) = D(−x − 1, 3x2 + 2x − 1).
3)D(−x − 1, 3x2 + 2x − 1) = D(−x − 1, 0).
4)D(−x − 1, 0) = −x − 1.
Определение 4.3. Многочлены p и g называют взаимно простыми,
если они не имеют отличных от константы общих делителей.
2. Линейное представление наибольшего общего делителя многочленов находится по расширенному алгоритму Евклида:
p a + g b = d, ãäå d = D(p, g), à a è b многочлены, получаемые в результате работы расширенного алгоритма Евклида.
Упражнение 4.2. Доказать, что deg a < deg g и deg b < deg p.
Замечание 4.8. Если p и g взаимно просты, то в результате рабо
ты расширенного алгоритма Евклида может получиться разложение, в котором d = const 6= 1.
45

Пример 4.2. Найдем линейное представление D(x3 − 1; x2 + 1).
|
|
|
x |
3 |
− 1 |
2 |
+ 1 |
|
(1 ; 0) |
|
(0 ; 1) |
|
|
|
|
|
x2 |
|
|
|
|||||
|
|
|
|
|
|
|
(1 ; −x) |
|
(0 ; 1) |
|
||
|
|
|
−x − 1 |
x + 1 |
|
|
|
|||||
(x |
3 |
|
−x − 1 |
|
22 |
|
(1 ; 2−x) |
|
x − 1 ;. −x2 + x + 1 |
|
||
|
|
|
|
|
||||||||
|
− 1)(x − 1) + (x |
+ 1)(−x + x + 1) = 2 |
4.4.Китайская теорема об остатках для многочленов. Интерполяционная формула Лагранжа
Аналогично алгоритму Евклида, на многочлены переносится и китай ская теорема об остатках.
Теорема 4.3. Рассмотрим систему сравнений
p ≡ r1(m1), p ≡ r2(m2), . . . , p ≡ rn(mn).
Если многочлены m1, m2, . . . , mn
n |
|
m |
|
Xi |
|
||
p ≡ cidiri |
(mod m), ãäå m = m1 · · · mn, ci = |
|
, dici ≡ 1 (mod mi). |
mi |
|||
=1 |
|
|
|
Замечание 4.9. Доказательство теоремы полностью идентично до казательству аналогичной теоремы для чисел (см. теорему 3.13).
Замечание 4.10. Решение сравнения dici ≡ 1 (mod mi) осуществля ется применением расширенного алгоритма Евклида к взаимно простым многочленам ci, mi :
a a
cia + mib = const 6= 0, тогда ci const ≡ 1 (mi), откуда di ≡ const (mi).
Теорема 4.4 (интерполяционная формула Лагранжа). Пусть
deg p = n и известны значения многочлена p в n + 1 различных точках:
p(x0) = y0, p(x1) = y1, . . . , p(xn) = yn,
тогда |
n |
(x − x0) · · · (x − xi−1)(x − xi+1) · · · (x − xn) |
|
|
|||||||||||||
|
|
|
|||||||||||||||
|
p(x) = |
|
yi . |
||||||||||||||
|
|
||||||||||||||||
|
Xi |
(xi |
− |
x0) |
· · · |
(xi |
− |
− |
1)(xi |
− |
xi+1) |
· · · |
(xi |
− |
xn) |
|
|
|
=0 |
|
|
|
xi |
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Доказательство. Интерпретируем задачу в терминах арифметики многочленов. По теореме Безу: p(xi) = yi тогда и только тогда, когда
46

p(x) ≡yi (mod (x−xi)). Многочлены mi = x−xi попарно взаимно просты, è p можно найти применением китайской теоремы об остатках:
n |
n |
m |
|
|
Y |
Y |
Y |
||
|
||||
ri = yi; m = |
mi = (x − xk); ci = |
|
= (x − xk), |
|
mi |
||||
k=0 |
k=0 |
|
k6=i |
тогда di удовлетворяет уравнению
cidi + mib = 1, ãäå deg di < deg mi = deg(x − xi) = 1, |
(4.1) |
откуда deg di = 0, ò. å. di (x) = const. Подставив в (4.1) x = xi, получим
|
|
|
|
|
|
|
|
|
1 |
. |
||
ci(xi)di +mi(xi)b(xi) = 1, íî mi(xi) = xi −xi = 0, следовательно, di = |
|
|||||||||||
ci(xi) |
||||||||||||
Отсюда по китайской теореме об остатках |
|
Q(xi |
|
xk)yi. |
||||||||
p ≡ cidiri = |
|
ci(xi) yi = |
|
|
||||||||
n |
n |
c |
i |
n |
k=i |
(x |
− xi) |
|||||
X |
Xi |
|
X |
6 |
|
|
|
|
|
|
||
|
|
|
k=i |
|
− |
|
|
|
|
|||
i=0 |
=0 |
|
|
|
i=0 |
Q |
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
4.5.Интерполяционный метод Ньютона
При добавлении узлов интерполяции метод Лагранжа, описанный в 4.4, требует заново строить интерполяционный многочлен. Рассмотрим дру гой подход, позволяющий существенно сократить вычисления при добавле нии узлов интерполяции.
Пусть задано n точек интерполяции. Будем последовательно строить
интерполяционные полиномы S1(x), S2(x), . . . , Sn(x) äëÿ m = 1, 2, . . . , n точек.
Очевидно, что S1(x) = y1. Пусть уже построены интерполяционные полиномы для m = 1, 2, . . . , k − 1 точек. Проведем построение для m = k.
Заметим, что полином Sk(x) − Sk−1(x) по условию обращается в нуль при x = x1, x2, . . . , xk−1. Следовательно, Sk(x) − Sk−1(x)
(x − x1)(x − x2) · · · (x − xk−1). Íî deg(Sk(x) − Sk−1(x)) < k, поэтому
Sk(x) − Sk−1(x) = Ak(x − x1)(x − x2) · · · (x − xk−1).
Полагая x = xk, получаем формулу для вычисления Ak:
yk − Sk−1(xk)
Ak = (x − x1)(x − x2) · · · (x − xk−1) .
Для последнего полинома Sn(x) справедливо представление
Sn(x) = A1 + A2(x − x1) + · · · + An(x − x1)(x − x2) · · · (x − xn−1).
47

Пример 4.3.
x |
−1 |
0 |
1 |
S3(x) = A1 + A2(x + 1) + A3(x + 1)x. |
|
y |
−1 |
2 |
|||
3 |
|
1)x1 = −1 → A1 = 3.
2)x2 = 0 → A1 + A2 = −1 → A2 = −4.
3)x3 = 1 → A1 + 2A2 + 2A3 = 2 → A3 = 7/2.
7 |
7 |
1 |
||||
S3(x) = 3 − 4(x + 1) + |
|
(x + 1)x = |
|
x2 − |
|
x − 1. |
2 |
2 |
2 |
Добавим еще один узел интерполяции {x4 = 3, y4 = 0}. Тогда
S4(x) = S3(x) + A4(x + 1)x(x − 1).
4) x4 = 3 → A1 + 4A2 + 12A3 + 24A4 = 0 → A4 = −29/24.
|
29 |
|
7 |
17 |
||||
S4(x) = − |
|
x3 |
+ |
|
x2 |
+ |
|
x − 1. |
24 |
2 |
24 |
4.6.Разложение многочлена на свободные
от квадратов множители
Определение 4.4. Представление многочлена p K[x] в виде
|
p = p1 · p22 · p33 · · · pnn, p1p2 · · · pn K[x], |
ãäå pi |
произведение различных неприводимых над K многочленов, при |
÷åì pi |
взаимно прост с pj (j 6= i), называется разложением многочлена |
p на свободные от квадратов множители p1, p2, . . . , pn.
Если для разложения многочлена на неприводимые множители эф фективного алгоритма, по-видимому, нет, то для разложения на свободные от квадратов множители такой алгоритм существует и основан на исполь зовании алгоритма Евклида.
В дальнейшем будем рассматривать многочлены над полем веществен ных чисел.
Лемма 4.1. Åñëè p = qk m, где p, q, m R[x], а q неприводимый в R[x] многочлен и взаимно простой с m, то производная p 0 может быть записана в виде qk−1 n, где q и n взаимно просты.
Доказательство.
p0 = qk m 0 = k qk−1 q0 m + qk m0 = qk−1 (kmq0 + qm0).
Пусть n = kmq0 + qm0. Докажем, что q q неприводим в R [x], то взаимная простота
è n взаимно просты. Так как q è n равносильна тому, что
48

n не делится на q. Íî n = kmq0 + qm0. Åñëè áû n делилось на q, òî íà q
делилось бы и mq0. Íî q0 |
íà q не делится, так как deg q0 |
< deg q, поэтому |
|||
íà q должно делиться m, что противоречит условию. |
|
|
|
||
Следствие 4.3. Åñëè p = q1k1 · · · qnkn , ãäå q1, . . . , qn |
неприводимы в |
||||
R[x], òî p 0 = q1k1−1 · · · qnkn−1 q, где q взаимно прост с q1, . . . , qn. |
|||||
Алгоритм разложения на свободные от квадратов множи |
|||||
òåëè. |
|
|
|
|
|
j := 1 |
|
|
|
|
|
ÖÈÊË-ÏÎÊÀ p 6= const {p = q1k1 · · · qnkn } |
|
|
|
|
|
k : = D(p, p0); |
(k = q1k1−1q2k2−1 · · · qnkn−1 = Yi |
qiki−1) |
|||
l : = p/k |
(l = q1q2 · · · qn = Yi |
qi) |
|
|
|
m : = D(l, p0); |
|
kYi |
|
|
|
(m = |
qi) |
|
|
|
|
|
|
>1 |
|
|
|
|
|
kYi |
|
|
|
pj : = l/m; j : = j + 1; |
(pj = |
qi) |
|
|
|
|
|
=1 |
|
|
|
p : = k |
(повторение алгоритма для многочлена, |
||||
|
у которого степени неприводимых |
||||
ÊÖ |
множителей уменьшены на 1) |
5.Теория множеств и комбинаторика
5.1.Кодирование с исправлением ошибок. Граница
Хемминга
Определение 5.1. Неотрицательная функция d(a, b) : M Ч M →
R+ называется функцией расстояния (или метрикой) на множестве M, если выполнены следующие условия (аксиомы метрики):
1) d(a, b) > 0, d(a, b) = 0 тогда и только тогда, когда a = b;
2)d(a, b) = d(b, a);
3)d(a, b) + d(b, c) > d(a, c).
Определение 5.2. Кодируем каждый символ a = (a1, a2, . . . , am) m двоичными разрядами, ai = 0, 1, i 1 : m. Определим бинарную операцию на множестве кодовых символов:
def
a b = c = (c1, c2, . . . , cm), ãäå ci =< ai + bi >2 .
49