Министерство образования Российской Федерации ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Кафедра программного обеспечения ...
55 downloads
189 Views
817KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство образования Российской Федерации ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Кафедра программного обеспечения вычислительной техники и автоматизированных систем
Д.В. Домашова Н.Ф. Бахарева В.А. Стенюшкина
МЕТОДИЧЕСКИЕ УКАЗАНИЯ к лабораторным работам по курсу “Дискретная математика”
Оренбург 2000
4
МЕТОДИЧЕСКИЕ УКАЗАНИЯ к лабораторным работам по курсу “Дискретная математика” Тема 1 Алгебраические структуры 1.1 Общие понятия Определение. Алгебраическая структура есть множество вместе с операциями определенными на этом множестве: , A–носитель, S–сигнатура. (Структура вместе с теоремами, правилами вычислений и вывода называется также алгебраической структурой) Определение. Если – алгебраическая структура и B ⊂ A, то она называется подструктурой. Пример. (Z, ⊕ ) – структура, (2Z,+) – подструктура. Определение. Пусть (A, ⊗ ), (C, ⊕ ) – алгебраические структуры. Если существует отображение ϕ : A → C: ∀ x,y ∈ A выполняется ϕ ( x ⊗ y ) = ϕ ( x) ⊕ ϕ ( y ) , то ϕ называется гомоморфизмом. Пример. (]0,+∞[,•), ( R,+) ϕ : x α ln x ⇒ ln xy = ln x + ln y , т.е. ϕ – гомоморфизмом.
1.2 Простейшие структуры Определение. Полугруппой называется множество S с бинарной операx, y, z ∈ S. цией ⊗ удовлетворяющей ассоциативности: x ⊕ ( y ⊗ z ) = ( x ⊕ y ) ⊕ z , Определение. Моноидом называется множество M вместе с бинарной операцией ⊗ : а) ⊗ – ассоциативна; б) ∃ u ∈ M: u ⊗ x = x = x ⊗ u для ∀x ∈ M. U - называется единицей по отношению к операции ⊗ . Полугруппы и моноиды имеют особое значение при обработке строк символов и теории языков. Пример. Пусть A={x,y,z}, где x, y, z– просто символы, A – алфавит. Определим A ∗ как множество всех строк символов в A. Тогда x, y, z , xx, xy, xyz,.. ∈ A ∗ . На A ∗ вводится операция конкатенации O: если α , β ⊂ A ∗ → αOβ = αβ . Длина строки – число символов. ∧ ∈ A ∗ , ∧ = 0 , ∧ Oα = αO ∧ = α для ∀α , → для ∀ алфавита A строка < A ∗ , O> является моноидом с единицей ∧ . Определение. Группой G называется множество с бинарной операцией ⊗: а) ⊗ – ассоциативна; б) ∃ u ∈ G (единица по отношению к ⊗ ): u ⊗ x = x = x ⊗ u для ∀x ∈ G; в) каждому элементу x ∈ G соответствующий элемент y ∈ G: ( x ⊗ y ) = u = y (⊗) x –y называют обратным элементом к x по отношению к ⊗ . 5
1.3 Кольца и поля Определение. Кольцом называется множество R с двумя бинарными операциями ⊗ и ⊕ : а) ⊗ – ассоциативна; б) ⊕ – ассоциативна, коммутативна, имеет нуль, ∃ обратный элемент по сложению. Операция ⊗ дистрибутивна по отношению к ⊕ : x ⊗ ( y ⊕ z) = ( x ⊗ y) ⊕ ( x ⊗ y) , ( x ⊕ y ) ⊗ z = ( x ⊗ z ) ⊕ ( y ⊗ z ) ∀ x, y, z ∈ R Кольцо называется коммутативным, если операция умножения ⊗ коммутативна. Называется кольцо с единицей, если ∃ единица относительно умножения. В кольце (R, ⊗ , ⊕ ) для ∀ a, b ∈ R выпишется: 0*a = a*0 = 0 a ⊗ (−b) = (−a ) ⊕ b = −(a ⊗ b) ( − a ) ⊗ ( −b ) = a ⊗ b
В кольце есть делители нуля, то есть a ≠ 0, b ≠ 0, но ab=0 (ab–делителя нуля) (Для численного кольца: если произведение двух чисел =0, то хотя бы один из множителей =0) Определим операции: а) f(x)+g(x)=c(x): ∀ x=x0 c(x0)=f(x0)+g(x0); б) f(x)*g(x)=c(x): ∀ x=x0 c(x0)=f(x0)*g(x0); в) f(x) ≡ 0 – нуль Все свойства кольца выполнены, так как они сводятся к обычным операциям над числами => совокупность функций, определенных для ∀ действительного x, после введения описанным выше способом операций сложения и умножения на превращаются в кольцо. Покажем, что это кольцо обладает свойством делителей на 0: Построим: 0, х ≤ 0 x, x ≤ 0 f ( x) = , g ( x) = 1, х > 0 0, x > 0
Обе функции отличны от нуля, так как не при всех x равны нулю их значения, но f(x)+g(x) ≡ 0 => f(x) и g(x) – делители 0. Замечание. Ни в каком кольце невозможно деление на 0. Разделить элемент a на нуль, означает найти в кольце такой элемент х, что 0*х=a, при a ≠ 0 это невозможно, то есть левая часть по определению умножения на 0 в кольце =0. Определение. Полем называется множество F с двумя определенными на нем бинарными операциями – сложением ⊕ и ⊗ умножением (F, ⊗ , ⊕ ), которые удовлетворяют условиям: а) Сложение коммутативно: x ⊕ y=y ⊕ x для ∀ x,y ∈ F; б) Сложение ассоциативно: x ⊕ (y ⊕ z)=(x ⊕ y) ⊕ z для ∀ x,y,z ∈ F; в) ∃ элемент, обозначим O: x ⊕ O=x ∀ x ∈ F. O называется аддитивной единицей или нулем; 6
г) Для ∀ x ∈ F ∃ y ∈ F: x ⊕ y=0 ; y - называется аддитивной обратной к x и обозначаем – x; д) Операция умножения коммутативна : x ⊗ y=y ⊗ x для ∀ x,y ∈ F; е) Операция умножения ассоциативна: x ⊗ (y ⊗ z)=(x ⊗ y) ⊗ z для ∀ x, y, z ∈ F; ж) ∃ элемент, обозначим 1: 1 ≠ 0 и x ⊗ 1=x ∀ x ∈ F. 1 называется мультипликативной единицей или единицей; з) Для ∀ x ∈ F\{0} ∃ y ∈ F: x ⊗ y=1; y - называется мультипликативной обратной к x и обозначаем x −1 ; и) Дистрибутивность: x ⊗ (y ⊕ z)=(x ⊗ y) ⊕ (x ⊗ z); Определение. Характеристикой поля F называется наименьшее положительное целое число p (если оно существует) для которого p*a=0, при ∀a∈F Если такого натурального числа p не существует => характеристика равна нулю. Если характеристика конечна и равна p => p –простое. Поля a, r, c – поля нулевой характеристики Поля Zm – характеристики m
1.4 Кольцо класса вычетов До сих пор мы рассматривали бесконечные кольца, теперь рассмотрим пример конечного кольца и конечных полей. Определение. Целые числа a и b называются сравнимыми по модулю n (a ≡ b mod n) на n один и тот же остаток, то есть если их разность нацело делится на n. Следовательно все кольца целых чисел распадаются на n непересекающихся классов: С0, С1, …, Сn-1, сравнимых между собой по модулю n чисел, где Ck – состоит из чисел, которые при делении на n дают остаток =k. Введем операцию + и * : C , если k + l < n ; а) C k + C l = k +l C k +l − n , если k + l ≥ n
*.
б) Ck*Cl= Cr, где r=(k*l) mod n; Система классов С0, С1, …, Сn будет кольцом по отношению к операциям + и
С0 – роль нуля. Ck+C0= Ck Ck*C0= C0 Противоположным для класса Ck, k=1,n-1 будет класс Cn-k, так как Ck+Cn-k=C0, следовательно эта система удовлетворяет всем свойствам кольца. Будем обозначать полученное кольцо через Zn. Если число n – составное, то кольцо Zn обладает делителями нуля: то есть если n=kl, 1S, при n=S она может оказаться меньше n, например в случае bn = −a n Определение - Произведением многочленов f(x) и g(x) называется многочлен: f ( x) g ( x) = d 0 + d 1 x + ... + d n + s −1 x n + s −1 + d n + s x n + s , коэффициенты которого: d i = ∑ a k bl , i = 0, n + S { d i –результат перемножения таких коэффициентов f(x) k + l =i
и g(x) сумма индексов которых равна i и сложения таких произведений} d 0 = a 0 b0 , d 1 = a 0 b1 + a1b0 ,..., bn + S = a n bS , d n + S ≠ 0 ⇒ степень f(x) g(x) =n+S 8
Произведение многочленов никогда не будет равно 0. Свойства: выполняется коммутативность, ассоциативность сложения и умножения, дистрибутивность умножения относительно сложения. Роль единицы – число 1, рассматривая как многочлен 0 степени. f −1 (x) f (x) обладает обратным Утверждение. Многочлен f ( x) f −1 ( x) = 1 если f (x) является многочленом нулевой степени. Для умножения многочленов обратной операции – деления не существует. Аналог система целых чисел. Для многочленов ∃ алгоритм деления с остатком: Алгоритм: Для ∀ f(x),g(x) можно найти q(x), r(x): f(x)=g(x)q(x)+r(x), причем степень r(x) меньше степени g(x) или же r(x)=0. Многочлены q(x) и r(x), удовлетворяющие этому условию, определяются однозначно.
2.3 Делитель Пусть f(x), ϕ (x) – многочлены. Определение. Если остаток от деления f(x) на ϕ (x) равен 0, то многочлен ϕ (x) называется делителем многочлена f(x). Утверждение. Многочлен ϕ (x) – делитель f(x) < = > если ∃ φ (x): f(x)= ϕ (x) φ (x) 2.3.1 Свойства делимости
а) Если f(x): g(x), g(x):h(x) =>f(x):h(x); б) f(x): ϕ(x), g(x): ϕ(x) => f(x)±g(x): ϕ(x); в) f(x): ϕ(x)=> ∀g(x) f(x)g(x): ϕ(x); г) f1(x), f2(x), …, fk(x): ϕ(x) => f1(x)g1(x)+ f2(x)g2(x)+…+ fk(x)gk(x): ϕ(x); д) ∀f(x) делится на любой многочлен нулевой степени; е) f(x):ϕ(x) => f(x): cϕ(x), c∈Ζ, c≠0; ж) Многочлены cf(x), c≠0, и только они будут делителями множества f(x), имеющим такую же степень что и f(x); з) Многочлены f(x) и g(х) одновременно делятся друг на друга g(x)=c f(x), c≠0; и) Всякий делитель одного из двух многочленов f(x), cf(x), c≠0, будет делителем многочлена и для другого многочлена.
2.4 Наибольший общий делитель Даны: f(x), g(x). Определение. Многочлен ϕ(x) называется общим делителем для f(x) и g(x), если он служит делителем для каждого из этих многочленов. 9
Если общих делителей многочленов нулевой степени f(x) и g(x) не имеют, то они называются взаимно простыми. Определение. Наибольшим Общим Делителем отличных от нуля многочленов f(x) и g(x) называется такой многочлен d(x), который является их общим делителем и, вместе с тем, сам делится на любой другой общий делитель этих многочленов. Обозначение: НОД (f(x),g(x)) Вопрос: Существует ли НОД ? Да, способ отыскания – метод последовательного деления
2.5 Алгоритм Евклида Даны: f(x), g(x). Найти НОД. Делим f(x) на g(x), получаем r1(x) делим g(x) на r1(x), получаем r2(x), r1(x) на r2(x) –> r3(x) степени остатков все время понижаются => дойдем до такого места, на котором деление совершается нацело => процесс остановиться. Тот остаток rк(x), на который нацело делится предыдущий остаток rк-1(x) и будет НОД f(x) и g(x). f(x)=g(x)g1(x)+r1(x) g(x)=r1(x)q2(x)+r2(x) r1(x) =r2(x)q3(x)+r3(x) … rk-3(x) =rk-2(x)qk-1(x)+rk-1(x) rk-2(x) =rk-1(x)qk(x)+rk(x) rk-1(x) =rk(x)qk+1(x) => rk(x) НОД Если d(x) – НОД f(x) и g(x) => cd(x), c≠0 – НОД (f(x), g(x)); Можно условиться, что старший коэффициент НОД - а будем считать равным единице. если их НОД=1 Утверждение. Два многочлена взаимно просты Теорема. Если d(x)=НОД(f(x),g(x)) => можно найти такие многочлены u(x) и v(x) : f(x)u(x)+g(x)v(x)=d(x). Можно при этом считать степени многочленов f(x) и g(x) больше 0, что степень u(x) меньше степени g(x), а степень v(x) меньше степени f(x). Доказательство основано на алгоритме Евклида. Если мы учтем, что rk(x)=d(x) и положим u1(x)=1, v1(x)=-qk(x) то из предпоследнего равенства следует: d(x)=rk-3(x)u2(x)+ rk-2(x)v2(x), где u2(x)=v1(x), v2(x)=u1(x)-v1(x)qk-1(x) Продолжая подниматься по равенствам вверх, мы придем к доказываемому. Пусть u(x) и v(x) уже найдены, но предположим что deg(u(x))≥deg(g(x)) делим u(x) на g(x): u(x)=g(x)q(x)+r(x), где deg(r(x))<deg(g(x)) Подставим в f(x)u(x)+g(x)v(x)=d(x): f(x)r(x)+g(x)[v(x)+f(x)q(x)]=d(x) 10
Степень многочлена в [v(x)+f(x)q(x)] будет в свою очередь меньше степени f(x), так как в противном случае степень второго слагаемого левой части была бы не меньше степени произведения g(x)f(x), а так как степень первого слагаемого меньше степени этого произведения, то вся левая часть имела бы степень большую или равную степени g(x)f(x), тогда как многочлен d(x) заведомо имеет меньшую степень. если можно Утверждение. Многочлены f(x) и g(x) взаимно просты найти u(x) и v(x): f(x)u(x)+g(x)v(x) Следствие. Если многочлен f(x) взаимно прост с каждым из многочленов e(x) и t(x) => он взаимно прост и с их произведением. Следствие. Если произведение многочленов f(x) и g(x) делится на ϕ(x), но f(x) и ϕ(x) взаимно просты, то g(x) делится на ϕ(x) Следствие. Если многочлен f(x) делится на каждый из многочленов ϕ(x) и ψ(х), которые между собой взаимно просты => f(x) делится и на их произведение.
2.6 Корни многочленов Если a 0 x n + a1 x n −1 + ... + a n − z x + a n = f ( x) ∀c∈Z => a 0 c n + a1 c n −1 + ... + a n − z c + a n = f (c) – значение многочлена f(x) при x=c Если ϕ ( x) = f ( x) + g ( x) , ϕ ( x) = f ( x) g ( x)φ => ϕ (c) = f (c) + g (c) , φ (c) = f (c) g (c) Сложение и умножение многочленов превращаются при теоретика– функциональной точке зрения на многочлены в сложении и умножение функций, понимаемые в смысле сложения и умножения соответственных значений этих функций. Определение. Если f(c)=0 для некоторого c, то c называется корнем многочлена f(x). Утверждение. Остаток от деления многочлена f(x) на линейный многочлен x–c равен значению f(c)= многочлена f(x) при x=c. Доказательство: f(x)=(x-c)g(x)+r положим x=c => f(c)=(c-c)g(c)+r => f(c)=r Если f(x) : f ( x) = ( x − c) k ϕ ( x) k–краткость корня c в многочлене f(x) Если k=1 => c– простой.
2.7 Основная теорема алгебры Теорема. Всякий многочлен с любыми числовыми коэффициентами, степень которого не меньше 1, имеет хотя бы один корень, в обычном случае комплексный. Следствие. Пусть дан a 0 x n + a1 x n −1 + ... + a n − z x + a n = f ( x) . По основной теореме алгебры y=f(x) ∃ корень α 1 => f(x)=(x- α 1 ) ϕ (x) по основной теореме алгебры ϕ (x) имеет корень α 2 => f(x)=(x- α 1 )(x- α 2 ) ϕ (x) и т.д.=> f(x)=(x- α 1 )(x- α 2 )…(xαn) Следствие. Такое разложение для f(x)– единственное. 11
Следствие. В общем случае : f ( x) = a 0 ( x − α 1 ) K 1 ( x − α 2 ) K 2 ...( x − α e ) Ke k1 + k 2 + ..ke = n => всякий многочлен f(x) степени n, n >=1 с любыми числовыми коэффициентами, имеет n корней, если каждый корень считается один раз, какова его кратность.
2.8 Алгебра многочленов над произвольным полем Придадим точный смысл понятию многочлена над производным полем. Нужно вспомнить две точки зрения на понятия многочлена – формально– алгебраического и теоретика–функционального. Будучи равносильными, для случая числовых полей, и для бесконечных полей вообще, для конечных полей они уже перестают быть равносильными. Рассмотрим, например, поле Z 2 , состоящее из двух элементов 0 и1, причем 1+1=0. Многочлены x+1 и x2+1 с коэффициентами из этого поля являются различными, т.е. не удовлетворяют алгебраическому определению равенства многочленов. Но! При x=0 => x+1=x2+1=1, x=1 => x+1= x2+1=0 => как функция от x, принимающего значения из Z 2 , они должны считаться равными. Для Z3 такие многочлены: x3+x+1 и 2x+1 Следовательно, в случае произвольного поля P невозможно принять теоретика–функциональное точку зрения на многочлены. Следовательно, произведем такое построение кольца многочленов над произвольным полем P, которое не используется с самого начало обычной записи многочленов через “неизвестное” x. Рассмотрим всевозможные упорядоченные системы элементов поля Р имеющие вид: (а0, а1, …, аn-1, an) (2.8) n – произвольно, n ≥0 (при n>0 должно быть аn≠0) Определим для систем (2.8) сложение и умножение, как то было раньше: i = 1, n ci=ai+bi, d i = ∑ a k bl i=0,1,…,n+s => получим коммутативное кольцо k + l =i
Отождествим системы (а), n=0 с соответствующими элементами а поля р, т.е. положим (а)=а ∀а∈Р. Найдем соответствие между теорией функции и формальной алгеброй. Обозначим систему (0,1) буквой Х: Х=(0,1), следовательно по правилу умножения: Х2=(0,1)*(0,1)=0*0+1*0+0*1+1*1=0*0+1*0+1*1=(0,0,1) Х2=(0,0,1) Хk=(0,…,0,1) k получим: 12
(a0, a1, a2, …, an-1, an)=(a0)+(0, a1)+(0, 0, a2)+…+(0, …, 0, an-1)+(0, 0, …, 0, an)= =(a0)+(a1)(0,1)+(a2)(0,0,1)+…+(an-1)(0,…,0,1)+(an)(0,…,0,0,1)=a0+a1x+a2x2+…+ +an-1xn-1+anxn всякая упорядоченная система вида (2.8) может быть записана в виде многочлена относительно х с коэффициентами из поля Р, причем эта запись будет, очевидно, однозначной. построим коммутативное кольцо многочленов P[x] от неизвестного х называется полем Р. В кольце P[x] содержится само поле Р. Кольцо P[x] обладает единицей, не содержит делителей нуля и не является полем. На случай кольца многочленов над полем Р применяется вся теория делимости многочленов: – имеет место алгоритм деления с остатком причем и частное, и остаток принадлежат P[x] – имеет смысл понятие делителя и сохраняются все основные свойства. – сохраняются определение и все свойства НОД, алгоритм Евклида и теорема Евклида – сохраняет смысл понятие корня и основные свойства корней
2.9 Разложение многочленов на неприводимые множители Определим многочлены, которые играют в кольце многочленов такую же роль, какую в кольце целых чисел играют простые числа. Речь идет о многочленах deg(f(x))≥1 Пусть дана f(x), deg(f(x))=n≥1 с коэффициентами из поля Р. Все многочлены нулевой степени – делители для f(x). сf(x) – тоже делители, с≠0 из Р причем больше делителей степени n нет. Определение. Многочлен f(x) степени n называется неприводимым над полем Р, если он не имеет делителей среди многочленов с коэффициентами из F, степени 0<m с*р(х) – не приводим, с∈Р, с≠0; в) Если f(x) – произвольный, р(х) – неприводим => либо f(x) делится на р(х), либо эти многочлены взаимно просты; г) Если произведение многочленов f(x) и p(x) делится на неприводимый многочлен р(х), то хотя бы один из этих множителей делится на р(х). Теорема. Всякий многочлен f(x) из кольца p[x], имеющий степень n, n≥1, разлагается в произведение неприводимых многочленов. Теорема. Всякий многочлен разлагается на неприводимые многочлены, однозначно с точностью до множителей нулевой степени. Теорема. Если даны разложения многочленов f(x) и g(x) на неприводимые множители, то НОД d(x) этих многочленов равен произведению множителей, входящих одновременно в оба разложения, причем каждый из множителей берется в степени, равной меньшей из его кратностей в обоих данных многочленах.
Тема 3 Теория кодирования. Вопросы кодирования играют существенную роль в математике. Кодирование позволяет изучение одних объектов сводить к изучению других. Большое значение получили коды в связи с развитием вычислительной техники, в связи с необходимостью передачи больших количеств информации. Основной круг задач может быть прослежен на примере из области связи в соответствии с рисунком 3.1. источник сообщения
сообщение
код сообщения
канал связи
кодирование источник помех
код сообщения на выходе
сообщение на выходе декодирование коррекция
рисунок 3.1 Кодирование Пусть задан алфавит А={а1,…,аr}, состоящий из конечного числа букв. Определение. Конечная последовательность символов из А – слово А=ai1ai2…ain; n –длина слова Обозначается: l(A)=n Пусть S=S(A) – множество всех непустых слов в алфавите А, S′∈S некоторое подмножество S. Объект, порождающий слова из S′ называется источником сообщений, а слова из S′ – сообщениями. Источником может быть автомат, человек, и т.д. Пусть задан алфавит В={b1,…,bq}, В - слово в алфавите В, S(B) – множество всех не пустых слов. 14
Пусть задано отображение F, которое каждому слову А, А∈S′ (A) ставит в соответствие слово B=F(A), B∈S(B) A → B = F(A) Слово В будем называть кодом сообщения А , а переход от слова А к его коду – кодированием. Отображение F в теории кодирования задается некоторым алфавитом.
3.1 Алфавитное кодирование Рассмотрим соответствие между буквами алфавита А и некоторыми словами в алфавите В: а1 – B1 a2 – B2 - это соответствие называется схемой и обозначается ∑ … - B1, …, Br элементарные коды ar – Br Оно определяет алфавитное кодирование следующим образом: А=ai1…ain → Bi1…Bin (код слова А)
3.2 Равномерное кодирование Наибольшее применение в технике передачи дискретной информации нашли коды с основанием 2. Выбор кодов связан с различными обстоятельствами: - с удобством передачи кодов (двоичный легче всего технически использовать) - с обеспечением удобства восприятия (машинные кода для процессора) - с обеспечением максимальной пропускной способности канала - с обеспечением помехозащищенности - с достижением определенных свойств алгоритма кодирования (простота, возможность однозначного декодирования) Канал связи – как устройство с одним входом и выходом в соответствии с рисунком 3.2 B B′ рисунок 3.2 Канал связи B – код сообщения B′ – код сообщения на выходе Наша задача: при декодировании получить то сообщение, которое было передано.
3.3 Критерий однозначности декодирования Рассмотрим схему ∑: а1 – B1 … ∑: S(A) → S(B) 15
ar – Br Если отображение S(A) → S(B) – взаимно однозначное => декодирование однозначно. Говорят, что алфавит кодирования является взаимно однозначным. Вопрос – как по схеме определить, обладает алфавитное кодирование свойством взаимной однозначности или нет? Сначала рассмотрим простой достаточный признак взаимной однозначности. Определение. Пусть слово В=В′B′′ => слово B′ называется началом или префиксом слова В, В′′ – концом слова В. При этом пустое слово λ и само слово В считаются началом и концами слова В. Все начала и концы, отличные от него самого, называются собственными. Определение. Схема ∑ обладает свойством префикса, если для любых i и j (i≥1, r≥j, i≠j) слово Вi не является префиксом слова Bj. Теорема. Если схема ∑ обладает свойством префикса, то алфавитное кодирование будет взаимно однозначным. Доказательство: т.к. ∑ обладает свойством префикса => все элементарные коды попарно различны Вi≠Bj при i≠j Пусть некоторое слово В∈S(B) допускает две расшифровки (два разбиения на элементные коды) В=Bi1…Bis В=Bj1…Bjt Пусть Bi1=Bj1, …, Bin-1=Bjn-1, Bi1≠Bj1 . В таком случае одно из слов Bin , Bjn является префиксом другого => противоречие. Пусть В=Bi1…Bin – слово из S(B) ~ Обозначим B = bi1…biL ~ ~ ∑ :а1 – B 1 … ~ ar – B r ~ ∑ - обладает свойством префикса => по последней теореме алфавитное коди~ рование, задаваемое ∑ будет взаимнооднозначным. ~ Теорема. Если либо схема ∑, либо схема ∑ обладает свойством ~ префикса, то алфавитное кодирование, задаваемое ∑( ∑ ), будет взаимно однозначным. Пусть Bi= β ' Bi1...Biω β ' ' (3.3) Bi – элементарный код Bi1 ...Biω - элементы кода нетривиальное разложение элементарного кода Bi, т.е. разложение Bi= Bi (β′=β′′=λ), причем β′ β′′ отличны от элементарных кодов. Соотношение (3.3) означает, что в элементарном коде Bi можно отобразить некоторое начало β′ и некий конец β′′ так, что оставшаяся часть разбивается на элементарные коды. Для каждого Bi число разложений вида (3.3) конечно. 16
3.4 Алгоритм распознавания однозначности декодирования. Этот алгоритм формируется на языке теории графов. Пусть алфавит кодирования задан схемой: ∑: а1 – B1 … ar – Br Для каждого элементарного кода Biрассмотрим нетривиальное разложения вида (1) Bi= β ' Bi1...Biω β ' ' , β′ β′′ отличны от элементарных кодов. Обозначим через B0 множество, содержащее а) непустое слово λ; б) слова β, которые встречаются в разложениях вида (1) как в форме префиксов, так и окончаний. Строим граф следующим образом: – каждому слову из В0 сопоставим вершину; – пусть β′ β′′ ∈ В0. Рассмотрим все нетривиальные разложения вида (3.3). Для каждого из них соединяем соответствующие словам β′ и β′′ вершины дугой от β′ к β′′, которой приписано слово Bi1 ...Biω . Полученный орграф обозначим через Г(∑). Теорема. Алфавитное кодирование со схемой ∑ не обладает свойством взаимной однозначности когда Г(∑) содержит ориентированный цикл, проходящий через λ.
3.5 Избыточное кодирование При передаче сообщений важную роль играют методы кодирования, контролирующего ошибки. Для этого используется избыточное кодирование сообщений. Основной задачей избыточного кодирования является обнаружение и исправление ошибок на выходе дискретного канала. Пусть данные сообщения представляются в виде двоичной информации. Эта двоичная информация подлежит передаче по каналу подверженному случайным ошибкам. Задача кодирования состоит в таком добавлении к информационным символам дополнительных символов, чтобы на приемнике эти искажения могли быть найдены и исправлены. Т.е. последовательность символов данных представляется в виде некоторой более длинной последовательности символов, избыточность которой достаточна для защиты данных. Двоичный код мощности М и длины n представляет собой множество из М двоичных слов длины n, называемых кодовыми словами. Обычно М=2k, где k – некоторое целое число. такой код называется двоичным (n, k) – кодом (блочный код). О блочном коде судят по длине блока и числу информационных элементов. По этим двум параметрам n и k и минимальному расстоянию кода d(C), где С – множество кодовых слов. 17
Коды с проверкой на четность (высокоскоростные с плохими корректирующими характеристиками) – к заданным информационным k битам прибавляется (k+1) бит так, чтобы полное число единиц в кодовом слове было четным. Простые коды с повторением (низкоскоростные с хорошим корректирующими характеристиками) – один заданный информационный символ повторяется n раз (n – нечетное). Избыточные коды можно классифицировать в соответствии с рисунком 3.3
Избыточные коды
блочные
неразделимые
непрерывные
разделяемые
линейные
нелинейные
циклические БЧХ
Хемминга
рисунок 3.3 Классификация кодов Блочные – передаваемая информация разбивается на отдельные блоки кодовые комбинации, которые кодируются и декодируются независимо друг от друга. Разделяемые – информационные и проверочные элементы занимают одни и те же позиции. Неразделимые – такое деление отсутствует (коды с постоянным весом) Линейные – их проверочные элементы представляют собой линейное колебание информационных элементов. Нелинейные – с контрольным суммированием (интерактивный код) В теории двоичного кодирования основную роль играет линейное арифметическое пространство GF(2n) над полем из двух элементов. GF(2)={0, 1} Каждая из n- разрядная двоичная кодовая комбинация представляет собой вектор в пространстве GF(2n) Можно определять расстояния между кодами как между векторами.
18
Определение. Вес Хемминга ω(сi) кодового слова сi равен числу его не нулевых компонент. Минимальный вес кода есть минимальный вес ненулевого кодового слова. Определение. Расстоянием Хемминга кодовых слов сi и сj d(сi, сj) определяется числом координат, в которые слова сi и сj различаются. Определение. кодовым расстоянием d(c), по Хеммингу, называется наименьшее из всех расстояний между различными парами кодовых слов, т.е. d (c) = min d (ci , c j ) ci ,c j ∈C
Связь веса с расстоянием: d(x,y)= ω(x+y) Если слово α при передаче преобразовалось в слово, отличное от α, то говорят, что в канале произошли ошибки Если i-ая буква слова α отлична от i-ой буквы полученного слова β, то говорят, что произошла ошибка в i-ом разряде. Если полученное слово отличается от переданного в t разрядах, то говорят, что произошло t ошибок. Число ошибок, имевших место при передаче, равно расстоянию Хемминга между переданным и принятым словами. Для того, чтобы в случае кода с обнаружение ошибок одно кодовое слово не превратилось в другое, расстояние между разрешенными кодовыми комбинациями должно быть тем больше, чем выше кратность обнаруживаемых ошибок. Т.к. все расстояния различны –> наиболее критично кодовое расстояние. Чем больше d(c), тем больше принятая комбинация будет походить на переданную, чем на другие разрешенные комбинации. Пусть при передаче n символов не более t символов может быть искажено. Тогда, если между ∀ двумя кодовыми словами расстояние больше t => ошибка будет обнаружена => d(c)>t или d(c)≥ t+1. А для исправления t ошибок необходимо и достаточно, чтобы ∀ωi, ωj H(ωi, t)∩H(ωj, t)=∅ ⇔ d(ωi,ωj)≥2t+1 в соответствии с рисунком 3.4 t ωi
t
ωj
рисунок 3.4 Вопрос: Каким должно быть d(c), чтобы одновременно исправлялись ошибки кратности g и обнаруживались ошибки кратности 2r? d(c) ≥ g+r+1 при r ≥ g Определение: Булева функция fc( ~xn n), равная единице на множестве С кодовых слов и нулю вне С, называется характеристической функцией двоичного блочного кода С. Примечание: С с характеристической функцией fc( ~xn )=х1⊕х2⊕…⊕хn C={α=(α1,…, αn): α1⊕α2⊕…⊕αn=1} 19
код С состоит из всех наборов с нечетным числом единиц. d(c)=2 => d(c) ≥t+1 => 1≥ t – обнаружение ошибки. d(c) ≥2t+1 => 1/2≥ t => t=0 – исправление ошибки.
3.6 Построение линейного кода Рассмотрим n-мерное арифметическое линейное пространство GF(2k) над полем GF(2). Векторы в этом пространстве – это всевозможные наборы длиной n из элементов поля GF(2) (0, 1) с операцией покомпонентного сложения по mod 2. Определение: Линейным кодом (n, k) называется линейное k- мерное подпространство пространства GF(2k) Так как GF(2) состоит из двух элементов 0 и 1, то сумма любых кодовых слов будет кодовым словом, и произведение любого кодового слова на элемент поля так же будет кодовым словом. Множество кодовых векторов двоичного линейного кода одновременно удовлетворяет и аксиомам группы с операцией сложения векторов. Если источник вырабатывает двоичные информационные последовательности длиной k, тогда под кодированием будем понимать взаимно однозначное отображение множества 2k информационных последовательностей в некоторое подмножество из 2k кодовых слов длиной n. Линейный код можно задать с помощью порождающей матрицы. Так как размерность подпространства кода (n, k) равна k, то любое множество базисных векторов может быть использовано в качестве строк для построения матрицы G(k × n), которая называется порождающей матрицей кода. Любое из 2k кодовых слов может быть представлено в виде линейной комбинации строк из G. Можно использовать следующий алгоритм получения кодовых слов: используется отображение. С=I*G(k × n),где I – информационное слово длины k, которое будет закодировано. G – порождающая матрица С – получающееся кодовое слово длины n. Порождающая матрица является сжатым описанием линейного кода. Еще одним способом задания линейных кодов, связанных с предыдущим, является описание с помощью проверочной матрицы. Для этого рассмотрим подмножество V* ортогональное пространству кода V, т.е. множество векторов x=(x1,…,xn)∈GF(2k): x1a1⊕…⊕ xnan=0 для ∀ а=(а1,…,аn) ∈V Множество векторов подпространства V* образует линейный код, который называют двойственным коду V, причем множество V* является линейным кодом (n, n-k) Порождающая матрица Н двойственного кода V* называется проверочной матрицей кода V. 20
Назначение проверочной матрицы – выделить из множества всех слов когда аНt=0 длиной и кодовые слова., т.к. вектор а∈GF(2n) –кодовое слово (Ht – транспонированная матрица Н) получаем (n-k) уравнений, которым должны удовлетворять координаты кодового слова а. Эти уравнения называются проверочными: n
∑a h j =1
j
ij
= 0 , a = (a1 ,..., a n ) , Н=||hij||,
i = 1, n − k
j = 1, n
Порождающая матрица G и транспонированная проверочная матрица связаны между собой следующим образом: GHt=HGt=0 Свойства линейных кодов: – т.к. d(a,b)= ω(a+b) V-лин. => ∀a,b∈V и (a+b)∈V => d (V ) = min ω (a) - для нахождения d(V) a∈V достаточно |V| сравнений. – корректирующая способность линейных кодов определяется числом линейно независимых столбцов проверочной матрицы. Если любые (d-1) столбцов матрицы Н линейно независимы => кодовое расстояние кода V не меньше чем d. Два кода называются эквивалентными, если существует такая перенумерация координат, которое множество первого кода переводит в множество второго кода. Эквивалентные коды обладают одинаковыми корректирующими свойствами. За счет выбора образующих элементов и перенумерации координат порождающую матрицу линейного кода можно привести к каноническому виду: [I:P], где I – в первых столбцах единичная матрица (k × k) P- k × (n-k) матрица Если порождающая матрица в каноническом виде, первые k координат кодового вектора являются информационными, остальные (n-k) - проверочными. В линейных кодах каждый проверочный символ βj есть линейная комбинация информационного аi. Если используется линейный двоичный код, то любая линейная комбинация информационных символов есть их сумма по модулю два. Если G=[IkP], Ik – единичная матрица k × k, P(k × (n-k)) =>H=[PTIn-k]
3.7 Декодирование линейного кода При передаче информации по каналу с ошибками кодирование линейным кодом может быть осуществлено по методу “минимум расстояния” Но, при этом осуществляется большое число сравнений (все кодовые слова сравниваются с принятым словом Y). Декодирование может быть осуществлено по синдрому (проверочному вектору) это декодирование эквивалентно (можно доказать). В этом случае удобно для кодирования и декодирования задавать линейный код с помощью проверочной матрицы H. Множество всех принятых слов состоит из слов длинной n над алфавитом из поля GF(2) 21
Обнаружение ошибок. Для ∀ слова x ∈ GF(2n) определяет соответствие ему синдром: C=xHt На этом основывается метод обнаружения ошибок по синдрому. C=0, если x – кодовое слово, иначе C ≠ 0 Применение (декодирования) вычисляет по принятому слову x синдром C Если C ≠ 0 => есть ошибки.
3.8 Исправление ошибок Рассмотрим два слова: x и x+a, где a – кодовое слово Найдем синдромы C=xHt и С′=(x+a)Ht, C′=(x+a)Ht=xHt+aHt=xHt=C => все слова полученные из некоторого слова x путем прибавления к нему всех кодовых слов, имеют один и тот же синдром. Множества таких слов образуют смежный класс x+V по подгруппе V. Любое слово, которому соответствует синдром C, принадлежит этому же смежному классу Пусть x′ – некоторое слово с синдромом C: C=x′Ht заметим : x′=x+a => C= x′Ht=(x+a)Ht=xHt+aHt=C+aHt =>aHt=0 => a кодовое слово => x′ принадлежит смежному классу x+V. Назовем слово минимум веса из этого смежного класса представлением смежного класса. n ∀ x ∈ GF(2 ) соответствует единственный синдром C, а каждому синдрому C соответствует единственный представитель смежного класса. Декодирование а) по принятому слову x вычисляют синдром C=xHt б) по виду синдрому C принятую комбинацию x относят к одному из смежных классов ej+V. в) в качестве результата декодирования (исправленного слова) выдается кодовое слово x+ej x=u+e: u – переданное слово, e – ошибка. C=xHt=(u+e)Ht=eHt Таблица декодера. Вектор ошибки ej 0 E1 E2 … E2(n-k)-1
Векторы образующие смежные классы ej+V A1 E1+A1 E2+A1 … (n-k) E2 -1+A1
Ai – кодовые векторы Ei – векторы ошибок 22
A2 E1+A2 E2+A2 … (n-k) E2 -1+A2
… … … … …
A2k-1 E1+A2k-1 E2+A2k-1 … (n-k) E2 -1+A2k-1
Вес Ei определяется числом, исправленным разрядов. Принятая кодовая комбинация сравнивается с векторами в строке, соответствующей полученному в результате проверки синдрома. Правильное кодовое слово – в первой строке того же столбца таблицы. Векторы Ei не должны быть равны ни одному из векторов кода, получились бы нулевые вектора. Пример. (7, 4) код 1001101 H= 0101011 ; V=(0110100) – полученный вектор 0010111
C=VHt=(110) совпадает с четвертым столбцом e=(0001000) => v+e=(0110100)+(0001000)=(0111100)
матрицы
H.
=>
3.9 Циклические коды Рассмотрим GF(2n) над полем GF(2) ∀ a~ =(a0,…,an-1) ∈ GF(2n) можно в дальнейшим однозначно поставить в соответствие множество a0+…+an-1xn-1 степени n с коэффициентами над GF(2). Сумме двух векторов сумма двух многочленов. Произведению вектора на элемент поля произведения многочленнов на этот элемент. Пространство GF(2n) можно реализовать как множество 2n многочленов степени меньше n с обычными правилами сложения многочленов и умножения на элемент поля GF(2n) М-ми все многочленов степени меньше n. Существует единственный способ задавать линейное код пространство. Фиксируем многочлен g(x) ∈ M и рассмотрим подмножество всех многочленов f(x) ∈ M, которые делятся на многочлен g(x) без остатка. Если f1|g(x), f2|g(x)=>(f1+f2)|g(x)=> это подмножество линейное пространство => определяет некоторый линейный код, которое называется полиномом. g(x) – порождающий многочлен C(g(x)) – полиномиальный код C(g(x))={( a0,…,an-1): a0+…+an-1xn-1|g(x)} Определение. Циклическим называется такой полиномиальный код C(g(x)), которого вместе с каждым кодовым словом a=( a0,…,an-1) содержит и слово a~ =(an-1,a0,a1,…,an-2), полученный из a циклически сдвигом в право на одну позицию. Утверждение. Для того, чтобы полином код C(g(x)) был цикличным чтобы многочлен g(x) был делителем многочлена xn-1 g(x) – порождающий многочлен циклического кода. Утверждение. Если многочлен g(x) имеет степень (n-k) и является делителем многочлена xn-1, то код C(g(x)) – линейный циклический. (n,k) – код. Замечание. Так как при ∀ n многочлен (x-1) и (xn-1+xn-2+…+1) является делителями многочлена xn-1: xn-1=(x-1)( xn-1+xn-2+…+1) => циклические коды ∃ при ∀ n 23
При построении циклических кодов удобно пользоваться табличными разложения многочленов xn-1 на неприводимые многочлены, (которые делятся на 1 и на самих себя) ∀ из этих многочленов может быть порождающим. Пример. Рассмотрим (n,k) – коды, построенные на основе х7-1 x7-1=( x-1)(x3+x+1)(x3+x2+1) Делители x7-1 x-1 x3+x+1 x3+x2+1 ( x-1)(x3+x+1) ( x-1)(x3+x2+1) (x3+x+1)(x3+x2+1)
Порождающий многочлен g1(x) g2(x) g3(x) g4(x) g5(x) g6(x)
Код (7,6) (7,4) (7,4) (7,3) (7,3) (7,1)
Код (7, 6) – в нем n-k=1 1 проверочный разряд (на четность) (7, 1) – код с повторением Оба они цикличны.
3.10 Задание циклических кодов а) Циклический код может быть задан порождающим многочленом g(x) Определение. h(x)=(xn-1)/g(x) – проверочный многочлен циклического кода. Многочлены g(x) и h(x) однозначно определяют друг друга => может быть задан и проверяющий многочлен. б) Так как циклический код – линейный код => его можно задать порождающей и проверяющей матрицами. 3.10.1 Получение порождающей матрицы
Кодовая комбинация, соответствует порождающему многочлену g(x), принадлежит циклическому коду (n, k), а по определению циклического кода ему принадлежат и все циклические сдвиги этой комбинации. Циклический сдвиг на один разряд вправо соответствует умножению g(x)*X. Так как степени многочленов g(x), X*g(x), X2*g(x), …, Xk-1*g(x) различны => соответствующие им кодовой комбинации линейной независимы и могут быть использованы в качестве строк порождающей матрицы: g ( x) G=
X * g ( x) ... X k -1g(x)
Если степень порождающего многочлена g(x) равна (n-k), то порождающая матрица имеет следующий вид: 24
g 0 ...g n − k 0...0 Gk ,n = 0 g 0 ...g n − k 0...0
0...0 g 0 ...g n − k
Пример. Код (7,4) с g(x)=1+x+x3. Многочлену g(x) соответствует кодовое слово (1101000) X*g(x) =>(0110100) X2*g(x)=>(0011010) 1101000 0110100 G= 0011010 0001101
3=n-k=7-4
3.10.2 Получение проверочной матрицы
g(x) – порождающий многочлен (n, k) – код степени (n-k) Проверочная матрица строится по произведению h(x)=(xn-1)/g(x) Если h(x)=h0+h1x+…+hkxk =>
многочлена
0...0hk ...h0 H n − k ,n = 0...0hk ...h0 0 hk ...h1 h0 0...0
По определению каждый кодовый многочлен v(x) цикличен (n, k) – кода с порождающим многочленом g(x) имеет вид: v(x)=m(x)g(x)=(m0+m1x+…+mk-1xk-1), где : m(x)=m0+m1x+…+mk-1xk-1 – произвольный многочлен с коэффициентами из GF(2) степени меньше k. Если коэффициенты (m0,m1,…mk-1) многочлена m(x) – это k информационных символов => циклический код C(g(x)) кодирует их многочлен v(x)=m(x)g(x) Рассмотрим кодирование четырехразрядного без избыточного, кодового многочлена циклического кода (7,4), имеющий порождающий многочлен g(x)=1+x+x3 Например, m=(0, 1, 0, 0), который соответствует многочлену m(x)=x кодируется многочленом: m(x)g(x)=x(1+x+x3)=x+x2+x4, которому отвечает вектор (0,1,1,0,1,0,0) m=(1,0,1,0), m(x)=1+x2 => m(x)g(x)=(1+x2)(1+x+x3)=1+x+x3+x2+x3+x5= =1+x+x2+x5 => (1110010)
3.11 Построение систематического кода Закодируем m=(m0, m1, …, mk-1), соответствующий многочлен m(x)=m0+m1x+…+mk-1xk-1 умножим его на xn-k: xn-k *m(x)= xn-k(m0+m1x+…+mk-1xk-1)=m0xn-k+ …+mk-1xn-1 25
Разделим многочлен xn-k *m(x)/g(x) и заменим: (1) xn-k *m(x)=g(x)*q(x)+r(x) deg(g(x))=n-k => deg(r(x)) r(x)+xn-k *m(x) – кодовый многочлен: r0+r1x+…+rn-k-1xn-k-1+m0xn-k+ …+mk-1xn-1 соответствует кодовому слову: (r0,r1,…,rn-k-1,m0,m1,…mk-1), записанного в систематическом виде (последние k символов совпадают с передаваемым словом, а первые (n-k) являются проверочными). Следовательно, чтобы закодировать сообщение m(x) систематическим циклическим кодом C(g(x)), нужно: а) разделить многочлены xn-k *m(x)/g(x) б) прибавить остаток от деления к многочлену: xn-k *m(x)+ r(x) Пример. (7,4) n=7 k=4 m=(1011), m(x)=1+x2+x3 xn-k*m(x)=x3(1+x2+x3)=x3+x5+x6 Разделим x3+x5+x6 на g(x)=1+x+x3 |x3+x+1 x6+x5+x3 x6+x4+x3 |x3+x2+x+1=q(x) x5+x4 x5+x3+x2 x4+x3+x2 x4+x2+x x3+x x3+x+1 1=r(x) => r(x)+x3m(x)=1+x3+x5+x6 => кодовый вектор: (1001011)
3.12 Декодирование циклических кодов Комбинация циклического кода имеет вид многочлена f(x)=q(x)*g(x)=xn-k*m(x)+r(x) При передачи по каналу могут произойти ошибки. Пусть было принято p(x) Декодирование циклических кодов основано на свойстве делимости их кодовой комбинации без остатка на порождающий многочлен g(x). Если при передачи ошибки не было => многочлен p(x)=f(x) делится на g(x) без остатка. При наличии ошибки, многочлен ошибок e(x)0 и p(x)=f(x)+e(x), p(x) вообще говоря не делится на g(x) без остатка => обнаружена ошибка Пусть m(x)=1+x2+x3+x7+x9=(1011000101) k=10 26
g(x)=1+x2+x4+x5=(101011) n-k=5 => xn-k=x5 так как deg(g(x))=n-k=5 xn-km(x)=x5+x7+x8+x12+x14=000001011000101 производим деление xn-k *m(x)/g(x) Получим q(x)=110101011 r(x)=01110 Кодовый многочлен: f(x)= xn-km(x)+r(x)=x+x2+x3+x5+x7+x8+x14=01110 1011000101 Пусть e(x)=1101011 следовательно будет принято p(x)=101000111000101= =f(x)+e(x) Если p(x) разделить на g(x)=101011 => получим остаток s(x)=1 => есть 1 ошибка. Определение. Остаток S(x) от деления p(x) и g(x) называется синдром. Так как S(x) =p(x)+g(x)l(x) p(x)=f(x)+e(x) => e(x)=[l(x)+q(x)]g(x)+S(x) => S(x) равен остатку от деления многочлена ошибок e(x) на e(x) => S(x) вычисленной по принятому p(x) содержит информацию о векторе ошибок e(x). Если синдром равен 0 => правильный прием. Ошибка может быть обнаружена если многочлен ошибок не делится без остатка на g(x) Для обеспечения эффектной проверки порождающий многочлен g(x) должен быть выбран так, чтобы ни один многочлен ошибок из тех, которые подлежат обнаружению, не делился на g(x). Для исправления обнаруженной ошибки, код строится таким образом, чтобы многочлены ошибок давали при делении на g(x) различные остатки. Исправление ошибки производится следующим образом: а) p(x) делят на g(x) и находят остаток (синдром) S(x) б) по S(x) находят e(x) в) складывая p(x)+e(x), находят f(x)
Список использованных источников 1 Курош А.Г. Курс высшей алгебры. - М.: Наука, 1963. - 432 с. 2 Шварцман В.О., Емельянов Г.А. Теория передачи дискретной информации. - М.: Связь, 1976. - 424 с. 3 Блейхут Р. Теория и практика кодов, контролирующих ошибки. – М.: Мир, 1986. – 586 с. 4 Яблонский С.В. Введение в дискретную математику. – М.: Наука, 1989.– 324с. 5 Кук Д., Бейз Т. Компьютерная графика. – М.: Наука, 1990. – 384 с.
27