Книга
Книга
М.Н.Аршинов, Л.Е.Садовский
КОДЫ И МАТЕМАТИКА (РАССКАЗЫ О КОДИРОВАНИИ)
М.: Наука, 1983. —144 с. (Библиотечка «Квант». Вып. 30).
Б популярной форме книга знакомит читателя с основными понятиями и идеями теории эффективного и помехоустойчивого кодирования - важного направления математики.
Имея своими первоисточниками криптографию (искусство засекречивания истинного содержания сообщения), но главным образом решая различные проблемы, возникающие при передаче информации по линиям связи, теория кодирования в настоящее время выросла в обширную и разветвленную область знания со своим кругом объектов и задач.
Не ставя перед собой цели систематического изложения теории, авторы стремятся отразить главные ее черты.
СОДЕРЖАНИЕ
Предисловие3
Кодирование - история и первые шаги5
Шифры, шифры, шифры10
Код Фано — экономный код18
Свойство префикса, или куда идти роботу24
Еще о свойстве префикса и однозначной декодируемости27
Оптимальный код32
Об избыточности, шумах и криптограмме, которую нельзя расшифровать 37
Коды - антиподы40
Код Хемминга45
Необычное обычное расстояние48
Линейные или групповые коды50
Декодирование по синдрому и еще раз о коде Хемминга61
О кодах, исправляющих несимметричные ошибки65
Циклические коды68
О границах возможного в кодировании и совершенных кодах77
Кодирует и декодирует ЭВМ82
Голосование93
Многоступенчатое голосование и коды Рида-Маллера97
Латинские квадраты и коды102
Матрицы Адамара и кодирование107
Задача об ожерельях, функция Мёбиуса и синхронизируемые коды112
Заключение116
Приложение117
Сравнения и классы вычетов117
Группы120
Кольца и поля125
Арифметическое n-мерное векторное пространство129
Алгебра матриц132
Задачи и дополнения136
142142Литература
142
142
ПРЕДИСЛОВИЕ
Право же, не будет ошибкой предположить, 呼то у большинства читателей слова «код», «кодирование» вызывают примерно одинаковые представления. Ведь все хорошо знают, что коды или шифры используются для передачи секретной информации. Менее известно, однако, что в наше время коды приобрели и иное значение, быть может, более обыденное, но зато куда более важное j широкое. В этой их новой роли коды и кодирование ——прежде всего средство для экономной, удобной и практически безошибочной передачи сообщений. Новые применения кодов сложились в результате бурного развития различных средств связи, неизмеримо возросшего объема передаваемой информации.
Решать возникшие в связи с этим задачи было бы невозможно без привлечения самых разнообразных математических методов. Неслучайно поэтому теория кодирования считается сейчас одним из наиболее важных разделов прикладной математики. Желание познакомить широкий круг читателей с задачами и методами этой теории и является основной нашей целью. Все же немного места уделили мы также кодам в их изначальном смысле — как средству обеспечения секретности.
Первая часть книги (§§ 1——10) написана вполне элементарно, и для ее понимания читателю достаточно ознако~ миться с приложением 1, содержащим простейшие сведения о сравнениях.
В дальнейшем изложении, однако, существенно используются основные факты линейной алгебры, а также факты, связанные с понятиями поля и группы. Все необходимые определения и теоремы содержатся в приложениях 2——5.
з
Не освоившись с материалом этих приложений, читатель не смог бы свободно ориентироваться во второй части книги.
В заключение отметнм, что в конце большинства параграфов имеется раздел «Задачи и дополнения», где рассматриваются некоторые более специальные и, как правило, более трудные вопросы, а также приводятся задачи для самостоятельного решения. Читателю, желающему основательно разобраться в содержании книги, мы рекомендуем не пренебрегать этими задачами.
Н. Аршинов. Л. £. Садовский
I. КОДИРОВАНИЕ - ИСТОРИЯ И ПЕРВЫЕ ШАГИ
Коды появились в глубокой древности в виде криптограмм (по-гречески ——тайнописи), когда ими пользовались для засекречивания важного сообщения от тех, кому оно не было предназначено. Уже знаменитый греческий историк Геродот (V век до н. э.) приводил примеры писем, понятных лишь для одного адресата. Спартанцы имели специальный механический прибор, при помощи которого важные сообщения можно было писать особым способом, обеспечивающим сохранение тайны. Собственная секретная азбука была у Юлия Цезаря. В средние века и эпоху Возрождения над изобретением тайных шифров трудились многие выдающиеся люди, в их числе философ Фрэнсис Бэкон, крупные математики Франсуа Виет, Джероламо Кардано, Джон Валлис.
С течением времени начали появляться по-настоящему сложные шифры. Один из них, употребляемый и поныне, связан с именем ученого аббата из Вюрцбурга Тритемиуса, которого к занятиям криптографией побуждало, быть может, не только монастырское уединение, но и потребность сохранять от огласки некоторые духовные тайны. Различные хитроумные приемы кодирования применяли шифровальщики при папском дворе и дворах европейских королей. Вместе с искусством шифрования развивалось и искусство дешифровки, или, как говорят, криптоанализа.
Секретные шифры являются неотъемлемой принадлежа ностыо многих детективных романов, в которых действуют изощренные в хитрости шпионы. Писатель-романтик Эдгар По, которого иногда причисляют к создателям детективного жанра, в своем рассказе «Золотой жук» в художественной форме изложил простейшие приемы шифрования и расшифровки сообщений. Эдгар По относился к проблеме расшнф-
ровки оптимистически, вложив в уста своего героя следующую фразу: «...едва ли разуму человека дано загадать такую загадку, которую разум другого его собрата, направленный должным образом, не смог бы раскрыть. Прямо скажу, если текст зашифрован без грубых ошибок и документ в приличной сохранности, я больше ни в чем не нуждаюсь; последующие трудности для меня просто не существуют». Столетие спустя это высказывание было опровергнуто ученым, заложившим основы теории информации, Клодом Шенноном. Шеннон показал, как можно построить криптограмму, которая не поддается никакой расшифровке, если, конечно, не известен способ ее составления.
О некоторых приемах криптографии н криптоанализа мы расскажем в следующем параграфе, в остальных частях книги речь будет идти в основном об ином направлении в кодировании, которое возникло уже в близкую нам эпоху. Связано оно с проблемой передачи сообщений по линиям связи, без которых (т. е. без телеграфа, телефона, радио, телевидения и т. д.) немыслимо наше нынешнее существование. В задачу такого кодирования, как уже говорилось, входит отнюдь не засекречивание сообщений, а иная цель: сделать передачу сообщений быстрой, удобной и надежной. Предназначенное для этой цели кодирующее устройство сопоставляет каждому символу передаваемого текста, а иногда и целым словам или фразам (сообщениям) определенную ко?лбинацию сигналов (приемлемую для передачи по данному каналу связи), называемую кодом или кодовым словом. При этом операцию перевода сообщений в определенные последовательности сигналов называют кодированием, а обратную операцию, восстанавливающую по принятые сигналам (кодовым словам) передаваемые сообщения,— декодированием.
Заметим сразу же, что различные символы или сообщения должны кодироваться различными кодовыми словами, в противном случае по кодовым словам нельзя было бы восстановить передаваемые сообщения.
Исторически первый код, предназначенный для передачи сообщений, связан с именем изобретателя телеграфного аппарата Сэмюэля Морзе и известен всем как азбука Морзе. В этом коде каждой букве или цифре сопоставляется своя последовательность из кратковременных (называемых точками) и длительных (тире) импульсов тока, разделяемых паузами. Другой код, столь же широко распространенный в телеграфии (код Бодо), использует для кодирования два элементарных сигнала — импульс и паузу, при этом со-
поставляемые -буквам кодовые слова состоят из пяти такиж сигналов.
Коды, использующие два различных элементарных сигнала, называются двоичными. Удобно бывает, отвлекаясь от их физической природы, обозначать эти два сигнала символами 0 и 1. Тогда кодовые слова можно представлять как последовательности из нулей и единиц.
Двоичное кодирование тесно связано с принципом дихотомии (деления пополам). Поясним этот принцип на примере.
Некто задумал число, заключенное между 0 и 7. Угадывающему разрешено задавать вопросы, ответы на которые даются лишь в форме «да» или «нет». Каким образом следует задавать вопросы, чтобы возможно быстрее узнать задуманное число?
Самый бесхитростный путь ——перебирать числа в любом порядке, надеясь на удачу. В этом случае при везении может хватить и одного вопроса, но если не повезет, то может понадобиться и целых семь. Поэтому не будем рассчитывать на везение и постараемся построить такую систему вопросов, чтобы любой из ответов ——«да» или «нет» ——давал нам одинаковую (пусть сначала и неполную) информацию о задуманном числе. Например, первый вопрос может быть таким: «Заключено ли задуманное число в пределах от 0 до 3?» Оба ответа — и «да» и «нет» — одинаково приближают нас к цели: в любом случае остаются четыре возможности для неизвестного числа (а первоначально их было восемь).
Если на первый вопрос получен утвердительный ответ, то во второй раз можно спросить: «Не является ли задуманное число нулем или единицей?»; если же ответ был отрицательным, спросим: «Не является ли задуманное число четверкой или пятеркой»? В любом случае после ответа на второй вопрос останется выбор из двух возможностей. Для того чтобы его осуществить, достаточно одного вопроса. Итак, для угадывания задуманного числа, каким бы оно :ни было, достаточно трех вопросов (каждый из них выясняет, содержится ли задуманное число в «нижней» половине заключающего его промежутка). Можно показать, что меньшего числа вопросов недостаточно.
Если возможные ответы «да» или «нет» обозначить условно символами 0 и 1, то ответы запишутся в виде последовательности, состоящей из нулей и единиц. Так, например, если задуманное число было нулем, то на каждый из трех вопросов ответом будет «да». Трем 《на» соответствует последовательность ООО.
Если было задумано число 3, то ответами будут «да», «нет», «нет», т. е. числу 3 соответствует последовательность 011. По результатам ответов можно составить следующую таблицу:
Таблица 1
Задуманное число
0
1
2
3
4
5
6
7
Отв еты
ООО
001
010
ои
100
101
НО
Ш
Читатель, знакомый с двоичной системой счисления, узнает в нижней строке двоичную запись соответствующих чисел Еерхыей строки.
Заметим, что вместо множества чисел от 0 до 7 можно рассматривать любое множество из восьми сообщений, к каждое из них мн можем закодировать последовательнс- сгями из нулей и единиц длины 3. Если использовать более длинные двоичные последовательности, то ммк в принципе можно закодировать любое конечное множество сообщений.
Действительно, число двоичных последовательностей длины 3 равно 2?=8 (все они приведены в таблице 1), двоичных пс- с л ед о вател ьностей длины 4 вдвое больше — число 【:х равно 2':= 16. Вообще, число двоичных последовате^ь- постей длины п равно 2上 Поэтому, если требуется закодировать нулями и ед и лицами, к примеру, 125 сооб:цеи ий, то дли этого с ннбхтком хватит двоичных последэватель- иостей длины 7 (их в нашем распоряжении имеется 2'= 二二 128). Из этого примера стаповр!тся ясно, что М сообщений можно закодировать двоичными последовательностями длины『2 тогда и только тогда, когда выполняется условие т. е. когда ^^log^A仁
Первый, кто понял, что для кодирования достаточно двух символов, был Фрэнсис Бэкон. Двоичный код, который он использовал в криптографических целях, содержал пятиразрядные (как и в коде Бодо) слова, составленные из символов 0, L.
Сказанное здесь ——это лишь первые подступы к проблеме кодирования, которой посвящена эта книга. Пока же отметим только, что наряду с двоичными кодами применяют коды, использующие не два} а большее число элементарных сигналов, или, как их еще называют, кодовых символов. Их число d называют основанием кода, а множество кодовых
символов — кодовым алфавитом. При этом общее число п- буквенных слов, использующих d символов, вычисляется аналогично прежнему и равно 曲‘
Задачи и дополнения
Часто по разным соображениям для кодирования сообщений используют не все последовательности в данном алфавнте, а только некоторые из них, удовлетворяющие тем или иным ограничениям. Будем рассматривать, например, «-буквенные двоичные слова с фиксированным числом / единиц (или, как говорят, слова постоянного веса 0. Сколько всего таких слов — нетрудно подсчитать. Каждое из них получится, если мы выберем некоторым образом t позиций из к, и запишем в них единицы, а в остальных ^—/ позициях — нули. Значит, число всех слов постоянного веса совпадает с числом сочетаний из л элементов по г, т. е. равно
Сложнее найтм число всех двоичных слов длины % н:: содержащих несколько нулей подряд. Обозначим это число через s;l. Очевидно, $1=2, а слова длины 2, удовлетворяющие нашему ограничению, таковы: 10, 01, 11, т. е. $2=3. Пусть с^а? ■ • • ^п-^п — такое слоено из п символов. Если символ 汉门=1, то с<х ос2 . . . ^п~у может быть произвольным (/• —1)-букЕеиным словом, не содер;кащим нескольких нулей подр яд. Значит, число слов длины 〃 с единицей на кснав равно s“_i・
Если же символ 仪门=0, то оЕутзательно аг1_г— 1, а первые 〃——2 символа 口1纟2 • • ■ ^«-2 могут быть произвольными с учетом рассматривае- г- ого ограничения. Следовательно, имеется s„_2 слов длины 儿 с нулем на конце. Таким образом, общее число интересующих нас елоз равно
S/г = S〃一 1 + S%_ 2・
Из полученного соотношения (подобные соотношении называют рекурр€1:тмыми) легко можно найти числа sn для любого 门.Поскольку S] и s2 известны, то S3=SiT-S2=:5; 31Hs2-卜53二8, s§=S3-卜s「〕i3 н т. д. Полученная последователыюсть чисел
2, 3, 5, 8, 13, 21, 34,,
в которой каждый послед^^-ощий q<cii равен сумме двух прсдыдугцих,— это хорошо известный в математике ряд Фибоначчи. О многих интересных свойствах чисел Фибоначчи и их разнообразных приложениях можно прочесть в популярной брошюре [21], а также в недавно изданной книге [6]. В частности, можно убедиться (см. [21]), что ai-ый член ряда Фибоначчи вычисляется по формуле:
1 //1+К5 у+21
(1,62)*+ 2.(1,62)*+ 2.一丿-丿 尸 FT
(1,62)*+ 2.
(1,62)*+ 2.
Соединим оба предыдущих ограничения и найдем число двоичных слов постоянного веса Л не содержащих нескольких нулей подряд.
Рассуждать можно так. Пусть q~n——力——число нулей в рассматриваемых словах. В любом слове имеется q—1 промежутков между бли~ вкайшими нулями, в каждом из которых находится одна или несколько
единиц (см. рис. 1). Предполагается, конечно, что qw/"2. £ проглз.-юч случае (пря g>n/2) нет ни одного слова без рядом стоящих нуле負.
ОООО磔勿£彩力俏 с единицами磔勿£彩力俏 с единицамиРис.].Рис.].Если из каждого промежутка удалить ровно по одной едини-е. то получим слово длины п——7~j-l, содержащее q нулей. Легко видеть^ , что любое такое слово может быть 『получено указанным образом из не* которого (и притом только одного) п-буквенного слова, содержащего q нулей, никакие два из которых не стоят рядом. Значит, искомое число совпадает с числом всех слов длины п—,十1, содержащих ровно ° нулей, т. е. равно (см. дополнение 1)
О
О
О
О
磔勿£彩力俏 с единицами
磔勿£彩力俏 с единицами
Рис.].
Рис.].
^n-CI+X = 5+ 1 •
W2]*園一什1 =0= ОW2]*園一什1 =0= О1 + МЕу + 2 (1]Л§у + )1 + МЕу + 2 (1]Л§у + )Используя результаты дополнений 2, 3, убедиться в спразед- ливости тождества:
W2]
*園一什1 =
0= О
W2]
*園一什1 =
0= О
1 + МЕу + 2 (1]Л§у + )
1 + МЕу + 2 (1]Л§у + )
(символ [п/2] означает наибольшее целое число, не превосходящее п/2), 5. При каком q число двоичных слов из дополнения 3 максимально?
Показать, что число всех n-буквенных с/-ичных слов, в которых один из символов встречается фиксированное число Е раз, равно 匕(d—1)1 (ср. дополнение 1).
Обобщить результаты дополнений 2 и 3 применительно к с/-ично- му алфавиту.
ШИФРЫ, ШИФРЫ, ШИФРЫ...
Приемов тайнописи — великое множество, и, скорее всего, это та область, где уже нет нужды придумывать что-нибудь существенно новое. Наиболее простой тип криптограмм — это так называемые подстановочные криптограммы. Составляя их, каждой букве алфавита сопоставляют определенный символ (иногда тоже букву) и при кодировании всякую букву текста заменяют на соответствующий ей символ. В рассказе «Золотой жук» Эдгара По приводится как раз пример подстановочного шифра.
Автор рассказа наглядно демонсгр^р}/ет, что расшифровка подобных криптограмм не составляет большой проблемы. Все основывается на том (за подробностями отсылаем читателя к оригиналу), что различные буквы естественного языка — английского, русского или какого-либо другого — встречаются в осмысленных текстах неодинаково часто. Следовательно, то же самое верно для соответствующих им знаков. В еще большей мере это относится к буквосочетаниям из двух или нескольких букв: лишь некоторые из них часты, многие же вообще не употребляются.
Анализируя частоту появления тех или иных знаков и их сочетаний (именно так поступает герой Эдгара По)( можно с большой уверенностью восстановить буквы зашифрованного текста. Даже если в каких-то частях текста возникает неоднозначность, она легко устраняется по смыслу. Этот метод (он именуется частотным анализом) основывается, таким образом, на заранее известных частотах зашифрованных знаков. В следующей таблице указаны относительные частоты букв русского языка.
Буквы «е» и «ё», а также «ь», «ъ» кодируются обычно одинаково, поэтому в таблице они не различаются. Как явствует из таблицы, наиболее частая буква русского языка —«о». Ее относительная частота, равная 0,090, означает, что на 1000 букв русского текста приходится в среднем 90 букв «о». В таком же смысле понимаются относительные
Таблица 2
№
Вуква
Относит, частота
№
Буква
Относит, частота
№
Буква
Относит, частота
0
а
0,062
10
К
0,028
20
Ф
0,002
1
б
0,014
11
Л
0,035
21
X
0,009
2
в
0,038
12
м
0,026
22
Ц
0,004
3
г
0,013
13
н
0,053
23
ч
0,012
4
д
0,025
14
О
0,090
24
ш
0,006
5
е, ё
0,072
15
п
0,023
25
щ
0,003
6
ж
0,007
16
р
0,040
26
ы
0,016
7
3
0,016
17
с
0,045
27
ь, ъ
0,014
8
и
0,062
18
т
0,053
28
э
0,003
9
й
0,010
19
У
0,021
29
30
ю я
0,006
0,018
частоты и остальных букв. В таблице 2 не указан еще один «символ» — промежуток между словами. Его относительная частота наибольшая и равна 0,175.
С помощью таблицы 2 читатель сумеет, по-видимому, расшифровать такую криптограмму (расшифровку и пояснения см. в дополнении 1 на стр. 15):
Цярснсмщи ямякзж онкдждм мд снкыйн гкю онгрсямнб- нцмщф йпзоснвпялл мн б гптвзф рктцяюф нм ркнемдд.
Ненадежность подстановочных криптограмм (сравнительная легкость их расшифровки) была замечена уже дав-
но, и потому в разное врем汀 предлагались различные другие методы шифрования. Среди них важное место занимают перестановочные криптограммы. При их составлении весь текст разбивается на группы, состоящие из одинакового числа букв, и внутри каждой группы буквы некоторым образом переставляются. Если группа достаточно длинная (иногда это весь текст целиком), то число возможных перестановок очень велико, отсюда большое многообразие перестановочных криптограмм. Мы рассмотрим один тип перестановочной криптограммы, которая составляется при помощи так называемого ключевого слова. Буквы текста, который должен быть передан в зашифрованном виде, первоначально записываются в клетки прямоугольной таблицы, по ее строчкам. Буквы ключевого слова пишутся над столбцами и указывают порядок (нумерацию) этих столбцов способом, объясняемым ниже. Чтобы получить закодированный текст, па до выписывать буквы по столбцам с учетом их нумерации. Пусть текст таков: «В связи с создавшимся положением отодвигаем сроки возвращения домой. Рамзай». Используем для записи текста, в котором 65 букв, прямоугольную таблицу 11x6, в качестве ключевого возьмем слово из 6 букв «запись», столбцы занумеруем в соответствии с положением букв ключевого слова в алфавите. В результате получится следующая кодовая таблица:
Таблица 3
Выписывая буквы из столбцов таблицы 3 (сначала из первого, затем из второго и т. д.), получаем такую шифровку:
Ссп1оидмвш.омвсвпноеиадаязмомирзноавоилевсоемзздс- жоговийииаяетакряр
Ключевое слово известно, конечно, н адресату, который поэтому без труда расшифрует это сообщение. Но для тех, кто этим ключом не владеет, восстановление исходного текста весьма проблематично (хотя в принципе и возможно). Частотный анализ здесь по вполне понятным причинам не решает задачи. В лучшем случае, поскольку частоты букв примерно такие, как в таблице 2, он позволяет предположить, что было применено перестановочное кодирование.
Использование ключевого слова, конечно, не обязательно, можно было указать нумерацию столбцов цифровым ключом, в данном случае числом 214356. Слово удобнее, если ключ надо хранить в памяти (что немаловажно для конспирации). .
Имеется ряд шифров, в которых совмещены приемы подстановочного и перестановочного кодирования. Шифр можно еще более усложнить, если дополнительно к этому каждую букву заменять не одним, а двумя или несколькими символами (буквами или числами). Вот пример. Располо'кнм буквы русского алфавита в квадратной таблице 6*6 произвольным образом, например так, как в следующей таблице.
Таблица 4
0
1
2
3
4
5
0
3
и
ы
р
с
1
а
т
у
й
ь
э
2
б
в
ф
к
л
3
м
ю
я
г
X
ц
4
ч
н
0
д
е
5
ж
ш
щ
п
Каждую букву шифруем парой цифр: первая цифра это номер строки, в которой стоит данная буква, вторая —— номер столбца. Например, букве «б» соответствует обозначение 21, а слову «шифр» — обозначение 51022304.
Еще большие трудности для криптоанализа представляет шифр, связываемый с именем Тритемиуса, Этот шифр
является развитием рассматриваемого в дополнении 2 кода Цезаря и состоит в следующем. Буквы алфавита нумеруются по порядку числами 0, 1, ... , 30 (см. табл. 2). При шифровании ключевое слово (или номера его букв) подписывается под сообщением с повторениями, как показано ниже:
всвязиссоздавшимсяположениемотодвигаемсрокивозвра записьзаписьзаписьзаписьзаписьзаписьзаписьзаписьз тцениядомойрамзай аписьзаписьзапис
Каждая буква сообщения «сдвигается» вдоль алфавита по следующему правилу: буква с номером т, под которой стоит буква ключевого слова с номером 々,заменяется на букву с номером l^tn+k (если т+й<31) или букву с номером l^m+k—31 (если m+fe>31). Например, первая буква «в» сдвигается на 7 букв и заменяется буквой «й», следующая буква «с» остается без изменения и т. д. Таким образом, номер Z кодирующей буквы вычисляется по формуле:'
l^m+k (mod 31).(1)
В цифровых обозначениях исходное сообщение и повторяемое ключевое слово запишутся в следующем виде: Т а б л гг ц а 5
Сообще!ше
2
17
2
30
7
8
17
17
14
7
4
0
2
Ключ
7
0
15
8
17
27
7
0
15
8
17
27
7
Сообщен не
24
8
12
17
30
15
14
11
14
6
5
13
8
Ключ
0
15
8
17
27
7
0
15
8
17
27
7
0
Сообщение
5
12
14
18
14
4
2
8
3
0
5
12
17
Ключ
15
8
17
27
7
0
15
8
17
27
7
0
15
Сосбщ.енне
16
14
10
8
2
14
7
2
16
0
25
5
13
Ключ
8
17
27
7
0
15
8
17
27
7
0
15
8
Сообщение
8
30
4
14
12
14
9
16
0
12
7
0
9
Ключ
17
27
7
0
15
8
17
27
7
0
15
8
17
После суммирования верхней и нижней строки по модулю 31 получаем последовательность чисел:
14
9.17.17.7.24.4.24.17.29.15.21.27.9.24.23.20.3.26.22.14 26
.23.1.20.8.20.20.0.14.21.4.17.16.20.27.12.12.1.24. 6. 6’ 15.2.29,15,19.12.7.25.20.21.25,26.11. 14. 27. 22. 26. 12. 7. 12.22.8.26.
Наконец, заменяя числа на буквы, приходим к закодированному тексту:
йссзшдшсюпхьйшчфгьщоыцчбфиффаохдсрфьммбшажпвю пумзщфхщылоьцымзмциы
Если ключевое слово известно, то дешифровка производится безо всякого труда на основе равенства:
т=1—k (mod 31).
Чрезвычайно трудно расшифровать подобный текст, если ключ неизвестен, хотя в истории криптографии были случаи, когда такие тексты разгадывались. Дело в том, что повторяемость ключевого слова накладывает некоторый отпечаток на криптограмму, а это может быть обнаружено статистическими методами, которые позволяют судить о длине ключевого слова, после чего расшифровка значительно упрощается.
Мы рассмотрели лишь некоторые способы составления криптограмм. Заметим, что комбинируя их, можно получать шифры, еще более труднодоступные для расшифровки. Однако вместе с этим возрастают трудности пользования шифром для отправителя секретного сообщения и адресата, поскольку сильно усложняется техника шифровки и дешифровки даже при наличии ключа.
Задаче^ к дополнен院以
1. Для расшифровки криптограммы на стр. 11 подсчитаем, сколько раз встречается в ней каждая буква. Результаты подсчета .приведены в следующей таблице:
Таблица 6
Буква
н м я к д с р
г о- п з ф ц 6 в ж й л т щ ю е и ы
Число появлений в тексте
11 9 6 6 5 5 4
33333 3222222221 1 1
Наиболее часто встречающийся символ 《н» скорее f сего означает букву «о». Сделав такое предположение, рассмотрим следующий по частоте символ «м». В криптограмме имеется двубуквенное сочетание 《мн», и так как «н» — это «о», то символ «м» соответствует согласной.
Среди согласных в русском языке выделяются по частоте буквы &т$ и «н» (см. табл. 2), и потому《м》скорее всего означает одну из этих букв. Разберем случай, когда «м» означает «н», предоставляя читателю самостоятельно убедиться, что другая возможность не приводит к осмысленной расшифровке криптограммы.
Если《м» — это «н», то в сочетании «мд», встречающемся в криптограмме, 《反》означает скорее всего гласную. Из наиболее вероятных для «д» вариантов《а»,《е», «и» выбираем《е», потому что лишь в атом случае имеющееся в криптограмме слово «ркнемдд» допускает осмысленную расшифровку. Итак три знака разгаданы:《н» — это «о»,《м» — «н», «д» ——«е». Обращаемся к сочетанию «ямякзж». В нем «я» может означать лишь гласную «а» или 《и». Любые другие возможности заведомо не допускают разумного прочтения слова «ямякзж». Испытаем букву 《а》. Подставляя вместо «я» букву《а》,вместо «м» ——«н», вместо других знаков точки, получим недописанное слово «ана...». В словаре имеется всего лишь несколько слов из 6 букв с таким началом: 《анализ», «аналог», «ананас»,《анатом». Из них годится лишь первое (почему?). Если вместо «я» подставить букву «и», то получится шестибуквенное сочетание с началом «ини», но в словаре нет ни одного такого слова. Расшифрованы еще четыре буквы: «я», «к», «з», «ж» означают соответственно «а», «л», «и», «з».
В слове «онкждм» известны все символы, кроме первого. Заменяя их буквами, получаем: «.олезен»5 Ясно, что неизвестная буква — это «п». Значит, 《и》расшифровывается как «п».
Не разгаданы еще два сравнительно часто встречающиеся знака «о» и «р». Рассмотрим сочетание «ркнемдд», означающее 《.ло.нее». Имеется немного вариантов его прочтения, один из них —— «сложнее», и следовательно, скорее всего «р» ——это «с», «е》■это «ж».
Из нерасшифрованных еще знаков чаще всего встречается《с》. В соответствии с таблицей 2 среди оставшихся согласных наибольшую частоту имеет «т»,. Естественно поэтому предположить, что «с» означает «т».
Попытаемся восстановить зашифрованный текст, подставляя вместо разгаданных знаков соответствующие им буквы:
.астстн..анализ полезен не тол..о .л. по.стано.о.н.. ..ипто..а.. нои. сл..а.. он сложнее
Ясны (по контексту), по крайней мере, три слова:《.астотн..» означает «частотный», «тол..о» ——«только», «.л.» ―■ «для». С учетом новой иифорл!ации текст примет следующую форму:
Частотный анализ полезен не только для подстано.очны. к.ипто..а.< но .二сл.чая. он сложнее
Окончательная расшифровка не представляет труда. Текст таков: Частотный анализ полезен не только для подстановочных криптограмм, по в других случаях он сложнее
Шифр, примененный в предыдущем прнмере,——это так называемый шифр Цезаря. Он состоит в том, что весь алфавит сдвигается на определенное число букв вправо или влево. В данном случае был применен сдвиг влево на одну букву, т. е. каждая буква заменялась предшествующей буквой алфавита (при этом для буквы «а» предшествующей считалась буква «я»). Для шифра Цезаря имеется более простой способ расшифровки — так называемый метод полосок. На каждую полоску наносятся по порядку все буквы алфавита. В криптограмме 16
берется некоторое слово, например, «онкдждм». Полоски прикладыва- Ю&Я друг к другу так, чтобы образовать данное слово (рис. 2). Двигаясь вдОль полосок, находим среди строк единственное осмысленное сочета- нне «полезен», которое и служит расшифровкой данного слова. Одновременно находим величину сдвига.
В качестве упражнения читателю рекомендуется расшифровать методом полосок следующую криптограмму, зашифрованную кодом Цезаря:
ЕИФИРРЛМ ФЕИХОЮМ ЗИРЯ ЫОСРОФВ Н ЕИЫИУЦ РСК- СЕ ЮИ ХЦЫНЛ ФХСВОЛ ЕЮ①СНС Е ВФОСП РИДИ Л НГКГС- ся РИ ТОЮОЛ ПЛПС Г ЦШСЗЛОЛ Е ФГПЦБ ЖОЦДЯ ОГКЦУЛ.
Ответом служит первая фраза романа И. С. Тургенева «Дворянское гнездо».
Расшифруйте числовую криптограмму:
777879353724122554327443274248642864382223868838522i23
Ключ для расшифровки следующий. Разбейте числовую последовательность на двузначные числа. Вместо каждого числа надо подставить букву, стоящую на стр. 12 настоящей книги,——первая цифра числа указывает номер строки, в которой стоит искомая буква, а вторая ——номер этой буквы в данной строке.
Это пример криптограммы, для составления и расшифровки которой используется некоторый заранее условленный текст, известный и отправителю, и адресату.
Другим примером шнфра, использующего заранее условленный текст, является так называемый шифр «бегущего ключа». При шифрован и и по этому методу условленный текст накладывается на передаваемый так же, как в шифре Тритемиуса.
код ФАНО — экономный код
Алфавита из двух (а подавно ——из большего числа) символов, как мы убедились в § 1, достаточно для кодирования любого множества сообщений. Устанавливая этот факт, мы кодировали все сообщения словами одинаковой длины, что, однако, далеко не всегда бывает выгодно.
Представим себе, что одни сообщения приходится передавать довольно часто, другие ——редко, третьи -— совсем в исключительных случаях. Понятно, что первые лучше закодировать тогда короткими словами, оставив более длинные слова для кодирования сообщений, появляющихся реже. В результате кодовый текст станет в среднем короче, и на его передачу потребуется меньше времени.
Впервые эта простая идея была реализована упоминавшимся нами американским инженером Лкорзе в предложенном нм коде. Рассказывают, что создавая свой код, Морзе отправился в ближайшую типографию и подсчитал число литер в наборных кассах. Буквам и знакам, для которых литер в этих кассах было припасено больше, он сопоставил более короткие кодовые обозначения (ведь эти буквы встречаются чаще). Так, например, в русском варианте азбуки Морзе буква «е» передается одной точкой, а редко встречающаяся буква «ц» ——набором из четырех символов.
В математике мерой частоты появления того или иного события является его вероятность. Вероятность события 4 обозначают обычно символом Р (Л) или просто буквой Р. Не останавливаясь на определении вероятности, заметим только, что вероятность некоторого события (сообщения) можно представлять себе как долю тех случаев, в которых оно появляется, от общего числа появившихся событий (сообщени !).
Так, если заданы четыре сообщения Ль А^ Л3, Л4 е вероятностями р (/1)=1/2,尸(儿)=1/4,尸(/з)=p (/J = = 1/8, то это означает, что среди, например, 1 000 переданных сообщений около 500 раз появляется сообщение Лъ около 250 —— сообщение 才豆 и примерно по 125 раз —— каждое из сообщений <з и Л4.
Зтн сообщения нетрудно закодировать двоичными словами длины 2, например так, как показано в следующей таблице:
Однако при таком кодировании вероятность появления сообщений никак не учитывается. Поступим теперь иначе. Разобьем сообщения на две равновероятные группы: в первую попадает сообщение 4, во вторую — сообщения Л а, 4, 4, Сопоставим первой группе символ 0, второй —— символ I (см. таблицу 8; во второй графе таблицы указаны вероятности сообщений).
Таблица 8
Это вполне в духе принципа, применявшегося в задаче с угадыванием. Действительно, символ 0 соответствует ответу «да» на вопрос «принадлежит ли сообщение первой группе?», а 1 — ответу «нет». Разница лишь в том, что раньше все множество разбивалось на две группы с одинаковым числом элементов, теперь же в первой группе один, а во пторой ——три элемента. Но, как и раньше, разбиение это таково, что оба ответа《да》и《нет》равновозможны. Продолжая в том же духе, разобьем множество сообщений А2, Л3, 4《снова на две равновероятные группы. Первой, состоящей из одного сообщения А^, сопоставим символ 0, а второй, в которую входят сообщения Л3 и Л4,——символ 1. Наконец оставшуюся группу из двух сообщений разобьем на две группы, содержащие соответственно сообщения Л3 и Ait
сопоставив первой из них 0, а второй — символ 1. Сообщение А】 образовало 《самостоятельную》 группу на первом шаге, ему был сопоставлен символ 0, слово 0 н будем считать кодом этого сообщения. Сообщение Л2 образовало самостоятельную группу за два шага, на первом шаге ему со~ поставлялся символ 1, на втором ——0; поэтому будем кодировать сообщение Л2 словом 10. Аналогично, для Л3 и Л4 выбираем соответственно коды НО и 111, В итоге получается следующая кодовая таблица:
Таблица 9
& 4 4 I &
010 НО 111
Указанный здесь способ кодирозания был предложен американским математиком Фано. Оценим тот выигрыш, который дает в нашем случае код Фано по сравнению с равномерным кодом, когда все сообщения кодируются словами длины 2. Представим себе, что нужно передать в общей сложности 1000 сообщений. При использовании равномерного кода на их передачу потребуется 2000 двоичных символов.
Пусть теперь используется код Фано. Вспомним, что из 1000 сообщений примерно 500 раз появляется сообщение Лъ которое кодируется всего одним символом (на это 57йдет 500 символов), 250 раз — сообщение 儿,кодируемое двумя символами (еще 500 символов), примерно по 125 раз — сообщения Лз и 4« с кодами длины 3 (еще Зх 125+3X 125= 匚750 символов). Всего придется передать примерно 1750 символов. В итоге мы экономим восьмую часть того времени, которое требуется для передачи сообщений равномер, ным кодом. В других случаях экономия от применения кода Фано может оказаться еще значительнее.
Уже этот пример показывает, что показателем экономности или эффективности неравномерного кода являются не длины отдельных кодовых слов, а «средняя» их длина 77 определяемая равенством:
где lt ——длина кодового обозначения для сообщения 4“ Р(А^ ——вероятность сообщения Ai} N — общее число со« общений.
Наиболее экономным оказывается код с наимень
шей средней длиной /. В примере для кода Фано х0,5+2х0,25+3x2x0,125-1,75, в то время как для равномерного кода средняя длина 7=2 (она совпадает с общей длиной кодовых слов).
Нетрудно описать общую схему метода Фано. Располагаем N сообщений в порядке убывания их вероятностей: Р (4)^Р (力 2)》… ・»Р (%n)・ Далее разбиваем множество сообщений на две группы так, чтобы суммарные вероятности сообщений каждой из групп были как можно более близки друг к другу. Сообщениям из одной группы в каче
стве первого символа кодового слова приписывается символ 0, сообщениям из другой ——символ 1. По тому же принципу каждая из полученных групп снова разбивается на две части, и это разбиение определяет значение второго символа кодового слова. Процедура продолжается до тех пор,.пока все множество не будет разбито на отдельные сообщения. В результате каждо?лу из сообщений будет сопоставлено кодовое слово из нулей м единиц.
Понятно, что чем более вероятно сообщение, тем быстрее оно образует «самостоятельную» группу и тем более коротким словом оно будет закодировано. Это обстоятельство и обеспечивает высокую экономность кода Фано.
Описанный метод кодирования можно применять и в случае произвольного алфавита из d символов с той лишь разницей, что на каждом шаге следует производить разбиение па d равновероятных групп.
Алгоритм кодирования Фано имеет очень простую графическую иллюстрацию в виде множества точек (вершин)
на плоскости, соединенных отрезками (ребрами) по определенному правилу (такие фигуры в математике называют графами). Граф для кода Фано строится следующим образом (см. рис, 3). Из нижней (корневой) вершины графа исходят два ребра, одно из которых помечено символом 0, другое —символом 1. Эти два реб
ра соответствуют разбиению .
множества сообщений на две равновероятныег руппы, одной из которых сопоставляется символ 0, а другой ——символ 1. Ребра, исходящие из вершин следующего «этажа», соответ-
ствуют разбиению получившихся групп снова на равновероятные подгруппы и т. д. Построение графа заканчивается, когда множество сообщений будет разбито на одноэлементные подмножества. Каждая концевая вершина графа, т. е. вершина, из которой уже не исходят ребра, соответствует некоторому кодовому слову. Чтобы указать это слово, надо пройти путь от корневой вершины до соответствующей концевой, выписывая в порядке следования по этому пути символы проходимых ребер. Например, вершине а3 на рис. 3 соответствует слово 100, а вершине % — слово 1110 (вершины, соответствующие кодовым словам, помечены ка рисунке кружками).
Граф для рассмотренного выше примера представлен на рис. 4.
Получающиеся для кодов Фано графы всегда обладают тем свойством, что они не содержат замкнутых контуров. Такие графы называют деревьями (мы будем называть их, учитывая происхождение, кодовыми деревьями). Кодовые деревья можно строить не только для кодов Фано, но и для других кодов. Независимо от алгоритма кодирования каждому дереву соответствует определенное множество кодовых слов. Например, для кодового дерева, изображенного на рис. 3, имеем:
• 41=00, 〃2=01, 〃з=100, &=101, й5 — 110,0(5= i 1 10,1111.
вольным основанием d.вольным основанием d.Кодовое дерево может быть построено для кода с произ
вольным основанием d.
вольным основанием d.
Каждое его ребро помечается тогда
одни м из d символов алфавита и из каждой вершины такого дерева исходит самое большее d различных ребер. Например, на рис. 5 представлено кодовое дерево для троичного кода со следующим множеством кодовых слов: 0, 10, И, 120, 121,20,21, 220, 221, 222. Кодовые деревья дают удобное геометрическое представление для многих важных понятий и облегчают, как мы увидим, решение различных задач, возникающих при построении экономных кодов.
Задачи и дополнения
Закодировать двоичным кодом Фано следующие множества сообщений:
семь сообщений с вероятностями
内=〃2= 1/4; Рз=Р尸Р§= V8; р6=р7= 1〃6;
десять сообщений с вероятностями
内=p2=0,22;禽=p4=p5=见=°,1;。7=p8=p9=内0=°,04,
Найти среднюю длину каждого из полученных кодов.
Выяснить, каков выигрыш по сравнению с равномерным кодированием.
Приведем пример троичного кодирования методом Фано для множества из 8 сообщений с вероятностями
%=0,3;p2=卩3=内=0,15; p5=р6=p7=°,°7; p8=°,04.
Таблица 10
Сооб - щеняя'
Вероятности
Кодо-
слова
&
0,3
0
0
%
0,15
0
10
力3
0,15
1
1
11
4
0,15
0
20
/
0,07
0
210
1
4
0,07
21
211
厶7
0,07
0
220
2
4
0,04
1
221
Закодировать троичным кодом Фано следующие множества сообщений:
9 сообщений с вероятностями
1/3; 1/9; 1/9; 1/9; 1/9; 1/9; 1/27; 1/27; 1/27;,
10 сообщений с вероятностями
0,2; 0,15; 0,15; 0,1; 0,1; 0,1; 0,05; 0,05; 0,05; 0,05.
СВОЙСТВО ПРЕФИКСА, ИЛИ КУДА ИДТИ РОБОТУ
При использовании неравномерных кодов приходится сталкиваться с одной проблемой, которую мы поясним на примере кодовой таблицы 9 предыдущего параграфа. На первый взгляд разумно было бы укоротить второе и третье кодовые слова, отбросив в них последний символ, так как при этом основное наше требование сохраняется: по-прежнему различные сообщения кодируются разными словами, как это видно из получившейся новой кодовой таблицы.
Но пусть, к примеру, данные сообщения ——это команды) выдаваемые электродному роботу: Лi ——идти прямо, 4?— повернуть назад, 儿一свернуть влево, 儿一свернуть вправо. Предположим, что программа поведения робота задается следующей последовательностью:
Ai А3 Ai А^ Аг А2 Аз ...(1)
В результате кодирования эта последовательность пре- .образуется в такой двоичный текст:
01101110111 ....
Легко вообразить себе, в какое недо^^мение привели 6* мы робота, снабдив его подобной инструкцией. Куда же ему идти? Ясно, что сначала надо идти прямо. А дальше - свернуть влево пли повернуть назад, потом еще раз назад? Впереди же еще большая путаница...
Естественно возразить, что следовало бы отделить одни кодовое слово от другого. Разумеется, это можно сделать, но лишь используя либо паузу между словами, либо специальный разделительный знак, для которого необходимо особое кодовое обозначение. И тот и другой путь приведет к значительному удлинению кодового текста? сводя на нет наше предыдущее «усовершенствование».
Другое дело, если мы будем пользоваться прежними кодовыми обозначениями для сообщений Лг. Тогда последовательность (1) будет закодирована так:
011001110101100.
Здесь уже не может быть разночтений. Первое слово 0 — идти прямо, второе слово 110 — свернуть влево, так как в списке кодовых слов не значатся слова 1 и 11. В атом сплошном тексте одно за другим однозначно выделяются кодовые слова, и нет сомнений, что робот найдет правильную дорогу.
Итак, суть проблемы в том, что нужно уметь в любом кодовом тексте выделять отдельные кодовые слова без использования специальных разделительных знаков. Иначе говоря, мы хотим, чтобы код удовлетворял следующему требованию: всякая последовательность кодовых символов может быть единственным образом разбита на кодовые слова. Коды, для которых последнее требование выполнено, называются однозначно декодируемыми (иногда их называют кодами без запято^.
Наиболее простыми н угютрзбимыми кодами без запятой являются так называемые префиксные коды, обладакхцне тем ствойством, что никакое кодовое слово не является началом (префиксом) другого кодового слова. Если код префиксный, то, читая кодовую запись подряд от начала, мы всегда сможем разобраться, где кончается одно кодовое слово и начинается следующее. Если, например, в кодовой записи встретилось кодовое обозначение 110, то раз-@
почтении быть не может, так как в силуЛ
префиксности наш код не содержит кодо-S
вых обозначений 1, 11 или, скажем, 1101. 気 /7 Именно так обстояло дело для рассмотрен- / ного выше кода, который очевидно я вл я- ется префиксным.Рис. 6.
Нетрудно понять, как отражается свой
ство префиксности или его отсутствие на кодовом дереве. На рис, 6 представлено дерево для кода из таблицы 11 (кружками, как и раньше, помечены те вершины, которые соответствуют кодовым словам). Таким образом, если свойство префикса не выполняется, то некоторые промежуточные вершины дерева могут соответствовать кодовым словам. Для кода Фано это невозможно, так как по самому алгоритму кодирования- построение кодового слова заканчивается одновременно с достижением концевой вершины. Следовательно, код Фано является префиксным кодом.
Задачи и допол^ен^к
Префиксный код называют полнымt если дойавление к нему любого нового кодового слова (в данном алфавите) нарушает свойство префиксности. Убедиться, что двоичные коды, деревья которых изображены на рис. 3, 4, являются полными.
На рис. 7 представлено кодовое дерево префиксного, но неполного двоичного кода. Действительно, добавив к кодовым словам 0, 10, Ш слово 110, получим снова префиксный код.
Доказать, что двоичный код Фано является полным кодом. Верно ли аналогичное утверждение для кода Фано с произвольным основанием?
Проанализировав задачи 1 и 2, сформулировать необходимое и достаточное условие, которому должно удовлетворять кодовое дерево полного префиксного кода, и доказать его необходимость и достаточность.
Используя кодовое дерево, доказать, что всякий префиксный код может быть расширен до полного кода добавлением к нему некоторого множества кодовых слов.
Пусть k ——максимальное значение длин кодовых слоз префиксного кода. Показать, что число кодовых слов не превосходит величины 2府 в случае двоичного кода и величины d左 в случае кода с произвольным основанием 力.При каких условиях достигается равенство?
Код, представленный на рис. 7, можно сделать более экономным, отбрасывая в слове 111 последний символ. При этом свойство префикс- ности не нарушится. Подобная операция, состоящая в том, что каждое
слово префиксного кода заменяется наименьшим его началом, не являющиеся началом других кодовых слов, называется усечением. Очевидно, Ч7О в результате усечения получается префиксный код и при этом более экономный, чем исходный. Возникают такие два вопроса:
Возможно ли усечение полного кода?
Можно ли утверждать, что в результате усечения получается полный код?
На рис. 8,а представлено кодовое дерево префиксного кода, для которого усеиенне невозможно. В то же время мы получим более эко- 1юмный префиксный код (рис. 8, б), если в словах ,110 и 111 вычеркнем втор ой символ 1.
Справедливо следующее утверждение: префиксный код является полным тогда и только тогда, когда его невозможно сократить (т. е* вычеркнуть хотя бы один знак в любом из кодовых слов), не нарушив свойства префикса.
Любопытно рассмотреть примеры однозначно декодируемых кодов, не обладающих свойством префикса. Пожалуй, простейшим примером такого рода является двоичный код {1, 10}. Ясно, что в любой кодовой последовательности, составленной из этих слов, всякое появле-
ние символа 1 означает начало нового кодового слова. Последнее остается справедливым для кода, каждое слово которого есть единица с последующими нулями. Разумеется, подобные коды далеко не самые экономные.
Приведем менее тривиальный пример однозначно декодируемого кода: {01, 10, 011}. Рекомендуем читателю указать алгоритм однозначного выделения кодовых слов из кодовой последовательности для этого кода.
Как узнать, является ли произвольный код однозначно декодируемым? Для этого можно предложить следующий способ. Возьмем всевозможные пары кодовых слов, в которых одно слово является префиксом другого. Для каждой такой пары найдем «повисший» суффикс, который остается после удаления префиксного слова из начальной части более длинного слова. Например, повисший суффикс для пары 10 и 10010 есть 010. Выпишем все повисшие суффиксы. Далее проделаем то же самое для каждой пары слов, состоящей из повисшего суффикса н кодового слова, в которой одно слово является префиксом другого. Выпишем все новые повисшие суффиксы, которые при этом получатся. Будем продолжать этот процесс ко тех пор, пока будут появляться новые суффиксы. Код является однозначно декодируемым тогда и только тогда, когда никакой суффикс не совпадет ни с одним кодовым словом.
Выяснить, обладают ли свойством однозначной декодируемости следующие коды:
{НО, Л, 100, 00, 10};{100, 001, 101, 1101, 11011}.
Префиксные коды иногда называют мгновенными (или мгновенно декодируемыми), поскольку конец кодового слова опознается сразу, как только мы достигаем конечного символа слова при чтении кодовой последовательности. В этом состоит преимущество префиксных кодов перед другими однозначно декодируемыми кодами, для которых конец кэ/хдого кодового слова, как мы видели, может быть найден лишь после анализа одного или нескольких последующих символов, а иногда и всей кодсвсй последовательности. Таким образом, в отличие от префиксного кода декодирование здесь осуществляется с запаздыванием по отношению к передаче сообщения.
5. ЕЩЕ О СВОЙСТВЕ ПРЕФИКСА
И ОДНОЗНАЧНОЙ ДЕКОДИРУЕМОСТИ
Возникает вопрос: каковы возможные длины кодовых слов однозначно декодируемого, в частности, префиксного кода? Понятно, например, что не существует двоичного префиксного кода с длинами кодовых слов 1, 1,2. Несколько труднее ответить на такой вопрос: существует ли префиксный двоичный код, содержащий 100 слов с длинами от 1 до 100? Оказывается, существует. Кодовое дерево для требуемого кода, содержащее 100 «этажей», изображено на рис. 9 (пунктиром отмечены пропущенные этажи).
Вопросы такого рода можно было бы продолжить, отвечая на них в каждом конкретном случае. Но на самом деле можно установить общие условия (необходимые и достаточ-
пые) для существования префиксного и вообще произвольного однозначно декодируемого кода.
Пусть V= {аъ о?, ... , &“}——префиксный двоичный код, дерево которого схематически изображено на рис. 10.
Пусть nk ——число кодовых слов длины 々(пк совпадает с числом концевых вершин А-го этажа). Конечно, справедливо неравенство
曲《2%(1)
так как 2总——максимально возможное число вершин на k-м этаже двоичного дерева. Однако в случае префиксного кода для 龍抵 можно получить гораздо более точную оценку, чем (1). В самом деле, если『%, /??, ...,几冗一】 ——число концевых вершин 1; 2; ... ; k——1 этажей дерева, то число всех вершин ^-го этажа кодового дерева равно
2血—2走一1%—2兑—2心.I,
н потому
/7尼 《 2国—2用一切]—2," 2"2 — ■. . -2/%—『(2)
или иначе
2为7勺 + 2*宀2户2 + • • • + 2几比一i + nk 忘 2й.
Деля обе части последнего неравенства на 2*, получаем:
£〃,2-у.(3)
f 1
Неравенство (3) верно для любого 為《丄(Л —— макси, мальная длина кодовых слов), в частности
£&2-у.(4)
Если /i, /2,, In — длины кодовых словaNi
то неравенство (4) запишется в таком виде:
2-4+ 2-4+...十2-为* 1.(5)
с)то и есть то условие, которому обязаны удовлетворять длины кодовых слов двоичного префиксного кода.
Оказывается, что неравенство (5), называемое в теории кодирования неравенством Крафта, является также достаточным условием того, чтобы существовал префиксный код с длинами кодовых слов 厶,/2,» /n・
Рассуждаем так. Если среди чисел 厶,/2, ••• , /# имеется ровно 孔£ чисел, равных 九 то неравенство (5) можно переписать в виде (4), где L ——максимальное из данных чисел. Из
справедливости (4) подавно следует, что верны неравенства (3) для всех k^L, а, следовательно, и неравенство (2).
Обратимся к рис. 11, на котором изображено дерево «высоты» L, имеющее наибольшее число вершин и ветвей (ребер). Все концевые вершины (их 2丄)такого дерева находятся на последнем L-ом этаже, а из каждой вершины промежуточного этажа исходят ровно две ветви.
Для построения нужного префиксного кода мы должны подходящим образом выбрать «х слов длины 1,孔豆 слов длины 2, вообще nk слов длины k (1&々&£) или, иными словами, «i концевых вершин на первом; п2 — на втором,, пй — на А-ом этаже.
Из неравенства (2) при 々=1 получаем %&2, т. е. требуемое число не превосходит общего числа вершин первого этажа. Значит, на этом этаже можно выбрать какие-то nt вершин в качестве концевых (孔工 равно 0, 1 или 2). Если это сделано, то из общего числа вершин второго этажа (их 22=4) для построения кода можно использовать лишь 4——2几л (почему?). Однако нам хватит и этого числа вершин, так как из неравенства (2) при 々=2 вытекает
Аналогично, при й=3 имеем неравенств。:
拉寸 ^^2*—4Ml—2〃 2 •
Правая часть его вновь совпадает с допустимым для построения префиксного кода числом вершин третьего этажа, если на первых двух этажах уже выбраны пх и 孔纟 концевых вершин. Значит, снова можно выбрать п3 концевых вершин на третьем этаже. Продолжая этот процесс вплоть до %=£, мы и получим требуемый код.
Если кодовый алфавит содержит d символов, то подобным же образом доказывается, что необходимым и достаточным условием для существования префиксного кода с длинами слов /], 1需、…,In является выполнение неравенства
介厶+ 十4 + . ..+йГ%& 1.(6)
Оказывается, неравенству (6) обязаны удовлетворять и длины кодовых слов произвольного однозначно декодируемого кода. Поэтому, если существует однозначно декодируемый код с длинами слов 厶,/2,…,In, то существует и префиксный код с теми же длинами слов. Префиксными же кодами пользоваться удобнее по причине, указанной в дополнении 11 к § 4.
Задачи и дополнения
Каково минимальное число слов полного двоичного префиксного кода с максимальной длиной L? Какими будут длины кодовых слов такого минимального кода? (Ответы на эти вопросы подска- бывает рис. 9.)
Решить те же вопросы в случае d-nqHoro кода.
Доказать, что префиксный код является полным тогда и только тогда, когда в неравенстве Крафта достигается равенство:
+广为=1.
У к а з а н и е* То, что из предыдущего равенства вытекает полнота, очевидно. Для доказательства обратного утверждения следует предположить, что неравенство (6) строгое* Тогда н9 него выводится
строгое же неравенство
пд < «£ ——孔]dL~2n2~dnL^i, которое показывает (тюиему?), что можно добавить по крайней мерс еще одно слово, не нарушая префиксности.
Утверждение предыдущей задачи допускает следующую забавную интерпретацию, являющуюся одновременно и его доказательством (она заимствована из книги [6]).
Рассмотрим дерево, соответствующее полному префиксному коду. Представим себе, что на это дерево взбирается обезьяна. Начав с корня, она наугад выбирает любую из d исходящих из него ветвей; вероятность такого выбора равна 1/d. Добравшись до очередной развилки, обезьяна снова наугад выбирает некоторую ветвь с вероятностью 1/d (напомним, 竺тс из каждой промежуточной вершины дерева полного кода исходит ровно d ветвей). Тогда вероятность того, что обезьяна достигнет какой- то определенной концевой вершины, находящейся на высоте 2, равна (1/d)克.Если таких вершин 冷玄,то с вероятностью 总总《一兑 обезьяна остановится на высоте k. На какой-то высоте от 1 до £ обезьяне придется
остановиться (вероятность этого равна 1). Поэтому £ п£ -总=L
(В приведенном рассуждении мы использовали правила сложения и умножения вероятностей.)
Префиксный код с данными длинами кодовых слов может быть построен далеко не единственным способом. Пусть d-ичный префиксный код (не обязательно полный) имеет м« слов длины 々(I c^cL). Доказать, что число различных таких кодов с фиксированными L и п^ равно произведению
X /d3-d%ti\ — dri2以 "3X /d3-d%ti\ — dri2以 "3X…X…
X /d3-d%ti\ — dri2
以 "3
X /d3-d%ti\ — dri2
以 "3
X…
X…
…X…X/ d^ — dl_ i/i j — «*. — 6//2L _ j
…X
…X
где (;)=。!——число сочетаний из i элементов по /.
Например, число двоичных префиксных кодов с L —4,孔[=0,孔2= 1, 篦3=2,m4=4 равно
de;鑑 d = 4200.
Выше было доказано, что если для чисел 4,/2, ,,.,/# выполняется неравенство Крафта, то существует префиксный код с длинами li, %,•…,(zv・ Найти этот код можно, строя этаж за этажом его кодовое дерево. Другой более удобный метод решения этой задачи был придуман Шенноном, и (применительно к двоичным кодам) он состоит в следующем.
Пусть числа /?, /2,,・,,/& удовлетворяют неравенству
% I
2 2
Можно считать, что Gv?2V.・,《齿・ Рассмотрим последовательность чисел
91 = 0; q? = 22 一 ” qN= 2 1.(7)
i= 11
Заметим, что все эти числа заключены в пределах 0《д/<1, поэтому каждое .из них может быть представлено двоичной дробью вида ' п
2 竄々2一储 где каждое сц есть 0 или 1. При этом из (7) можно заклю- fe= 1
чить, что все эти дроби конечны, и двоичная запись для д/ имеет не более // значащих цифр. Таким образом, любое число & однозначно представимо в виде:
где всякое с/у есть 0 или 1. Следовательно, каждому д」однозначно отвечает СЛОВО U/=C1*2/ • > q.j ДЛИНЫ /у. РаССМОТрИМ КОД V— {Ур у2, ...,?дг}・ Покажем, что он обладает свойством префикса. Пусть и」и v^ два слова (Л>/). Тогда, согласно (7),夕々——q彦2 /, а это означает, что "•员 символ слова и/ не совпадает с /у-м символом слова vk. Следовательно, В/ не явл兄ется началом vki откуда и вытекает префиксность кода V.
Разъясним сказанное на примере. Построим префиксный код с длинами слов 左=1, /2~ ^з—3,厶=4. В этом случае
С153
力=0; g=万; g3 =豆;04=彳.
Двоичная запись этих чисел с нужным числом ,/ знаков следующая: С 1 I о , 01 ; о , 1
91 = 0,'2 =歹十声十声;*=万+声 +可;
仙=^ +后+ ^ + 急
В результате мы получим искомый код:
% = 0;f2— 100;v3= 101;у4— 1100.
Используя метод Ше...:она)найти префиксные коды с указанными ниже длинами слов:
а)乙仁勾匸?; 4=4=3;"=/б=/?=4;
6)乙=1;为=2;%=厶=?5=4=4*
Построить кодовые деревья для полученных кодов. Определить, какой из этих уоаов является полным.
ОПТИМАЛЬНЫЙ КОД
Как уже говорилось, общее правило при построении экономного кода следующее: чаще встречающиеся сообщения нужно кодировать более короткими кодовыми словами, а более длинные слова использовать для кодирования редких сообщений. Это правило и было реализовано в рассмотренном выше методе кодирования Фано. Но всегда ли метод Фано приводит к наиболее экономному коду? Ока-
зывается, нет. Способ построения оптимального кода, который мы здесь изложим, потребует от нас более тонких рассуждений. .
Пусть сообщения 才厶 А^ ... , AN имеют вероятности рь Р% ••• , Pn (Pi》P2》・-》Pn) и кодируются двоичными словами а】, eg, ... , aNi имеющими длины 乙,/?, ... , lN. Постараемся выяснить, какими свойствами должен обладать двоичный код, если он оптимален.
В оптимальном коде менее вероятное сообщение не может кодироваться более коротким словом, т. е. если р;< v^P力T。厶)/力
Действительно, в противном случае поменяем ролями кодовые обозначения для Лг и Л;. При этом средняя длина кодовых слов изменится на величину
р а а р 储一p" j—p з=в lp w I а。,
е. уменьшится, что противоречит определению оптимального кода.
Если код оптимален, то всегда можно так перенумеровать сообщения и соответствующие им кодовые слова, что Р言Р^…》Pn И при этом
厶式厶《…. ⑴
В самом деле, если р>р』, то из свойства 1 следует, что 厶《厶+「Если же pt^Pi + i, но〃>% + а то переставим сообщения 4 и 4+1 и соответствующие им кодовые слова. Повторяя эту процедуру нужное число раз, мы и получим требуемую нумерацию.
Из неравенств (1) следует, что сообщение AN кодируется словом aN наибольшей длины lN.
В оптимальном двоичном коде всегда найдется, по крайней мере, два слова наибольшей длины, равной /^, и таких, что они отличаются друг ст друга лишь в последнем символе. 1
Действительно, если бы это было не так, то можно было бы просто откинуть последний символ кодового слова aNt не нарушая свойства префиксности кода. При этом мы, очевидно. уменьшили бы среднюю длину кодового слова.
Пусть слово а, имеет ту же длину, что н а^ и отличается от него лишь в последнем знаке. Согласно свойствам 1 и 2 можно считать, что /尸厶千尸…二/河.Если 俣N—1, то можно поменять ролями кодовые обозначения at и Qn-i, не нарушая при этом неравенств (1).
Итак, всегда существует такой оптимальный код, в котором кодовые обозначения двух (наименее вероятных)
33332 М. Н. Аг;а»иов, Л. Е. Садовский
33
33
сообщений 力№—1 н ^n отличаются лишь в последнем символе.
Отмеченное обстоятельство позволяет для решения задачи рассматривать только такие двоичные коды, у которых кодовые обозначения aN^t и aN для двух наименее вероятных сообщений Л^_х и An имеют наибольшую длину, отличаясь лишь в последнем символе. Это 型-7 у значит, что концевые вершины aN^i и aN кодо- \ / вого дерева искомого кода должны быть соеди- 弘 йены с одной и той же вершиной а предыдущего / «этажа» (см. рис. 12).
Рассмотрим новое множество сообщений Рис. 12.4⑴н{4, А^ ... , An^s, Л} с вероятностями
Pi, р餡…,/?^^2, P=PN^i+pN- Оно получается из множества {Л^,力豆,, /м—》,4м—з <n} объединением двух наименее вероятных сообщений 4^-力 Л^г в одно сообщение Л. Будем говорить, что {口)получается сжатием из {/4j, Л2, ... , 一2, АNn}・
Пусть для 4") построена некоторая система кодовых обозначений Ка)={а% @2, ... , &川_5, а}, иными словами, указано некоторое кодовое дерево с концевыми вершинами 〃i, 〃е, ••,,«^_2^ 〃• Этой системе можно сопоставить код К={а», ав, ••,。№_扇 а»_з ^n } для исходного множества сообщений, в котором слова aN^i и ^ получаются из слова а добавлением соответственно 0 и 1. Процедуру %т 爲 перехода от К"' к К назовем расщеплением. V Справедливо следующее утверждение, открывающее путь для построения оптимального кода:
/Если код К(1> для множества сообщений ЛП)
Ряс. 13. является оптимальным, то оптимален также 廿 код К 0力兄 исходного множестеа сообщений.
Для доказательства установим связь между средними длинами / и Г слов кодов К и К⑴.Она, очевидно, такова: 1=V + р.(2)
Предположим, что код К не является оптимальным, т, е. существует код ^1 со средней длиной %<7. Как отмечалось, можно считать, что концевые вершины 仪及—i и aN его кодового дерева {см. рис. 13) соответствуют кодовым обозначениям для наименее вероятных сообщений AN^^AN. Тогда эти обозначения отличаются лишь в последнем символе. Рассмотрим код К「={аз ... , а»『5, £}, в котором слово Z получается из а^л и “^ отбрасыванием последнего сим34
вола. Средние длины /^ и 2; связаны соотношением, аналогичным (2):
71=Z; +卩.
Из неравенства If<Jследует /;V乙 что противоречит оптимальности кода К'”・ Утверждение доказано.
Теперь ясно, что для построения оптимального кода можно использовать последовательные сжатия исходного множества сообщений.
Проиллюстрируем процесс последовательных сжатий и расщеплений на примере множества из пяти сообщена访 с вероятностями pi=0,4; р2=р3=р4=р5=о,15. Процесс этот отражен в следующей таблице:
Таблица 12
Сообщения
Вероятности и кодовые обозначения
Исходиое множество
Сжатые множества
力⑴
总⑺
&
Л3
4
4
0,41
0,15010 .——
0,15011
0(15-j 000
0,15」001
0,4!
>0,300
0,15- 0101—
0J5-* Oil
0,41 —
0,3— 00
fO,3」F
f0,6 0
0,4 1
Каждое из множеств 4⑴,А^\ 厶⑶ получается сжатием предыдущего множества. Множество 力⑶ состоит из двух сообщений, поэтому оптимальный код К⑶ содержит два кодовых обозначения — 0 и 1. Последовательное расщепление К(з)дает оптимальный код для исходной системы сообщений.
Средняя длина"/ кодовых слов, равная 0,4+4x3x0,15= =2,2, является, как это следует из предыдущего, минимально возможной для данного множества сообщений.
Описанный метод кодирования был предложен в 1952 г. американским математиком Д. А. Хаффменом и называется его именем. Сравним теперь оптимальный код из таблицы 12 с кодом Фано для того же множества сообщений, который строится ниже. -
Таблица 13
Сообщения
Вероятности
Кодовые слова
4
0,4
0
00
0
4
0,15
1
01
4з
0,15
0
10
А
0,15
10
по
4
0,15
1 1
111
Подсчитаем среднюю длину /尸 кодовых слов в этом случае:
7^-2x0,4+2x2x0,15+2x3x0,15=2,3.
Следовательно, метод кодирования Фано не всегда приводит к оптимальному коду.
Как и метод Фано, метод кодирования Хаффмена может быть распространен на случай кодового алфавита, состоящего из произвольного числа символов. Этот вопрос рассмотрен в книге [2].
Задачи и дополнения
Доказать, что всякий оптимальный код является полным.
Закодировать двоичным кодом Хаффмена множество сообщений, имеющих вероятности:
办=0,25; 02=°,2; р3=р4=р5=0,15; Рб=0,1,
Построить соответствующее кодовое дерево.
Основываясь на алгоритме Хаффмена, найти способ непосред* ствешюго построения кодового дерева оптимального кода.
Указание. Построение дерева надо начинать не с корня, а с концевых вершин.
В некоторых случаях результаты двоичного кодирования по методу Фано те же, что и по методу Хаффмена, в том смысле, что длины соответствующих кодовых слов для обоих методов совпадают. Так, например, обстоит дело для множества сообщений с вероятностями: Pi=l/4; Р2=Рз=〃4="5=1/8; Рб=М=р8=р9=1/16.
На самом деле справедливо следующее утверждение: если 卩j=2~" (т. е. если вероятности являются степенями двойки), т。длины соответствующих кодовых слов в кодах Фано и Хаффмена одинаковы и равны 註t*
Не всегда полный код является оптимальным для данного мне* жества сообщений! Можно доказать, однако, что всякий полный код
является оптимальным для некоторого множества сообщений с подходящим образом подобранными вероятностями. Так, если кодовые слова полного кода с основанием d имеют длины nf,及2,• • ♦,孔w, то он оптимален для множества сообщений с вероятностями d~ni, d~厶厶.,,,d "&•
ОБ ИЗБЫТОЧНОСТИ, ШУМАХ
И КРИПТОГРАММЕ, КОТОРУЮ НЕЛЬЗЯ РАСШИФРОВАТЬ
Напомним читателю, что при кодировании сообщений нужно заботиться о том, чтобы их передача была достаточно быстрой, удобной и надежной. До сих пор мы интересовались лишь требованием быстроты. В этой связи были рассмотрены различные эффективные методы кодирования: коды Фано, Шеннона, Хаффмена. Последний, как было выяснено, является даже оптимальным при заданном множестве сообщений с заданными вероятностями. Указанные методы можно рассматривать как своего рода искусственные языки, предназначенные для экономной передачи информации. Оказывается, что привычные нам естественные языки (русский, английский и т. д.) являются в этом плане слишком расточительными и не выдерживают конкуренции с искусственными языками. Подтвердим это следующим мысленным экспериментом. Произвольный русский текст разобьем на куски одинаковой длины п (промежуток между словами можно по желанию либо игнорировать, либо считать отдельным символом). Получающиеся при этом различные буквосочетания из п букв будут встречаться, как это отмечалось прежде, не одинаково часто. Представим себе, что мы располагаем таблицей, в которой указаны всевозможные n-буквенные сочетания и их вероятности в русском тексте. Применяя метод Фано, закодируем их кодовыми словами, также использующими русский алфавит. Возвращаясь к исходному тексту, заменим каждый его кусок длины п соответствующим ему кодовым словом. Расчеты показывают, что действуя таким образом, мы смогли бы при достаточно большом п сократить исходный текст более, чем наполовину, сохранив при этом всю содержащуюся в нем информацию. '
Было бы однако неосторожным на основе сказанного обвинить русский язык или другие естественные языки в несовершенстве. В теории информации имеется понятие, именуемое избыточностью языка или текста. Избыточность^ точного определения которой мы не приводим, можно представлять себе как долю тех символов текста, которые
могут быть искажены или стерты без ущерба для его понимания, или иначе, как степень возможного «сжатия» текста в случае применения к нему методов оптимального кодирования. Мы вправе сказать поэтому, что естественные языки обладают высокой избыточностью (более 50%), Напротив, оптимально закодированные тексты имеют избыточность, близкую к нулю. Но именно высокая избыточность естественных языков позволяет с легкостью пользоваться ими в письменной и устной речи, например, свободно вни・ кать в смысл написанного, несмотря на содержащиеся в тексте сокращения или опечатки, без особого труда понимать человека, говорящего с акцентом или на каком-нибудь диалекте и т. д. Герои известного романа Жюля Верна «Дети капитана Гранта» счастливой развязкой своих приключе* ний также во многом обязаны избыточности языка.
Одним словом, избыточность позволяет языку противостоять влиянию всякого рода мешающих воздействий, в то время как оптимально закодированные тексты, оказывается, перед ними совершенно беззащитны. Подтвердим это приведенным в таблице 13 примером текста, закодированного двоичным кодом Фано.
Возьмем последовательность сообщений А2А3А5А6А1Л4 и отвечающий ей кодовый текст 011011111100110. Пусть произошло искажение одного только первого символа. Получившаяся тогда кодовая последовательность 111011111100110 после расшифровки будет воспринята как последовательность сообщений Л5Л2^5Л4Л2Ла.
Произошла непоправимая путаница, и ее виновником был всего лишь один неверно принятый кодовый символ. Аналогично обстоит дело с любым оптимальным кодовым текстом: сшибки (одна или несколько) переводят его в другой также вполне осмысленный кодовый текст, но смысл получившегося текста может быть совершенно отличен от первоначального. Такова расплата за оптимальность кода.
В то же время в реальных каналах связи, по которым происходит передача информации, ошибки неизбежны. Они являются следствием помех или, как иначе говорят, шумов, которые могут иметь самую различную физическую природу. Действие этих шумов на передаваемый текст можно ослабить, но устранить его полностью нельзя. Отсюда вывод: оптимальные коды в чистом виде непригодны для передачи сообщений по каналам связи с шумами, так как передача в этом случае становится ненадежной. С другой стороны, ясно, что надежность можно обеспечить только за счет некоторой избыточности кодового текста. В дал^-
нейшем речь пойдет как раз о таких системах кодирования, которые предусматривают введение избыточности для борьбы с теми или иными видами ошибок. При построении подобных кодов всегда приходится идти на компромисс: с одной стороны, избыточность (т. е. количество дополнительных, «лишних», символов) не должна быть слишком велика, чтобы не растягивать время передачи; с другой стороны, помехоустойчивость (т. е. способность кода корректировать ошибки) должна быть достаточной, чтобы обеспечить надежность передачи.
Прежде чем переходить к рассмотрению помехоустойчивых кодов, позволим себе еще одно небольшое отступление в криптографию. К этому нас побуждает понятие избыточности, которое, оказывается, имеет прямое отношение к степени секретности криптограммы. Подстановочные криптограммы, например, потому-то и столь легки в расшифровке, что они, по существу, сохраняют избыточность первоначального текста.
Другие методы шифрования уменьшают эту избыточность, но все же не полностью ее устраняют, к тому же появляется избыточность, связанная со специфическими особенностями применяемого ключа. Совершенно секретная, т. е. недоступная для расшифровки, криптограмма должна быть освобождена как от избыточности исходного текста, так и от избыточности ключа. Способ составления такой криптограммы был предложен, как об этом уже упоминалось, К. Шенноном, и состоит он в следующем. Сначала устраняем избыточность текста, применяя к нему какой-нибудь из методов эффективного кодирования. Вслед за этим к получившемуся безызбыточному тексту применяем шифр со случайным ключом. Он похож на шифр Тритемиуса, для которого (применительно к русскому алфавиту)
li^tnt+kt (mod 31).
В этом равенстве т; и /; по-прежнему являются номерами t-ой буквы шифруемого текста и криптограммы соответственно, а каждое А выбирается случайным образом среди чисел О, 1, 2, .... 30 ——так что выбор любого из этих чисел в качестве ^ одинаково возможен.
Недостатком такой совершенно секретной системы является то, что вместе с шифрованным сообщением требуется посылать такое же по объему сообщение, содержащее информацию о случайном ключе, поскольку он заранее неизвестен адресату. Поэтому практически эта система малоприемлема.
Существуют, однако, системы шифрования, не исполь-^ зующие случайного ключа, и в то же время близкие к совершенно секретным. Необходимая система, например, может быть получена усовершенствованием шифра бегущего ключа (см. дополнение 4 к § 2). Она состоит в том; что на предварительно сжатый передаваемый текст накладывается другой текст, также предварительно сжатый.
Наконец, и от хлопотливой процедуры предварительного сжатия также можно отказаться, если в качестве ключа для шифровки использовать не один, а несколько (три или больше) условленных заранее текстов, прибавляя все их к передаваемому сообщению.
КОДЫ 一 АНТИПОДЫ
Мн выяснили, что при построении помехоустойчивых кодов не обойтись без дополнительных символов. которые должны быть присоединены к кодовым словам безызбыточного кода. Эти символы уже не несут информации о передаваемых сообщениях, но могут дать информацию о происшедших при передаче ошибках. Иными словами, их назначение — контролировать правильность передачи кодового слова. Вводимые дополнительные символы так и называют контрольными (или проверочными}.
Самый незатейливый способ, позволяющий исправлять ошибки, состоит в том, что каждый информационный символ повторяется несколько раз, скажем, символ 0 заменяется блоком из п нулей, а символ 1 —— блоком из п единиц. При декодировании «-буквенного блока, содержащего, быть может, ошибочные символы, решение принимается «большинством голосов». Если в принятом блоке нулей больше, чем единиц, то он декодируется как 00...О (т. е. считается; что был послан нулевой символ), в противном случае —как 11...1. Такое правило декодирования позволяет верно восстановить посланные символы, если помехи в канале искажают менее половины символов в каждом передаваемом блоке. Если длину блока п выбрать достаточно большой, то мы практически обезопасим себя от возможных ошибок, однако передача сообщений будет идти черепашьими темпами. По этой причине указанный код (его называют кодом с повторением) не имеет большого практического значения, однако правило его декодирования («голосование») содержит в себе весьма полезную идею, которая с успехом применяется в других, практически более интересных помехоустойчивых кодах. Об этом речь пойдет дальше (см「
§§ 17, 18), а сейчас постараемся выяснить, на что мы можем рассчитывать при минимальной избыточности, когда к каждому кодовому слову добавляется всего лишь один проверочный символ. Пусть «!«2- * *«п —— двоичное кодовое слово. Выберем проверочный символ ап+1 с таким расчетом, чтобы на его значение одинаково влиял каждый из символов данного слова. Это естественное требование будет выполнено, если, например, положить an+i~a1+a2+. , .+ап (mod 2). Тогда проверочный символ an+i будет равен нулю, если в кодовом слове %仪2・.。冷 содержится четное число единиц, и единице — в противном случае. Например, присоединяя таким образом проверочный символ к слову 1010, получаем слово 10100, а из слова 1110 получи?^ слово 11101.
Нетрудно видеть, что все удлиненные кодовые слова 网网一 а曲п + 1 содержат четное число единиц, т. е. .
电 + % + * …十乙十СС"+j = 0 (mod 2). (1)
Допустим, что в процессе передачи в удлиненное кодовое слово «1(X2. . .anctn+1 вкралась одна ошибка (или даже любое нечетное число ошибок). Тогда в искаженном слове а;*. . .а&+1 число единиц станет нечетным. Это и служит указанием на искажение в передаче слова. В конечном итоге все сводится к проверке соотношения (1) для символов принятого слова, что легко сделает простейшее вычислительное устройство ——сумматор по модулю 2. Итак, правило приема следующее: если равенство (i) выполняется, считаем, что сообщение передано правильно, в противном случае отмечаем, что произошла ошибка и, когда это возможно, требуем повторить передачу кодового слова. Понятно, что иначе ошибки не исправить. Например, если принято «неправильное слово» 11100, то одинаково возможно, что было послано любое из кодовых слов:
01100, 10100, 11000, 11110, 11101.
Каждый из перечисленных случаев соответствует одной ошибке, а ведь ошибки могли произойти даже в трех, а то и в пяти символах.
Еще большая неприятность подстерегает нас в случае двойной ошибки или вообще четного числа ошибок. Ведь тогда соотношение (1) не нарушится, и мы воспримем искаженное слово как верное.
Описанный код, который называют кодом с общей проверкой на четность, позволяет, следовательно, обнаружить
любое нечетное число ошибок, но «пропускает» искажения, если число ошибок четно.
Код с повторением и код с общей проверкой на четность ——до некоторой степени антиподы. Возможности первого исправлять ошибки теоретически безграничны, но он крайне «медлителен». Второй очень быстр (всего один дополнительный символ), но зачастую «легкомыслен». В реальных каналах связи, как правило, приходится считаться с возможностью ошибок более чем в одном символе, поэтому в чистом виде код с общей проверкой на четность применяется крайне редко. Гораздо чаще применяют коды с несколькими проверочными символами (и, соответственно, с несколькими проверками на четность). Они позволяют не только обнаруживать, но и исправлять ошибки, и не только одиночные, но и кратные, и притом делать это гораздо эффективнее, чем упоминавшийся нами код с повторением. Это можно проиллюстрировать на одном красноречивом и в то же время простом примере.
Рассмотрим множество всех двоичных слов длины 9 (с их помощью можно закодировать 29=512 сообщений). Расположим символы каждого слова a^g. . .а9 в квадратной таблице следующим образом:
К каждой строке и к каждому столбцу этой таблицы добавим еще по одному (проверочному) символу с таким расчетом, чтобы в строках и столбцах получившейся таблицы (таблица 15) было четное число единиц.
При этом, например, для первой строки и первого столбца будут выполняться проверочные соотношения: 伝=%+0^+a3 (mod 2), ₽4=ai+a4+a, (mod 2)
и аналогично для остальных строк и столбцов. Заметим, что 心+心+国=仇+%+3 (mod 2).
Обе эти суммы равны 0, если в слове ocg.. ,а9 четное число единиц, в противном случае обе они равны 1. Это дает воз”
Таблица 15
СС2
«8
Pi
«4
%
%
也
a8
a9
₽3
₽5
Ре
07
можность поместить в таблице 15 еще один проверочный символ ₽7, равный
₽7=Р1+₽2+Рз==₽4+₽5+?6 (mod 2).
Например, слову 011010001 отвечает следующая таблица:
Зтн «маленькие хитрости» позволяют, оказывается, исправить любую одиночную ошибку, возникшую в процессе передачи, а сверх того и обнаружить любую двойную ошибку, В самом деле, если произошла одна ошибка, то нарушаются проверочные соотношения ровно для одной строки и ровно для одного столбца, как раз той строки и того столбца, на пересечении которых стоит ошибочный символ. Если же произошла двойная ошибка, то это приводит к нарушению проверок на четность либо в двух строках, либо в двух столбцах, либо сразу в двух строках и двух столбцах. По этим признакам мы и обнаруживаем двойную ошибку. (Однако исправить ее мы не можем — почему?)
Добавим к сказанному, что данный код позволяет обнаруживать многие, хотя и не все, ошибки более высокой 43
кратности (в трех, четырех и т. д. символах). Например* обнаруживаются тройные ошибки в символах «力 а2, а3 или в символах а、а2, а6. А вот тройная ошибка в символах &1, а* а5 не может быть обнаружена, она будет воспринята как одиночная.
Продемонстрированное в этом примере сочетание проверок на четность по строкам и столбцам допускает широкие обобщения. О простейшем из них говорится в дополнении 3,
Задачи и дополнения
Для разобранного в данном параграфе примера найти число необнаруживгемых тройных ошибок. Какую часть они составляют от общего числа тройных ошибок?
Кодовые слова в примере на стр. 42 содержат 9 информационных символов и 7 проверочных^ так что общая длина кодового слова равна 16. Такого числа символов достаточно, чтобы исправлять любые одиночные и обнаруживать любые двойные ошибки. Чтобы достичь того же эффекта для кода с повторением, нужно каждый информационный символ повторить 4 раза, так что общая длина кодового слова будет равна 36. Сравнение явно не в пользу кода с повторением. Справедли' вости ради надо все же отметить, что код с повторением обладает по сравнению с использованным в примере кодом некоторыми преимуществами в смысле обнаружения ошибок более высокой кратности. Предлагаем читателю найти, например, долю необнаруживаемых тройных ошибок для указанного кода с повторением и сравнить ответ с результатом задачи 1. Интересно найти также долю исправимых (!) тройных ошибок для этого кода.
Пример из данного параграфа обобщается следующим образом (смотри также дополнение 12 к § И). Пусть каждое сообщение кодируется двоичным словом длины тп. Расположим все символы в прямоугольную таблицу (матрицу) с т строками и п столбцами:
Таблица 17
осн
«12
а仇
气n+i
两
а22
»2n
а2, n+i
%
ат, n + i
&m + i, 2
Ka耳 и прежде, добавим к каждой строке и к каждому столбцу qo одному прррерочному символу, так чтобы во всех строках и столбцах получились четные суммы. Аналогично прежнему выбираем си^еол a^ + j,弘+i Полученное множество слов образует код, исправляющий любые одиночные и обнаруживающий любые двойные ошибки.
КОД ХЕММИНГА
Пусть количество сообщений, которые требуется передавать абоненту, равно 16. Для их без&збытбч- ного кодирования можно использовать дзоичнке слбёа Длины 4, но тогда код не будет корректировать ошибки. При использовании слов длины 5, как мы уже знаем, можно обнаружить, но не исправить любую одиночную ошибку. Впрочем, из дополнения 3 предыдущего параграфа вытекает, что если добавить 5 проверочных символов, то код сможет не только исправлять одиночные, но и обнаруживать двойные ошибки. Возникает вопрос: нельзя ли для этой цели обойтись меньшим количеством проверочных символов? Вычислим сначала, каково минимальное число проверочных символов, необходимое для исправления любых одиночных ошибок. Нетрудно убедиться, что двух добавочных символов для этого недостаточно (предлагаем читателю проверить это самостоятельно).
Попробуем обойтись тремя проверочными символами, т, е. будем использовать для кодирования сообщений двоичные слова 仪1仪2&3“4a5^6% длины 7. Наша задача — определить, произошла ли ошибка, и если произошла, то в каком месте. Но это то же самое, что указать одно из восьми чисел от 0 до 7 (0 соответствует отсутствию ошибки).
Пусть требуется передать сообщение, кодируемое словом «似2仪3网.Добавим к этому слову три символа сс5> а6, а7, определяемые равенствами (здесь и до конца параграфа все равенства берутся по модулю 2):
аБ^а2+сХз+а4?
afl=ax+a3-hz4,(1)
а7~а1+а2+а4.
Если теперь нужно выяснить, допущена ли при передаче слова 06^2^3«4^5^6«- одиночная ошибка в одном из симво^ лоб а4,。5, &£,оц, то для этого достаточно вычислить сумму;
s1=a4+a5+a6+a7.(2)
Ее значение, равное J, соответствует ответу «да»? значение О — ответу «нет» (почему?).「
В случае «да» проверим, нет ли ошибки в символах ав, а?, в случае «нет» — не содержится ли ошибка в символах д, а* В каждом из этих случаев ответ дает значение суммы:
s2=ai+a3+a6+a^ (3)
Если, например, значения обеих сумм (2) и (3) равны 1, то ошибка содержится либо в аб, либо в а7. Всего имеется четыре комбинации значений сумм *, s2; они приведены в следующей таблице:
Таблица 18
«I
s8
Место ошибки
1
1
ав или а7
1
0
а4 или а5
0
1
а2 или а3
0
0
нет ошибки или 岗
Наконец в каждом из четырех случаев нужно выбрать одну из двух возможностей. Это позволит сделать значение суммы
Ss^ai+aa+as+a,.(4)
Итак, мы имеем три проверочных соотношения:
*=%+a8+&+%=0, S2=叫+(%3+%+04=0,(5)
53 = 04+a3+%+a7=0,
которые позволяют либо установить, что ошибки нет, либо однозначно указать ее место.
Отметим особо, что если произошла одиночная ошибка, то ее положение указывается числом с двоичной записью SiSaSg. Пусть, например» Si~l, s2=0, sa = l. Согласно таблице 18 ошибка допущена в четвертом или пятом разрядах; поскольку s3 = l, она — в пятом разряде, но s【s2sз=!01 как раз и есть двоичная запись числа 5.
Изученный здесь код ——это код Хемминга длины 7 с четырьмя информационными символами.
В общем случае кодовые слова двоичного кода Хеммин- га, позволяющего исправить одиночную ошибку, имеют длину 2切——1 (m — натуральное). Для определения положения ошибки тогда уже нужно m проверок, т. е* /п прове-
рочных символов. Оставшиеся 2加——1——加 символов являются информационными. Проверки строятся по аналогии с рассмотренным случаем. Значения m проверок, как н выше, образуют номер положения ошибки.
Вернемся, однако, к вопросу, поставленному в начале этого параграфа. Добавим к кодовым словам кода Хеммнн- га длины 7 еще один проверочный символ а。, а к проверочным соотношениям (5) еще одно (общую проверку на четность):
So=ao+ai+a24-a3+a4+a6+a8+a7=O.(6)
Новый код по-прежнему будет содержать 16 кодовых слеп, потому что, как и раньше, символы ai} а2, а3, а《могут быть взяты какими угодно; по ним из соотношений (1) определяются символы а5, а6, а7, а из равенства (6) и символ ссу. В случае одиночной ошибки добавленное соотношение (6) нарушается, а значения Si, S2, s3 образуют номер положения ошибки. Если же произошла двойная ошибка, то соотношение (6) будет выполнено., а хотя бы одно из равенств (5) нарушится (почему?). Это и позволяет обнаружить любую двойную ошибку. Итак, для исправления одиночных и обнаружения двойных ошибок к четырем информационным символам достаточно добавить четыре проверочных символа. Можно показать, что обойтись меньшим числом проверочных символов невозможно.
Построенное множество кодовых слов аоО^с^аза4a5%%, удовлетворяющих соотношениям (5) и (6),— пример расширенного кода Хемминга (длины 8 с четырьмя информационными символами).
Задачи и дополнения
Определить положение одиночной ошибки е искаженном слове 1100011 кода Хемминга длины 7.
Пусть 11010011 и 11001111—искаженные слова расширенного кода Хемминга длины 8. Какое из этих слов содержит одиночную, а какое ——двойную ошибку? В случае одиночной ошибки определить ее положение.
К проверкам кода Хемминга длины 7 добавим (не меняя длины кода) общую проверку на четность:
出十a2+&十%十仪5+a6+仪7=0♦⑺
Сколько слов удовлетворяет соотношениям (5) и (7)?
Доказать, что код из задачи 3 исправляет одиночные и обнаруживает двойные ошибки.
Построить систему проверок для кода Хемминга длины 15. Сколько кодовых слов содержит этот код? Сколько информационных и сколько проверочных символов имеется в кодовом слове? '
Если задан код Хемминга длины м=2拓一1,то существуют два простых способа получить из него коды с исправлением одиночных и обнаружением двойных ошибок.
Первый из них (он аналогичен способу, разобранному в конце этого параграфа) таков: к кодовым словам добавляем проверочный символ а。,а к проверочным соотношениям кода Хемминга — общую проверку на четность: ^ % =。・
i= О
Во втором способе (см, задачу 3) длина кодовых слов не меняется?
но добавляется общая проверка на четность: g аг- = О,
i = 1
Сколько информационных и проверочных символов содержится в каждом из описанных здесь кодов?
НЕОБЫЧНОЕ ОБЫЧНОЕ РАССТОЯНИЕ
Известно, что расстояние между точками в пространстве определяется как длина отрезка прямой, соединяющей эти точки. Оно служит мерой близости точек —чем меньше расстояние, тем ближе друг к другу расположены точки. Если обозначать расстояние между точками а и & через р (а,力),то для любых точек а, 6 и с имеем:
р(а,6)》0;
р®力)=0 означает, что о=Ь;
р(а,Ь)=р (仇 о
^(a}b)+^(b}c)^(afc).
(Последнее условие, называемое неравенством треугольника, означает, что длина любой стороны треугольника не превосходит суммы длин двух других сторон.)
Иногда удобно бывает определить меру близости или расстояние для элементов того или иного множества, даже если эти элементы и не являются точками в обычном смысле. При этом считается, что расстойние между элементами множества определено, если любым двум элементам а и 6 сопоставлено действительное число р (а, Ь) и для любых элементов а, b и с данного множества выполняются условия 1) — 4).
Вернемся теперь к нашей основной теме. Мы уже знаем, что код тем лучше приспособлен к исправлению ошибок, чем больше отличаются друг от друга кодовые слова. Эту мысль можно будет выразить точно, если ввести расстояние на множестве n-буквенных слов.
Расстоянием р (尤,у) между двумя словами хну назовем число несовпадающих позиций этих слов. Например, рао стояние между словами х=^01101 и ^=00111 равно 2.
Определенное так расстояние называют расстоянием Хемминга. Не составляет большого труда проверить, что все свойства 1) — 4) расстояния в данном случае выполнены. Вопрос лишь б том, в какой мере это понятие поможет оценить способности кода исправлять и обнаруживать ошибки. Чтобы ответить на этот вопрос, введем для произвольного кода понятие кодового расстояния.
Кодовое расстояние d(V) определим как минимальное расстояние между различными кодовыми словами из V:
d(y)= min р (х, у).
х Фу
Введенная только что величина является основным показателем корректирующих возможностей кода, поскольку верно следующее утверждение:
ДЪ0 способен исправлять любые комбинации из t (и меньшего числа) ошибок тогда и только тогда, когда его кодовое расстояние больше 2t.
В самом деле, если d (У)>2/, то для любых кодовых слов %, у имеем р(х, у)>2/+1. Пусть при передаче некоторого слова % произошло 尸《£ ошибок, и в результате было принято слово z. Тогда р (居 z)=r《£, и в то же время расстояние р (z, у) до любого другого кодового слова у больше /. Последнее вытекает из неравенства треугольника:
р(х, z)+p(2, у)^р(х, yy^2t+\.
Значит, для восстановления посланного слова (декодирования) необходимо найти кодовое слово 尤,«ближайшее» к принятому слову 2 в смысле расстояния Хемминга. Подчеркнем, что это правило декодирования приводит к правильному результату, если число ошибок в передаваемом слове действительно не превосходило t.
Если же условие d(V)>2t нарушается, то найдутся такие кодовые слова хну, расстояние между которыми Р (尤,")《2厶 Тогда может найтись такая комбинация из 力 ошибок в одном из слов х, что принятое слово z будет находиться от другого слова у не дальше, чем от х. Поэтому нельзя будет определить, какое из слов ——к или у — было на самом деле передано
Задачи и дополнения
Имеется 8 двоичных слов длины 3. Их можно изобразить в пространственной системе координат как вершины куба со стороной 1. Каков в этом случае «геометрический смысла расстояния Хемминга между словами”
Доказать, что для обнаружения s (или меньшего числа) ошибок необходимо и достаточно, чтобы кодовое расстояние удовлетворяло неравенству d(y)》s~|-L
Доказать, что для исправления f (и меньшего числа) ошибок и вместе с этим обнаружения s (и меньшего числа) ошибок 6» необходимо и достаточно, чтобы кодовое расстояние удовлетворяло неравенству d (V)^/+s+l.
Показать, что кодовое расстояние для кода с общей проверкой на четность равно двум, а для кода Хемминга ——трем. Чему оно равно для кода с повторением, чему — для расширенного кода Хемминга?
ЛИНЕЙНЫЕ ИЛИ ГРУППОВЫЕ КОДЫ
Большинство рассмотренных выше кодов обладало следующим свойством: сумма (и разность) двух кодовых слов также являлась кодовым словом. Для кода с повторением это свойство очевидно. Ясно оно и для кода с общей проверкой на четность, потому что сумма двух слов с четным числом единиц есть также слово с четным числом единиц.
В § 9 был рассмотрен код Хемминга с системой проверочных соотношений (5). Обобщим теперь этот пример, выбрав в качестве кодового алфавита некоторое конечное поле F. Каждое слово 修公.•.尤九 этого алфажта будем отождествлять с вектором (尤1,尤2, ■•■ , хп)孔-мерного пространства Ln (в котором координаты векторов являются элементами F). Вектор, соответствующий кодовому слову, будем называть кодовым. Систему проверочных соотношений запишем в виде системы уравнений:
BjlXi十仇2尤2+….+ 6171x7; = 0,
力7nl尤1 +分m2%2十.…+》呐x几=。
с коэффициентами 沙订 из F. Код, состоящий из всех слов XiX2. . .хп, для которых справедливы соотношения (1), называют кодом с проверками на четность.
Для такого кода выполняется следующее свойство: если векторы (以工,g2, , а" и (九,Ь2, ... , Ьп) являются кодовыми, а значит, решениями системы (1), то и их сумма (а^Т- +匕i, a2+b2, . . . , an+bn) также является решением этой системы и потому кодовым вектором. Справедливо и другое свойство решений системы (1): если а ——элемент поля F и (必,&, ... , Q“) 一 решение системы (1), то и вектор (口生, 。仪2, . . . , а〃п) также является решением системы (1).
Оба отмеченных свойства проверяются непосредственной подстановкой в систему (1) векторов
(Qi+b, &+匕2, • • • , «n+М и (ась а%, • • . , aoQ.
Вместе эти свойства означают, что код с проверками на четность образует линейное п одп р остр а н ство в пространстве 厶冗 всех n-буквенных слов. По этой причине коды с проверками на четность называют линейными кодами (двоичные линейные коды называют также групповыми). Если кодовое подпространство в пространстве Ln имеет размерность 瓦 то употребляют для большей определенности термин линейный (几,^)-код.
Имеется очень много причин, по которым линейные коды являются важнейшими в теории кодирования. Одна из них связана с удобствами в обнаружении и исправлении ошибок, как это видно из примера, рассмотренного в§9. Другая причина — это возможность компактного задания кода. Действительно, в случае линейного кода нет необходимости указывать полный список кодовых слов, ведь код вполне определен системой линейных уравнений (1) или матрицей этой системы (проверочной матрицей):
В дальнейшем мы будем предполагать, что строки этой матрицы линейно независимы.
К числу других достоинств линейных кодов, которые связаны с предыдущими, относятся простые алгоритмы кодирования и декодирования, легко реализуемые электронными переключательными схемами. Вообще, можно сказать, что бурное развитие теории кодирования, которое происходило в последние десятилетия, объясняется главным образом тем, что к линейным кодам приложим хорошо развитый аппарат линейной алгебры и теории конечных полей.
Возвращаясь к рассмотренным ранее кодам, легко найдем их проверочные матрицы. Так, для кода с общей проверкой на четность имеем одно проверочное соотношение Xi+x2+. . .+хп—0; соответственно этому проверочная матрица состоит из одной строки и имеет вид
/7-(111. . .1).
Из проверочных соотношений для кода с повторением
.Xi-无3=0,
л^1~-xn—О
,получаем следующую,получаем следующуюпроверочную матрицу:проверочную матрицу:
,получаем следующую
,получаем следующую
проверочную матрицу:
проверочную матрицу:
Наконец, проверочная матрица двоичного кода Хем- минга длины 7, как это следует из соотношений (5) § 9)выглядит так:
/О о о 1 1 1 1\
о 110 0 11.(2)
\1 о 1 о 1 о 1/
Имеется и другой способ матричного задания линейного кода. Он основан на том, что во всяком подпространстве линейного пространства можно выбрать базис, т. е. такую линейно независимую систему векторов, через которые линейно выражаются все вообще векторы подпространства. Пусть
a1 = (q11,012, • • • f Gin),
仇=3复,〃22, • • • j "2八),(3)
0注一(a注1,ak出,。"* , ^kn)
—базисные векторы линейного кода. Тогда всевозможные кодовые векторы исчерпываются линейными комбинациями aiai+ct2a24-. .,+akahi(4)
где коэффициенты а?——любые элементы исходного поля.
Таким образом, система базисных векторов (3) полностью определяет линейный (门,й)-код. Матрица С, составленная из них,
/肉工 °12• - • ©i母 \
,叫? y(5)
называется порождающей матрицей кода.
52
Заметим, что базис можно выбрать не единственным образом, поэтому порождающая матрица G определена неоднозначно. Последнее, впрочем, верно и в отношении проверочной матрицы
Легко указать порождающую матрицу кода с повторением; она имеет вид:
G=(l 1 1. . .1).
В качестве базисных векторов двоичного кода с общей проверкой на четность могут быть взяты, например, следующие 孔一1 векторов:
о】=(1 1 0 0 ... 0),
湿=(1 0 1 0 «.. 0),
tig = ( 1 0 0 10),
— (1 0 0 0 ... 1).
Поэтому матрица
/110 0 ... 0'
/ 1 о 1 о ... о
G= 1 о о 1 ... о
1 о о о 1
является порождающей матрицей этого кода.
При использовании линейного кода для передачи сообщений полезно знать и порождающую, и проверочную матрицу. С помощью порождающей матрицы удобно кодировать сообщения. Поскольку линейный (п, й)-код с порождающей матрицей (5) имеет qk кодовых слов (любой из 尼 коэффициентов в (4) можно выбрать q способами), он позволяет закодировать все сообщения длины й в алфавите из q символов. Если 4=%窓.・.&& ——такое сообщение (af —— информационные символы), то самое удобное — сопоставить ему кодовый вектор о, совпадающий с линейной комбинацией (4) строк порождающей матрицы. Вектор а нетрудно записать в матричном виде, используя правило умножения матриц:
/ед ац ain\
0"G=(a& …(6)
\afei aki akn/
Пример. Пусть дана порождающая матрица двоичного линейного кода:
/1 1 1 0 0 0 0\/1001100](о 1 о 1 о 1 о /\1 I О 1 0 0 1/
Этот код содержит 2』16 кодовых слов, которыми можно закодировать все двоичные сообщения длины 4. Если, например, Л = (0101), то для соответствующего кодового вектора имеем:
"(0 1 0 1)(;"(0 1 0 1)(;1 1 о о I о 1 о1 1 о о I о 1 оо о о 0\
"(0 1 0 1)(;
"(0 1 0 1)(;
1 1 о о I о 1 о
1 1 о о I о 1 о
;;;М = (0 100 10 1).
10 0 1/
О роли проверочной матрицы мы скажем в дальнейшем — она используется в основном при декодировании полученных сообщений и для исправления ошибок.
Выясним, как связаны порождающая и проверочная матрицы, и как по одной из них найти другую. Обратимся к соотношениям (1). Всякая строка порождающей матрицы, являясь кодовым вектором, удовлетворяет каждому из соотношений (1), т, е, для любых i и /
加心咒+九胆我+一.+九/加=0.(7)
Другими словами, любая строка порождающей и любая строка проверочной матриц ортогональны друг другу. Матричная запись равенств (7) выглядит так:
G/T=0
(0 означает здесь нулевую матрицу).
Заметим также, что из соотношений (1) вытекает равенство
zH』0,
справедливое для каждого кодового вектора е,
Для отыскания порождающей матрицы нужно фактически найти k=n——m линейно независимых решений системы (1). Эти решения как раз и будут строками порождающей матрицы.
Пример. Найдем порождающую матрицу кода Хем- минга длины 7 с проверочной матрицей (2). В данном случае требуется найти 4 независимых решения следующей
системы:
%4+招+/+/=0,% +猶十 瑞+修=0,%+&+招「+^7 = 0.
Разрешаем систему относительно неизвестных 尤力 %* %&:
石=也+%b+%7,
%2 = %з+%б+%7,(8)
芻= %5+%(j+%7・
Неизвестным %з, %力 х8, %? можно придавать любые значения; тогда из равенств (8) могут быть определены оставшиеся неизвестные %i, %?, Х4. Придавая поочередно одному из неизвестных %з,尤5, лб, л:? значение 1, а остальным — 0, получим 4 решения:
^=(1110000), «2=(1001100), а3-(0101010),а4-(1101001),
которые, как читатель может убедиться, линейно независимы. Составленная из этих решений матрица
/1 1 1 0 0 0 0\厂 / 1 0 0 1 1 о о \G=\0101010/\1 10 10 0 1/
и* является искомой порождающей матрицей.
По поводу сказанного в этом параграфе возникает множество вопросов. Например, как, зная порождающую и проверочную матрицы, выяснить корректирующие способности данного кода; как реализовать эти способности (т. е. каким должен быть алгоритм декодирования, исправляющий или обнаруживающий ошибки); как, наконец, после исправления ошибок выделить информационные символы?
Остановимся вначале на последнем вопросе. Пусть, исправив ошибки, мы получили некоторый кодовый вектор а=(а「«2, . . . , Оп)・ Тогда соответствующие ему информационные символы а- а^ , . , , а^ определяются из равенства (6). Иными словами, вектор ‘仪储 仪応...,а&) есть решение (как можно показать,— единственное) системы линейных уравнений:
期1网+@21a2十…・十耿10^=@,^12^14~(^ 22OC2 • •.+aa5a丸=02,
ae曲+ a2孔a2+...+4/1?卩к=恥,
@ 2=@ 2=(出%…%)(出%…%)=(%0&2 ,=(%0&2 ,.%0也 +j.…%)..%0也 +j.…%).
@ 2=
@ 2=
(出%…%)
(出%…%)
=(%0&2 ,
=(%0&2 ,
.%0也 +j.…%).
.%0也 +j.…%).
Хотя задача отыскания этого решения и не содержит принципиальных трудностей, она может потребовать громоздких вычислений. Однако выделение информационных символов предельно упрощается, если использовать для кодирования так называемые систематические линейные коды.
Линейный (м, ft)-код называется систематическим, если его порождающая матрица имеет вид
/1 О О рх1 ... р1т \
G = (р2т )(9)
\。0 . .. 1 pki ... pkrn /
или вид
/ри • • Pim 1 ° • • • °\
\pki • • • PktnI/
т. e. если она получается приписыванием к единичной матрице порядка 龙 некоторой матрицы из 归 строк и т~п——右 столбцов (иначе говоря, матрицы порядка kXm),
В случае (9) равенство (6) принимает вид:
1 0 . , , 0 Ри . . » Р^т° 1 . . . 0 pzi . . . p2m
Таким образом, первые 々 символов любого кодового слова как раз и оказываются информационными, а остальные (они являются проверочными) связаны с информационными символами соотношениями:
^l^Pi^l+p 21^2+ . .+Pfei(Xfe,
0片+2 =月12a1 +p22a2+..入2a左,(10)
^-n~ P im^i~^~P2m^2~H • • - H- P km^k'
Равенства (10), очевидно, образуют систему проверочных соотношений систематического линейного кода. Очень важно, что всякий линейный код в некотором смысле эквивалентен систематическому (см. дополнение 9).
Дальнейшее прольет свет и на другие вопросы; поставленные выше.
Задачи и дополнения
Весом вектора а (обозначается ⑦(迎)) называют число его ненулевых координат. Понятно; что расстояние Хемминга между двумя векторами 見^ и 我? равно весу их разности ©(龙i—〃2)・ Это позволяет упростить отыскание кодового расстояния линейного кода. Именно, справедливо следующее утверждение:
Кодовое расстояние линейного кода равно минимальному весу его нену.^евых кетовых слов:
d (V) = min w ®.
& R О
Предоставляем читателю доказать это утверждение.
Пусть двоичный линейный код V содержит хотя бы одно слово нечетного веса. Доказать, что число всех таких слов составляет тогда ровно половину от общего числа кодовых слов.
Указание. Убедиться, что множество всех кодовых слов четного веса есть подпространство и найти смежные классы кода / по этому подпространству.
Рассмотрим матрицу порядка q归X孔,в качестве строк которой взяты Есе кодовые векторы ^-ичного линейного (п, ^)-кода. Будем предполагать, что ни один столбец этой матрицы не является нулевым (иначе, вычеркнув нулевой столбец, мы получили бы код с тем же кодовым рзсстоянием, но меньшей дли?ш), Показать, что в каждом столбце этой матрицы каждый из ^элементов поля встречается ровно g^-i раз. Пользуясь этим, убедиться, что суммарный вес всех кодовых слов равен 汽(q—1)疗
Указание. Проверить, что множество всех кодовых слов, содержащих 0 в некоторой фиксированной позиции, есть подпространство, и найти разложение кода в смежные классы по этому псдпростран- ству.
Предположим, что кодовый вектор 力=(%力 х2, , . ., х„) имеет вес, равный w, и %拓,х^ . . .t xk ——его ненулевые координаты. Из проверочных соотношений (1) получаем тогда:
力1丸/齡+匕1用2/2十•一十%在J在® = a
"幫拓尤物十ь成々收+九龙J々謝=°L
Это означает, что столбцы проверочной матрицы с номерами 厶力 k2,... .,.,左仅 линейно зависимы. Следовательно, каждому кодовому вектору веса w соответствует ш линейно зависимых столбцов проверочной матрицы. Верно и обратное утверждение.
Отсюда вытекает, что кодовое расстояние линейного кода равно d тогда и только тогда, когда в проверочной матрице найдется d линейно зависимых столбцов, а всякая система из меньшего числа столбцов линейно независима.
Доказать, что двоичный линейный код исправляет любые одиночные ошибки тогда и только тогда, когда все столбцы его проверочной матрицы ненулевые и различные. Верно ли это для любого линейного кода? .
Как изменится кодовое расстояние двоичного линейного кода при добавлении ко всем его словам одного проверочного символа, задающего общую проверку на четность?
Двоичный (8,4)-код задан порождающей матрицей
(11)(11)у 1 1 1 0 1 0 0 0\/01011100]I О О 1 1 О 1 О 1 у\1 О О 1 10 10/
(11)
(11)
Найти его проверочную матрицу и кодовое расстояние.
То же задание для троичного (6,3)-кода с порождающей матрицей /О 0 1 1 2 2\
G = ( 1 1 1 2 0 0 卜\1 2 1 1 0 1/
Два кода Vf и V2 называются эквивалентнымиt если кодовые слова одного кода получаются из кодовых слов другого некоторой перестановкой символов (одной и той же для всех кодовых слов). Поскольку при этом веса кодовых слов остаются без изменений, то кодовые расстояния двух эквивалентных кодов совпадают, поэтому одинаковы также их возможности исправлять или обнаруживать ошибки. Ясно, что если порождающие матрицы кодов получаются одна из другой путем перестановки столбцов, то коды эквивалента.
Эквивалентными являются, например, коды 匕 и К2 со следующими порождающими матрицами:
/10 1 10 0\/10 01 1 0\
6=( 0 0 1011}и& = ( 0 1010 1).
\0 1 1 11 0/\0 0 1I 1 1/
Однако связь между матрицами эквивалентных кодов может быть и более сложной. Причина заключается в том, что порождающая матрица данного кода определена неоднозначно.
В предыдущем примере код Vf эквивалентен систематическому коду У2. Это не исключение, а правило, поскольку справедливо следующее утверждение:
Всякий линейный код эквивалентен систематическому коду.
Доказательство, которое рекомендуется продумать читателю, основывается, в сущности, на известном современному школьнику методе Гаусса исключения неизвестных.
Последовательность действий, приводящих произвольный код к систематическому, продемонстрируем на примере матрицы (11) (задача 7).
Вычитая из четвертой строки матрицы (11) первую, получим:
0 0'0 00 1I 0,0 0'0 00 1I 0,/1110100 10 111001101
0 0'
0 0
0 1
I 0,
0 0'
0 0
0 1
I 0,
*011100
далее, вычитая из первой строки вторую, приходим к матрице
/1 0 1 1 0 0 0 0\/0101 1 1 0 0 \
4 0 0 1 10 10 1)
\0 1 1 1 0 0 1 0/
Получающиеся при этих преобразованиях матрицы также порождают
исходный код. Осуществим теперь перестановку столбцов, чтобы слева получить единичную матрицу ——пятый столбец поставим на место второго, восьмой —— на место третьего, седьмой — на место четвертого столбца. В итоге получим порождающую матрицу систематического кода
/1 0 0 0 0 1 1 0\
/01001011]
looiooiiiy-
\о 0 0 1 1 1 1 о/
Показать, используя соотношения (7), что для систематического кода с порождающей матрицей (9) в качестве проверочной можно взять следующую матрицу:
Пусть V — произвольный линейный (п, Л)-код. Рассмотрим множество Vй всех векторов пространства 厶,ортогональных каждому из кодовых векторов 刃 &У・ Нетрудно проверить, что V’ является подпространством в Lrt и, следовательно, может рассматриваться как линейный код. Код Vй называется дуальным к исходному коду V.
Убедиться, что если G и Н — порождающая и проверочная матрицы кода V, то они служат соответственно проверочной и порождающей матрицей дуального кода К'.
Простейший пример кодов, дуальных друг к другу,——это код с повторением и код с общей проверкой на четность.
Одним из способов получения кодов, обладающих большим кодовым расстоянием, а значит, и высокой корректирующей способно- стью^ является комбинирование двух или нескольких кодов. Примером такого комбинирования является рассматриваемая здесь конструкции. Она дает код, который является обобщением матричного кода из § 8 с проверками на четность по строкам и столбцам.
Пусть дано слово, содержащее k~k-Jz^ информационных символов. Разобьем множество этих символов на k2 блоков по kf символов в каждом и запишем результат в виде квадратной матрицы порядка k^Xki-
(12)(12)/^ii &12 * ■ ■竄工々1 \'&i &2 • • • &瓦 j
(12)
(12)
\сс,氧 1 а屈22■' ■afe2fei/
В первой строке этой матрицы выписаны по порядку символы первого блока, во второй ——символы второго и т. д.
Рассмотрим теперь произвольный систематический линейный код Ki длины /г】с Aj информационными символами и с тем же самым кодовым алфавитом. Строки матрицы (12) закодируем указанным кодом —— для этого к каждой строке припишем пг——財 проверочных символов та- кем образом, чтобы выполнялись проверочные соотношения кода Vi,
Далее каждый столбец получившейся матрицы порядка k2Xrii,
закодируем точно таким же способом с помощью линейного 他,甸, кода卜2■〜
В результате получим матрицу порядка 几2乂也1:
a1f固2• • •a1 左 i• • •%n|
a^i网2• •»^afet• • •a2 al
a^j %務• • • c 屉月t • ■ • «R2ml
Выписывая элементы этой матрицы «по строкам», мы и составим кодовое слово, отвечающее исходному слову. Оно, очевидно, однозначно определяется матрицей (12).
Построенный код называется произведением кодов Vf и И2 и обозначается Vi®V2.
Пусть теперь k,右力 狗纟一 числа информационных символов кодов ^1®^2» У【н ^2 a n, nt,〃2—— длины этих кодов. Из построения кода 匕®% сразу же вытекает, что
月=%晶 и 也=力拉2.
Менее очевидно аналогичное соотношение между кодовыми расстояниями d, df, £2 тех же кодов: d=dj *^3. Доказательство этого факта предоставляем читателю.
Предлагаем читателю также выяснить, какова связь между количеством ошибок, исправляемых кодами %, % и ^1®^2.
Проиллюстрируем сказанное примером. Пусть 尼=8,也i=4,论2= 2. В качестве кода Vi возьмем (7,4)-код Хемминга, записав предварительно его порождающую матрицу в систематической форме:
/10 0 0 1 I 0\
'/ 0 10 0 10 1]
G=[0010011b\о о о 1 1 1 1/
в качестве У2— (3,2)-код с общей проверкой на четность. Составим кодовое слово кода V^Va* соответствующее исходному слову 00101110 с восемью информационными символами. Запишем его в виде матрицы порядка 2X4:
/0 0 1 0\
(I I 1 о;
В результате кодирования строк (7,4)-кодом Хемминга (см. правило (6)) получим матрицу порядка 2X7:
0 0 1 0 0 1 1\
1 1 1 0 0 0 0/
Кодирование столбцов этой матрицы сводится к добавлению в каждом столбце символа общей проверки на четность. Получившейся в итоге матрице порядка 3X7
/0 0 1 0 0 1 1\(1110000)\1 1 0 0 0 1 1/
соответствует следующее кодовое слово кода 匕区)%:
001001111100001100011,
ДЕКОДИРОВАНИЕ ПО СИНДРОМУ И ЕЩЕ РАЗ О КОДЕ ХЕММИНГА
Слово «синдром» означает обычно совокупность признаков, характерных для того или иного явления. Такой же примерно смысл имеет понятие «синдром» и в теории кодирования. Синдром вектора, содержащего, быть может, ошибки, дает возможность распознать наиболее вероятный характер этих ошибок. Правда, определение, которое мы приводим ниже, не сразу позволяет это увидеть.
Синдромом вектора и называется вектор s(〃), определяемый равенством:
S (岗)=我//T.
Из правила перемножения матриц следует, что синдром есть вектор длины т, где т ——число строк проверочной матрицы. В силу определения синдрома вектор 观 тогда и только тогда является кодовым (z^€ V),когда его синдром равен нулевому вектору. В самом деле, равенство
錫/У* = О
равносильно тому, что координаты %i, z2, • • * ,尤п вектора 寫 удовлетворяют проверочным соотношениям (1) из § 11.
Пусть теперь вектор и не является кодовым, тогда этот вектор обязательно содержит ошибочные символы. Вектор и можно представить тогда в виде суммы посланного кодового вектора т (который пока не известен) и вектора ошибки с:
我=⑶+ e.(1)
Ясно, что вектор е —(Ei, е2, ••* , &九)содержит ненулевые символы в тех позициях, в которых вектор и содержит искаженные символы.
Важным обстоятельством является то, что синдромы принятого вектора и и вектора ошибки совпадают. Действительно.
s (切=(о + е) /Л = &/7T + с"' = е力=s(e).(2)
Рассмотрим теперь множество U всех векторов и\ имеющих тот же синдром, что и вектор и. Пусть а=иг——и. Тогда
s (&) =(仅一我)"т =靈"т—"”т= $ (6) — 5 (我)О,
Так как s(@)=0, то а — кодовый вектор. Обратно, 攵仙 z「—詛 一 кодовый вектор, то s(〃')=s(ze). Таким образом, для интересующего нас множества U имеем;
0 = {我十g10g/}.
На языке теории групп это означает, что U есть смежный класс по подгруппе V (пространство £办 и его кодовое подпространство V можно рассматривать соответственно как группу и ее подгруппу относительно операции сложения векторов).
Сказанное позволяет сделать следующие выводы:
Два вектора имеют одинаковый синдром тогда и только тогда, когда они принадлежат одному смежному классу по кодовому подпространству. Таким образом, синдром вектора однозначно определяет тот смежный класс, которому этот вектор принадлежит.
Вектор ошибки е для вектора ^ нужно искать в силу равенства (2) в том же смежном классе, которому принадлежит и сам вектор и.
Разумеется, указание смежного класса, которому принадлежит вектор е, ещ,е не определяет самого этого вектора. Естественно выбрать в качестве е тот вектор смежного класса, для которого вероятность совпадения с е наибольшая. Такой вектор называют лидером смежного класса. Если предположить, что большее число ошибок совершается с меньшей вероятностью, то в качестве лидера следует взять вектор наименьшего веса данного класса и в дальнейшем лидер 6负вт пониматься именно в этом смысле.
При реализации алгоритма декодирования по синдрому составляют таблицу, в которой указываются синдромы * и лидеры е» соответствующих им смежных классов. Алгоритм декодирования заключается тогда в следующем:
Вычисляем синдром s(必)принятого вектора и.
По синдрому s(〃)=s» определяем из таблицы лидер 勺 соответствующего смежного класса.
Определяем посланный кодовый вектор в как разность 通=臨--%.
Может случиться, что в некоторых смежных классах окажется более одного лидера. Если искаженный вектор а попал в один из таких смежных классов, то разумнее отказаться от исправления ошибки, ограничившись ее обнаружением.
При всей своей простоте и прозрачности алгоритм синдромного декодирования обладает серьезным недостатком. Заключается он в том, что устройство, реализующее этот способ декодирования, должно хранить информацию о лидерах и синдромах. Объем же этой информации может оказаться очень большим даже при умеренных длинах кодовых слов (порядка нескольких десятков). В этом нетрудно 62
убедиться — ведь число лидеров и синдромов совпадает с числом смежных классов, которое по теореме Лагранжа равно qn : qk~qn~k. Так что, например, для двоичного (50, 40)-кода получится 1024 лидеров и столько же синдромов, а .для (50,30)-кода число их превзойдет миллион.
Таким образом, мы либо придем к чрезмерному усложнению аппаратуры для синдромного декодирования, либо практически вообще не сможем ее построить. К счастью, имеются коды, декодирование которых не требует обращения к таблице лидеров и синдромов. Простейшие из них —— это код Хемминга и его расширенный вариант, рассмотренные в § 9.
Как мы уже знаем, двоичный код Хемминга является линейным, в общем случае имеет длину п=2т——1, исправляет одиночные ошибки и обходится минимально возможным для этой цели числом проверок (это число равно т). Таким образом, проверочная матрица кода Хемминга имеет порядок /иХ(2加——1). При этом все столбцы этой матрицы должны быть ненулевыми и различными (см. § 11, задача 5). Каждый столбец есть двоичный вектор длины /и; всего имеется 2加 таких векторов, поэтому для построения проверочной матрицы кода Хемминга длины 2m——1 нужно выписать (в качестве столбцов этой матрицы) все ненулевые двоичные векторы длины т. Порядок столбцов безразличен, почаще всего их упорядочивают так, чтобы содержимое каждого столбца являлось двоичной записью его номера (сравни с матрицей (2) из § 11). Вот как выглядит проверочная мат
рица кода Хемминга длины 15 (т=4):
о I о о ^м ли 1* 'О о о о 1о I о о ^м ли 1* 'О о о о 1о 1 о 1о 1 о 10 0 111110 0 0110 0 10 10 100 0 111110 0 0110 0 10 10 100 0 11/0 10 1/0 0 11/0 10 1/
о I о о ^м ли 1* 'О о о о 1
о I о о ^м ли 1* 'О о о о 1
о 1 о 1
о 1 о 1
0 0 111
110 0 0
110 0 1
0 10 10
0 0 111
110 0 0
110 0 1
0 10 10
0 0 11/
0 10 1/
0 0 11/
0 10 1/
Алгоритм исправления одиночных ошибок в этом случае удивительно прост. Если вектор и содержит откбсшны访 символ в f-й позиции, то синдром s(“) этого вектора совпадает с 〃м столбцом проверочной матрицы. Таким образом, этот синдром, тмтаемк访 как двоичное число, н есть номер ошибочного символа.
Код Хемминга и в общем случае допускает усовершенствование того же рода, что и (7,4)-код из § 9. Добавление проверочного символа а0) осуществляющего общую проверку на четность, приводит, как и там, к расширенному коду Хемминга с дополнительной способностью обнаруживать двойные ошибки, Его проверочная матрица легко может
быть получена из матрицы кода Хемминга: к каждой строке последней следует впереди приписать нулевой символ, а к получившимся строкам ——строку из единиц, соответствующую общей проверке на четность:
% + 04 + a2+*…+a注g°"
Например, из приведенной выше проверочной матрицы для (15,11)-кода Хемминга получается следующая проверочная матрица для расширенного (16,11)-кода:
・i 1 ■ ж Л^~ и 1* II 11 Лм OW11 11 Ли 11 и 1± 11 Ли 111 1 о о ? 11 11 Ли с11 сз т-*-11 11 и Ли 11 и Ли11 о 11 о 1 11 о 1 о о1 о о 1 1 и< с11 1 о о о о・i 1 ■ ж Л^~ и 1* II 11 Лм OW11 11 Ли 11 и 1± 11 Ли 111 1 о о ? 11 11 Ли с11 сз т-*-11 11 и Ли 11 и Ли11 о 11 о 1 11 о 1 о о1 о о 1 1 и< с11 1 о о о оlx 1 1 1Аlx 1 1 1А
・i 1 ■ ж Л^~ и 1* II 11 Лм OW
11 11 Ли 11 и 1± 11 Ли 11
1 1 о о ? 11 11 Ли с
11 сз т-*-11 11 и Ли 11 и Ли
11 о 11 о 1 11 о 1 о о
1 о о 1 1 и
< с11 1 о о о о
・i 1 ■ ж Л^~ и 1* II 11 Лм OW
11 11 Ли 11 и 1± 11 Ли 11
1 1 о о ? 11 11 Ли с
11 сз т-*-11 11 и Ли 11 и Ли
11 о 11 о 1 11 о 1 о о
1 о о 1 1 и
< с11 1 о о о о
lx 1 1 1А
lx 1 1 1А
При вычислении синдрома искаженного вектора возможны две основные ситуации: либо синдром совпадает с одним из столбцов проверочной матрицы, либо это не так. Читатель легко проверит, что первая ситуация соответствует нечетному числу ошибок в слове, а вторая ——четному.
В первом случае считаем, что произошла одиночная ошибка, и ее положение определяется номером столбца, с которым совпадает синдром.
Во втором случае считаем, что допущены две или любое большее четное число ошибок, если s(〃),0. Если же s (我)=0, то, как обычно, полагаем, что ошибок при передаче не было.
Задачи и дополнения
L Построить таблицу синдромов и соответствующих лидеров для (7,3)-кода с порождающей матрицей
/О 0 1 1 0 1 КG= 0100111,\1 0 0 1 1 0 1/
Доказать, что алгоритм синдромного декодирования позволяет исправить любое количество ошибок, не превосходящее —^― , где d —кодовое расстояние.
Указание. Достаточно проверить, что все векторы веса
и меньше попадают в различные смежные классы и( следовательно, являются лидерами в своих смежных классах»
Код с проверочной матрицей
/ 1 0 1 0 0 0 0\
/ 1 1 0 1 о о о\/7= 0 10 0 10 0
\oooooio/
\0 0 0 0 0 0 1/
используется для ксп卩二вления всех одиночных ошибок. Определить, какие еще ошибки могут быть в данном случае исправлены или обнаружены при декодировании по синдрому.
Проверить, что для обычного (нерасширенного) кода Хемминга лидеры ненулевых смежных классов исчерпываются всеми векторами веса I. Верно ли это для расширенного кода Хемминга?
13. О КОДАХ, ИСПРАВЛЯЮЩИХ НЕСИММЕТРИЧНЫЕ ОШИБКИ
На практике нередко встречаются каналы, отличающиеся асимметричным характером ошибок, скажем, такие, в которых преобладают замещения вида 0 f 1 (т. е. вместо нуля принимается единица), а замещения I -> 0 крайне редки.
Конечно, и в этом случае можно использовать коды, предназначенные для исправления замещений обоих видов, в частности, рассмотренный нами код Хемминга. Но это было бы слишком расточительно, так как корректирующая способность кода наполовину расходовалась бы тогда вхолостую. Пр идуманы поэтому коды, приспособленные специально к исправлению несимметричных ошибок.
Исходное соображение здесь очень простое: если в канале невозможны ошибки вида 1 0, то в принятом двоичном слове нет нужды проверять позиции с нулевыми символами ——они наверняка переданы без искажений. Будем поэтому производить проверку таким образом, чтобы ее результат зависел только от позиций с единичными символами, точнее, от номеров этих позиций. С этой целью для произвольного двоичного слова u^=XiXi...xn составим сумму
s (〃)= £ 修厶 (1)
В сумме (1) ненулевые слагаемые соответствуют только единичным символам и каждое из них совпадает с номером этого символа, т. е. число S (辽)равно сумме номеров единичных позиций слова и.
Как обычно, постараемся найти простое условие, выделяющее кодовые слова среди прочих. Будем искать это ус-
3 М. Н. Аршинов, Л. Е- Садовский 65
ЛСБис в виде сравнения по некоторому модулю I. Пресета- зим себе, что число / уже выбрано, и рассмотрим код, состоящий из всех таких слов 口=%工 х2 尤冷,для которых S®)三0 (mod /),(2)
т. е. из слов, для которых сумма номеров единичных позиций делится на 2 без остатка. Обозначим указанный код через Уп,广 Так, при 孔=4, /=5 получим следующее множество кодовых слов:
匕产{0000, 1001, ОНО, 1111},
Нетрудно убедиться, хотя бы перебором всех возможных случаев, qro данный код исправляет любые одиночные ошибки вида 0 -> 1. Например, ошибка в третьем символе слова 1001 переводит его в слово 1011. При этом никакое другое кодовое слово не могло преобразоваться в результате одиночной ошибки в слово 101L Поэтому получатель декодирует слово 1011 однозначно, считая, что было послано слово 1001. Аналогично обстоит дело с другими двоичными наборами, содержащими одиночные за?лещения нуля на единицу. Отметим, что в некоторых случаях (но не всегда!) возможно исправление также и двойных замещений нуля на единицу. Один из таких случаев ——ошибка в двух первых символах слова 0000. Получающееся при этом слово 1100 не является кодовым и не могло получиться ни из какого кодового слова в результате одиночной ошибки. К тому же имеется единственный вариант двойного замещения, переводящего кодовое слово в слозо 1100,——именно тот, который был указан выше.
Подобные свойства сохраняются и для произвольного кода Vna, если /》zi+L В частности, такой код исправляет любые одиночные ошибки вида 0 -> 1; при этом алгоритм их исправления чрезвычайно прост. Действительно, пусть в кодовом слове v=xt х2- • -vn произошло не более одной ошибки и получилось слово 〃. Если ошибка произошла в /-м символе, то понятно, что S (u)^=S (v)+j. Поскольку S (v)=0 (mod /), то вычет числа S (辽)по модулю / равен /, т. е. номеру позиции, в которой произошла ошибка. Если же ошибки не произошло, то вычет SQ) по модулю I равен нулю.
Проиллюстрируем исправление одиночной ошибки на примере рассмотренного выше кода 匕田 Пусть принято слово "=0П1. Тогда S (〃)=2+3丄4=9三4 (mod 5). Следовательно, ошибка произошла в четвертой позиции, т. е. передавалось кодовое слово 0110=
Наиболее употребимы коды УпЛ при минимально возможном / : l=n+\. Именно они впервые были предложены советскими специалистами по кодированию Р. Р. Варша- мовым и Г. М. Тененгольцем.
Коды Vnu обладают способностью исправлять еще один пш искажений кодовых слов, характерный для несимметричных каналов. Это так называемые выпадения и вставки символов.
Предположим, что в некотором слове и=%1%£. . .%冷 произошло выпадение одного символа, в результате чего ПОЛУЧИЛОСЬ СЛОВО U = y1y2. . .уп-1 ДЛИНЫ П——1. ПуСТЬ rti — число единиц, а п0 ——число нулей, расположенных правее выпавшего символа. Оказывается, числа & и 孔。могут быть определены с помощью суммы
1
S (〃)=力
В самом деле, если выпал символ 0, то S®)—5(辽)=小, а если выпал символ 1, то S ®)—S (и)=п—п0. Если 切(〃)一 вес слова 〃,то, очевидно,
nL^w (и)<п—几. (3)
Так как S®)三0 (mod /), то вычет числа — S(и) по модулю / равен либо пг (в случае выпадения нуля), либо п——п0 (в случае выпадения единицы). Неравенства (3) показывают, что если этот вычет не превосходит 侬(〃),то выпал символ 0, если же это не так, то символ 1. В первом случае выпавший символ 0 надо вставить в слово и так, чтобы правее него было число единиц, равное вычету числа ——S(a) по модулю /. Если же этот вычет больше, чем ⑪(к), то вставляем в слово и единицу так, чтобы правее нее было число нулей, равное разности п и вычета числа — S(〃). Если, например, при использовании кода V4i5 принято слово 〃= = 101, то S(a)=4, a w(u)=2t вычет числа — S(〃) по модулю 5 равен 1, и, следовательно, выпал символ 0. Вставить его надо так, чтобы правее него была одна единица. Получается кодовое слово 1001.
Аналогично исследуется случай одиночной вставки си?л- вола. Читателю предлагается обосновать следующий алгоритм восстановления кодового слова, отвечающий этому случаю.
Пусть принято сповои=у、% .也G+i длины п+1 н 月—— вычет числа S(〃)по модулю /. Тогда
если 々=0, то отбрасывается последний символ слова 〃;
2)если 0V^V5(a),то отбрасывается любой нулевой символ, правее которого в слове и ровно k единиц;
.3) если 尼=® (〃),отбрасывается первый символ слова % ”4) если k>w(u)t отбрасывается любой единичный символ, правее которого имеется п+1——k нулей.
Задачи и дополнения
Сравнить коды 卜5声 иа также коды V6)7f
卜6 8, ' • ” ^6 is по их способности исправлять двойные замещения вида 0-^1.'
Для кода ИП1 n+i сформулировать признак исправимости замещения двух или большего числа символов. Каким будет этот признак для кода Vn( 2门?
Найти алгоритм исправления (исправимого) двойного замещения ДЛЯ КОДОВ Un,相+i и 2“
Коды У”, k можно использовать для исправления одиночных замещений вида' 1->0. Каково в этом случае правило декодирования?
Построив код V7)8, убедиться, что на местах с номерами 3, 5, 6, 7 встречаются всевозможные наборы из нулей и единиц и, значит, символы с этими номерами играют роль информационных.
Утверждение задачи 5 можно обобщить на случай любого кода У% п + 1,для которого 几=2加一1.
'Рассмотрим т позиций с номерами 1, 2, . . ., 2^-】. Выберем произвольную комбинацию из нулей и единиц в оставшихся п——т позициях. Тогда существует единственное заполнение позиций 1, 2, . . ,, 2勿,для которого получившееся слово удовлетворяет условгпо (2), т. е. является кодовым. Отсюда вытекает, что число слов кода УПу п+1 равно 2弘-凉, т. е, совпадает с числом слов в коде Хемминга длины п=2优——1.
'Пусть ^^ «+1 есть простое число. Через R% 々 обозначим код, состоящий из всех слов v—x^ х? . . •尤小 для которых выполняются дез соотношения:
£ /勺三 0 (mod 初 >J 三三 £ (mod k)t
Построить jc();i У"*. Убедиться, что on испраьляет любые одиночные и двойные замещения вода Of 1.
Пскззать, q『o всякий код Vn)尼(см. задачу 7) исправляет любые одиночные и двойные замещения вида Of 1. Сохранится ли это свойство для составного А?
14. ЦИКЛИЧЕСКИЕ КОДЫ
Среди линейных кодов особо важную роль играют так называемые циклические коды, По ряду причин они являются наиболее ценным достоянием теории кодирования. Во-первых, они допускают еще более компактное описание, чем произвольные линейные коды. Во-вторых, имеющиеся для линейных кодов алгоритмы кодирования н декодирования могут быть в применении к цикличеевдм
ходам значительно упрощены; более того, для циклических кодов существуют стон особые методы декодирования, неприложимые к другим линейным кодам. Наконец, по своей структуре эти коды идеально приспособлены к реализации в современных технических устройствах.
Простые в реализации, они, однако, не столь просты в теории. Для полного разъяснения большинства вопросов, связанных с построением и методами декодирования циклических кодов, требуется довольно сложный алгебраический аппарат. Поэтому наше предстоящее знакомство с циклическими кодами будет далеко не полным.
Начнем с понятия циклического сдвига вектора. Пусть задан произвольный/г-мерный вектор @^(&0, дь «2, . , с координатами из любого поля F (нумерацию координат в случае циклических кодов удобно начинать с нуля). Циклическим сдвигом этого вектора назовем вектор @'= =(。氾一1, a。, 〃i,以2,..., 〃几_2)・ Например, для вектора (01101) последовательными циклическими сдвигами являются такие вектора:
(10110), (01011), (10101), (11010).
Циклическим кодом называется линейный код, который вместе с любым своим вектором содержит также и его циклический сдвиг. Иными словами, циклический код обладает следующим свойством: циклический сдвиг любого кодового вектора снова является кодовым вектором.
Циклическим является, например, код с порождающей матрицей
Менее тривиальным примером циклического кода (проверка предоставляется читателю) является код, эквивалентный (7,4)-коду Хемминга, с проверочной матрицей
/1 1 1 0 1 0 0\
"=(0 1110 10).(I)
\0 0 1 110 1/
При рассмотрении циклических кодов кроме обычных действий над векторами мы имеем дело фактически еще с одной операцией, сопоставляющей каждому вектору его циклический сдвиг. Удобным алгебраическим средством для ее описания являются многочлены. С каждым вектором @= =(а0, di, . . . , an_i) свяжем многочлен a (x)—a0+aix+.. 十。”1炉「коэффициенты которого совпадают с соответ-
ствующими координатами вектора. В дальнейшем будем отождествлять вектор а с соответствующим ему многочленом а(х), свободно переходя от векторной записи к записи в виде многочлен^. Циклическому сдвигу Q =(о?г_з а。,〃工, ..・,ап_^ вектора а соответствует тогда многочлен &'(х)= 匚a;二+40%+生炉+,,,+a"2%"7, еравним многочлены а (%) и 〃'(尤).Если сумму первых п——1 слагаемых 〃(%) умножить на х, мы получим сумму последних п——1 слагаемых многочлена &'(%)• Вообще, нетрудно заметить, что
аг(х) = ха(х)—(хп — 1).(2)
Будем теперь считать, что 尤——образующий элемент циклической группы порядка п. Тогда /г-я степень х равна единице:
严=1,(3)
а все меньшие степени, 1, %,尤% .・.,являются различ- 我ыми элементами. При этом правило умножения степеней % следующее:
хкхт — £\(4)
где г = (mod п) и 0</?.
С учетом (3) равенство (2) дает:
а'(х) = ха (%),
т. е. циклический сдвиг любого вектора получается умно” жением этого вектора на х.
Из равенств (3) и (4) вытекает следующее правило умножения любых двух многочленов от 尤 степени &孔——1. Если a (х) = % + %%+
и
b(x) = b0 + b1x+ +bn^1xn^1
— два таких многочлена, то чтобы найти их произведение, сначала обычным образом раскрываем скобки, умножая степени / и хт по правилу (4), а коэффициенты ak и Ьт — по правилу, умножения в поле F, после чего приводим подобные члены.
Пример 1. Пусть п=5 и а (%) = 1+%+%?+%$ и Ь(х) = 1+%з+尤& — двоичные многочлены. Тогда
а(х)Ь(х)^(1+х+х^+х^(1+х3+х^=
=1 +x+x2.+x^+x3+xx3+x2x3+xix3+xi+xx4i+x2xi+x^xi =
=1 +%+资+%4+ 炉+%4+ ] +炉+*4+ 1 +%+%3= I +%4.
, Пример 2. Пусть п=4> а(х) — 1+2х+х^ и 匕(%) = ^2+х+х3 — многочлены над полем Z3. Имеем:
a(汇)Ь(元) = (1+2%+炉)(2+方+无3)=
=2+2,2%+2%?+%+2炉+x3+炉+2%元3+%2x3=
=2+%+2%2+%+2 抬+2胪+2+%= 1 +資+2%3,
Итак, для многочленов кроме операции сложения определена также и операция умножения (напомним, что сложение многочленов не нуждалось в специальном определе* ним, поскольку многочлены понимаются нами как векторы). При этом, очевидно, операция умножения многочленов коммутативна, ассоциативна и дистрибутивна относительно операции сложеиия. Поэтому множество Fn всех многочле^ нов степени &孔 образует относительно указанных операций кольцо. Но тогда циклический код может быть описан в чисто алгебраических терминах следующим образом:
Линейный код V является циклическим тогда и только тогда, когда V является идеалом в кольце Fn.
В самом деле, если V ——идеал, то для всякого кодового вектора (многочлена)仪(%) £ V имеем 尤а(х) С V, т.е. цикличес^ кий сдвиг снова является кодовым вектором.
Обратно, если V ——циклический код, то для всякого кодового вектора а(х) его последовательные циклические сдви^ ги ха(х),尤2〃(%),...,尤51瓜6 также являются кодовыми векторами.
Остается показать, что для всякого многочлена
b (%)=仇 + 61% + %炉 + ... +6"./厶7 произведение b(x)a(x) является кодовым вектором. Мы имеем:
6 (%) а(х) =
=瓦© (x)-jrb1xa (х)^Ь^а (%)+•,・ +Ьп_1х-~1а (л). (5)
Согласно сказанному выше, каждое слагаемое в (5) припад- 'лежит кодовому пространству, но тогда и вся сумма обладает этим свойством. Итак, V— идеал.
Не вполне ясно пока, какова польза полученного нами описания циклического кода. Следующее утверждение проливает свет на этот вопрос.
Во всяком идеале V кольца Fn существует фиксированный многочлен g(%), которому кратен всякий многочлен идеала V.
, Иными словами, любой многочлен а(х)€ V можно представить в виде произведения фиксированного многочлена
g(x) с V и некоторого подходящего многочлена s(x) £ F/ а(х)=g(尤)$(%)*(6)
Для доказательства рассмотрим ненулевой многочлен g(%) наименьшей степени, принадлежащий идеалу. Если а(х) произвольный многочлен из У, то разделим его на g(6 с остатком:
a(%)=g(x)s(%)+r(x)・(7)
Это можно сделать по обычным правилам деления многочлена на многочлен; степень остатка г(х) будет меньше степени делителя g(x)・ Первое слагаемое в правой части (7) принадлежит V (в силу определения идеала). Поскольку и многочлен а(х) принадлежит V, то остаток "%), равный разности
a(x)—g(x)s(x)
двух элементов из 匕 также должен принадлежать идеалу. Если предположить, что г(х)——ненулевой многочлен, то приходим к противоречию: многочлен «%), принадлежащий идеалу, имеет степень, меньшую степени g(x), Следовательно, г(х)=0 и выполняется равенство (6).
Многочлен g(x) называется порождающим многочленом идеала V (или соответствующего циклического кода).
Таким образом, если известен порождающий многочлен кода, то тем самым известны и все кодовые многочлены —их список исчерпывается всевозможными произведениями g(%)s(x); где s(%) ——произвольный многочлен степени, меньшей п.
Вспомним, что для задания произвольного кода нужно указать полный список кодовых слов, а для задания линейного кода — список базисных кодовых векторов. Для циклического же кода, как мы выяснили, достаточно указать всего лишь один кодовый многочлен, а именно —— порождающий многочлен g(尤).
По порождающему многочлену легко найти порождающую матрицу циклического кода. Пусть一
g(X)= go + g\x+ ■ • • +^^И
——многочлен степени т и k=n—m. Рассмотрим следующие многочлены:
g(x), xg(x), %2g(%),…-卄Tg(x).(8)
Все они являются кодовыми, степень их очевидно не превосходит п——1. Нетрудно убедиться, что рассматриваемые
как векторы, они образуют линейно независимую систему, и всякий кодовый вектор является их Уаинейной комбинацией. Следовательно, матрица G, составленная из векторов (8), является порождающей матрицей циклического кода. Порядок ее равен kXn и она имеет следующий вид:
/go gi…gm。・一о、/g(*)\
G = (。 g°gi• • •gm'' •°)=(犬g(*))(9)
\0…0 go glgm)\#"也(尤)/
В качестве примера рассмотрим двоичный циклический код длины 7 с порождающим многочленом ^(х)== 1 +^+х3= = (1011000), Так как
尤 g(x) — х+х34-х4 = (0101100),^2^W=^2+^4+^=(0010110),х3§(х) — х3+л5+а:6—(000101 l)s
то порождающей будет следующая матрица:
/1 0 1 1 о о о\
г о 1 о 1 1 о о \
° i о о 1 о 1 1 о г
\о о о 1 о 1 1/
Нетрудно убедиться, что данный циклический код эквивалентен коду Хемминга с проверочной матрицей
/0 0 0 1 1 11、(01100111\1 о 1 о 1 о 1/
Вообще, можно показать, что для всякого кода Хемминга имеется эквивалентный ему циклический код.
Очень важно, что среди циклических кодов имеются такие, которые исправляют любое заданное количество ошибок. Именно, справедлива следующая теорема: '
Для любых значений т и ^< -у— у существует двоичный циклический код длины 2"——1, исправляющий все комбинации из t или меньшего числа ошибок 〃 содержащий не более, чем mf проверочных символов.
Доказательство этой теоремы мы здесь не приводим. Скажем лишь, что построение указанных кодов основано на использовании упоминаемых в приложении полей Галуа GF(q) (см, также дополнение 8 к этому параграфу).
Задачи и дополнения
В теории циклических кодов многочлелч удобно трактовать не только как элементы кольца 尸〃,но и как элементы кольца многочленов 尸[X] с обычной операцией умножения многочленов. Условимся в последнем случае вместо обозначения а (х) пользоваться обозначением а(Х). Необходимость различать эти обозначения видна хотя бы из такого примера: если в кольце Fn имеет место хп——1=0, то в кольце Г[X] многочлен Хл—1, разумеется, не является нулевым элементом.
Для циклических кодов существенно следующее свойство порождающего многочлена g(%):
Если 8 качестве g (尤)выбран многочлен наименьшей степени, принадлежащий идеалу 沙,то многочлен g(X)£ 尸[X] является делителем многочлена Хп——1.
Для доказательства разделим Х〃一 1 на g(X) с остатком. Получаем: X^^h{X)g(X) + r(X)t(Ю)
где степень г(Х) меньше степени g (X). В кольце Fп равенство (10) приобретает вид:
也(%)g (y)十Г(不)=0,
откуда заключаем, что a(x) должен принадлежать идеалу V, в то время как его степень меньше, чем степень g(%)* Следовательно,《)=6, но тогда и г (X)—0, т. е.
X"—li(X)g(X)、(И)
Многочлен 力(X), удовлетворяющий равенству (11), называется проверочным многочленом.
Воспользуемся определением проверочного многочлена для по* строения проверочной матрицы циклического кода.
Пусть 九(汇)=2 ^/^—проверочный многочлен кода. Из (11) еле- /= о
дует, что если m — степень многочлена g(%), то h (х) имеет степень и——优, т. е. k—n——m. В силу (11) имеем также, что в кольце Рп проверочный и порождающий многочлены связаны равенством
h (x)g (x) = 0.(12)
Рассмотрим матрицу Н порядка тХп, имеющую следующий вид:
(
0■ > *。/% а а« 九工厶0 \
°・ г ° 厶々ч. ?/11 hQ 0 J03)
力用 •. * 力 1 % 0.*.。 0 /
Первая строка этой матрицы составлена из коэффициентов многочлена 九(}), записанных в обратном порядке (т. е, в порядке убывания степеней). Последующие строки составлены аналогичным образом из коэффициентов многочленов xh (х), . . ., xm~1h(x).
Докажем, что матрица Н является проверочной*
1
Действительно, пусть ^ W = 2 ^г^' —произвольный кодовый £= 0
многочлен. Рассмотрим идеал Vr>=(h(x))j порожденный проверочным,
I многочленом h(x)и возьмём произвольный многочлен: &(%)=£ %J
ИЗ этого идеала. Тогда a(%)=s(x)g(x), 6(%)=g(»/i(x) и согласно (12) а(¥)匕(%)=s (%)9 (%)g (x)h(x)~0.'
С другой стороны, умножая многочлены а (%) и 力(%) по правилам умножения в Fn (см. равенства (4)), получаем:
а (х) b (х)=(碗 + 〃1 尤+ ... ~\~ап—1х'П~1') (^оН-瓦力+ '一 + bz—j尤"7)= =(a0Ь0+〃1匕n~1+ . • . +cn-i^i) + (a0% + a1瓦+ • • • +a"162)尤十. • "
• • • + (^o^n-l + fil^n-2 4~ * • • +^n-1^0)光"-1.
Так как многочлен а (х)Ь (х) нулевой, то и все его коэффициенты равны нулю, в частности
a0匕ь1 + n1匕”2十…。十a〃~iM =0.
Это равенство означает, что всякий кодовый вектор ортогонален вектору 他?2—1,6以一2,.・.,b^, который получается из произвольного многочлена 方(尤)@#‘‘,если его коэффициенты записать в обратном порядке. Таким образом, в силу построения матрицы (13), каждая ее строка ортогональна любому кодовому вектору и, стало быть, эта матрица является проверочной.
Вернемся снова к примеру циклического (7,4)-кода с порождающим многочленом g(%)= 1+%2十依.Как было доказано, многочлен ^(Х)= 1+Л2+Х3 является делителем многочлена X?—1, Легко проверить, что
Х7-1=(Х-1) (Х3+Х+1) (Х3+Х2+1).
Следовательно, для проверочного многочлена /г (尤)имеем:
h(X)-(Х—1)停+%+ 1)= 1+炉+尤3+*4= (] Q] ] JQO).
Поэтому проверочной будет следующая матрица:
/О 0 1 1 1 0 1 \〃 =(0 1110 10).
\1 1 1 0 1 о о /
Исходя из равенств
(х9—1)=(х-1)(х3+л4-1)(хб+х3+П,
(X15—1)=(Х—1) (Х2+Х+1) (Х4+Х3+А2+А:+1) (”+Х+1)乂
X(x4+x3+i), найти порождающие и проверочные матрицы всех двоичных циклических кодов длины 9 и длины 15.
Пусть f (X)=/o+/i X +. . .+ fkXk—произвольный многочлен степени k. Многочлен (X) — X^f ( — ) называют двойственным к/(Х).
Показать, что проверочная матрица циклического кода может быть записана в виде:
/^ (х)\
\%血一1 胪(X)/
где h* (х)——многочлен, двойственный к проверочному многочлену h (х).
Убедиться, что код, дуальный к циклическому (см. § 11, дополнение 11), также является циклическим. Как связаны между собой порождающие и проверочные многочлены двух дуальных кодов?
Пусть g* (х) — многочлен, двойственный к многочлену g (力 Показать, что
коды, порожденные многочленами д(к) и g* (%), эквивалентны;
если для кода с порождающим многочленом g(x) выполняется условие g (^)=g* (х), то кодовое подпространство такого кода вместе с каждым вектором т= (%,。力•…,Gn-i) содержит также и вектор 彩 *=(4打一1, ^n-2> ■a0).
& Среди циклических кодов особую практического важность имеет один специальный класс кодов, предложенных американскими матема- -г иками Еоузом, Чоудхури и Хоквингемом. Эти коды так и называются кодами БЧХ —— по начальным буквам фамилий этих математиков. Теория кодов БЧХ выходит за рамки настоящей книги, и мы только объясним в нескольких словах, каким образом они определяются. Для этого нам потребуются некоторые дополнительные сведения из теории полей.
Будем говорить, что подмножество 尸 является подполем поля F, если 尸 есть поле относительно операций на 尸.Справедлива такая теорема:_
Для любого конечного поля 尸 можно указать конечное поле 尸,удовлетворяющее следующим условиям;
1) F есть подполе поля 尸;
2)尸 содержит п корней уравнения Хп——1 — 0;
не существует поля, обладающего свойствами 1 〃 2 〃 имеющего меньше элементов, чем F.
Пусть теперь для поля 尸 указано поле F со свойствами 1) — 3). Пусть а — примитивный элемент поля 尸,а числа s и / таковы, что элемент а5 имеет порядок л и $+/<<?, где q — число элементов поля F, Циклический код называется кодом БЧХ (с параметрами n, s, /), если он состоит из всех многочленов степен-i <и—1 с коэффициентами из F$ среди корней которых содержатся все элементы
а§, ау+1, а», ・••,а».
Можно доказать, что кодовое расстояние такого кода не меньше /+2. Следовательно, варьируя параметры n, s, /, мы имеем возможность получать коды БЧХ с любым расстоянием, а значит, исправляющие любое заданное число ошибок. Это обстоятельство счастливо дополняется тем, что для указанных кодов разработаны удобные алгоритмы декодирования, основанные на вычислениях в конечных полях и легко реализуе* мые автоматическими электронными устройствами.
До сих пор мы говорили о кодовом расстоянии кода и макси* мальном числе t исправляемых ошибок как об основных показателях корректирующей способности кода. Однако ясно, что более весомым показателем является величина tlny показывающая, какова доля числа ошибочных символов от общего числа символов принятого слова, при которой возможно еще правильное декодирование (исправление ошибок). С другой стороны, отношение kin (应 一 число информационных символов) характеризует избыточность кода: чем меньше это отношение, тем, очевидно, больше избыточяость#
И йот здесь коды БЧХ обнаруживают некоторый изъян. ОкззьЬ вается, при заданной корректирующей способности, т, е. заданной величине //п, коды БЧХ большой длины имеют слишком высокую избыточность. Более того: если отношение 〃/г фиксировано, а 〃一> 8, то fe/n^O.
Стремление исправить этот недостаток привело к появлению таких кодовых конструкций, как коды-произведения (см. дополнение 12 к § 11) и их обобщение — каскадные коды. Строящиеся, как правило, на базе кодов БЧХ, они в значительной степени сохраняют их достоинства, но одновременно избавлены от упомянутого выше дефекта.
О ГРАНИЦАХ ВОЗМОЖНОГО
В КОДИРОВАНИИ И СОВЕРШЕННЫХ КОДАХ
Одна из основных проблем теории кодирования (и, пожалуй, самая интригующая) формулируется следующим образом:
Каково максимальное число кодовых слов в двоичном коде длины п, если наименьшее расстояние между кодовыми словами равно d? (Для указанного числа, зависящего от значений п и d, будем применять обозначение М(п, d).)
Ответ на поставленный вопрос позволил бы во всех случаях выяснить, какой наименьшей длины должен быть код, чтобы можно было, во-первых, передать нужное число сообщений, и во-вторых, гарантировать исправление (или обнаружение) данного числа ошибок. ,
Однако здесь мы сталкиваемся с явлением весьма распространенным в математике, когда простая по формулировке задача оказывается далеко не столь простой для решения. И хотя указанной проблеме было посвящено немало интересных и глубоких исследований, хотя для ее решения были испытаны самые разнообразные математические методы (вплоть до весьма современных ——таких, как линейное программирование), исчерпывающего решения пока не получено. Более того, сейчас, по-видимому, уже ясно, что едва ли удастся найти сколько-нибудь обозримую формулу для числа М(п, d). Более реальный, хотя тоже нелегкий путь, по которому и идут исследования, заключается в том, чтобы достаточно точно оценить это число.
Мы расскажем здесь о самых простых оценках для числа М(п, d), которые могут быть получены из несложной комбинаторики.
Будем называть шаром радиуса 厂 с центром в слове х множество всех слов у, удаленных от % на расстояние, не большее 尸,т. е. таких, что p/尤, у)守(аналогия с обычным шаром).
Во всяком шаре радиуса г содержится одно и то же ко личество двоичных слов, зависящее только от г, поскольку, как нетрудно проверить, оно совпадает с количеством СЛоВ Шара того же радиуса с центром в нулевом слове. Последний же шар содержит все те двоичные слова, у которых число единиц не превышает г. Число различных п-буквен- ных слов с f единицами равно числу сочетаний из 孔 элементов по / (С/. Поэтому, обозначив число всех слов б шаре радиуса г через 匕,получим:
吟=1+©+& + -.+& = £ с*,t = о
Рассмотрим теперь код длины п с кодовым расстоянием d=2Z+l, содержащий максимальное число М (и, d)= = Л4(/г, 2/+1) кодовых слов. Иными словами, это наибольший по объему код, исправляющий любые / (и меньшее число) ошибок,
«Окружим» каждое кодовое слово шаром радиуса t. Очевидно, что эти шары попарно не пересекаются, и, следовательно, общее число слов во всех шарах равно Vt -М(и, d). Разумеется, оно не может превосходить числа всех п- буквенных двоичных слов, т. е. Vt -М(п, d)^2n, откуда мы и получаем верхнюю оценку для максимального числа кодовых слов:
М(п, 2/+1)<^. (1)
Эта граница, предложенная Хеммингом, называется его именем. Другое ее название —— граница сферической упаковки ——связано с тем, что равенство в (1) достигается в том случае, когда непересекающиеся шары (или сферы) радиуса / с нептром в кодовых словах целиком заполняют все множество n-буквенных слов. Коды, обладающие таким свойством, называют совершенными или плотно упакованными, и к ним мы еще вернемся чуть позже.
Чтобы получить оценку снизу, рассмотрим для каждого кодового слова шар радиуса 2f с центром в этом слове. Из максимальности кода следует, что любое «-буквенное слово принадлежит хотя бы одному такому шару. Будь иначе^ мн смогли бы добавить к нашему коду еще по крайней мере одно слово, не уменьшая кодового расстояния. Итак, объединение всех рассматриваемых шаров совпадает с множеством всех п-буквенных слов.
Произведение V2tM(nfd) есть число слов, содержащихся во всех этих шарах. Но при этом многие слова могут при-
надлежать не одному, а нескольким шарам, и значит, в произведении учитываются несколько раз. Поэтому справедливо неравенство,
V2tM(n, d)》2\
которое дает теперь уже нижнюю оценку для максимального числа кодовых слов:
М (% 2/ + 1}》р— *(2)
Оценки, аналогичные (1) и (2), справедливы и для недвоичных кодов. В случае произвольного основания q они имеют вид:
р~ & А1 (孔,2f 十 1) &;
при этом число слов в шаре радиуса г вычисляется по формуле:
匕=1+0乂g一1)十ae一1)2+.一+2(9 - 1)。
На примерах можно убедиться, что указанные границы далеко отстоят одна от другой, т. е. являются весьма грубыми. Имеется много их уточнений, а также оценок другого рода, но это вопросы более специальные.
Скажем теперь несколько слов о совершенных кодах, с которыми связана целая эпоха в теории кодирования. Мы отмечали уже, что число кодовых слов М. совершенного кода, исправляющего t ошибок, достигает наибольшей возможной величины (верхней границы Хемминга). В случае двоичного кода имеем, следовательно,
М=2"/£(Х(3)
1=0
Тривиальным примером совершенного кода является код с повторением нечетной длины 孔=2/+1. В этом случае верхняя граница (1) равна
22,+ 1/£鄧+1 = 2* + 1/2n=2,
что совпадает с числом кодовых слов кода с повторением.
Более интересный класс совершенных кодов являют собой хорошо известные нам коды Хемминга длины 2m—1 с исправлением одиночных ошибок. Граница сферической упаковки для этих параметров (孔=2酬——1, f=l) равна
2厶/(1 +也)=2勺/2加=2拉一麻.
Столько же кодовых слов имеет двоичный код Хем” минга.
Из равенства (3) вытекает, что совершенные двоичные КОды могут существовать лишь для таких параметров 胃 и
f для которых 2 С^ является степенью двойки (так именно и было в рассмотренных выше примерах).
Понятие плотно упакованного кода появилось уже в первых работах по теории кодирования, тогда же возникла проблема описания всех совершенных кодов. Поиск плотно упакованных кодов казался весьма заманчивой задачей, но лишь однажды он увенчался успехом. Новый совершенный двоичный код был открыт в 1949 г. американским ученым Голеем. Этим кодом (его так и называют ——код Голея) оказался (23, 12)-код, исправляющий три ошибки. Как впоследствии выяснилось, этот код является циклическим с порождающим многочленом g(X) = Xu+X9+X7+№+X+1 (мы уже знаем, что этот многочлен служит делителем многочлена Х?з—1).
Дальнейшие поиски совершенных кодов к удаче не привели. Это не значит, однако, что не появлялось интересных работ о совершенных кодах. Самой значительной и глубокой из них была опубликованная в 1957 г. статья Ллойда, в которой на изучение проблемы были брошены мощные средства теории функций комплексного переменного и диф' ференциальных уравнений. В результате вопрос существования совершенного кода с теми или иными параметрами был сведен к чисто алгебраической задаче, связанной со свойствами корней некоторого многочлена.
Под влиянием этой и ряда других работ стало складьь ваться впечатление, что иных двоичных линейных совершенных кодов, кроме перечисленных, и не существует. Это предположение оказалось справедливым, но доказано оно было лишь в начале семидесятых годов финскими учеными А. Тиетявяйненом и А. Перко и независимо от них советскими учеными В. А. Зиновьевым и В. К. Леонтьевым. Решению проблемы предшествовала многотрудная подготовка, в которую внесли вклад многие специалисты, и немалую роль здесь сыграли результаты и методы упоминавшейся выше работы Ллойда.
Что касается кода Голея, то он является во многих отношениях важным и замечательным кодом и остается ио точником многих идей и исследований в теории кодирования (см. [12J).
Задачи и дополнения
Убедиться, что не существует кода длины 20, содержащего 1000 кодовых слов и исправляющего любые комбинации из трех и менее ошибок.
Использовать верхнюю оценку Хемминга для доказательства следующего утверждения:
Для всякого q-ичного линейного (п, k) -кода с кодовым расстоянием d — 2/+1 величина loggV, служит нижней границей для числа т проев' рочных символов:
m^ logg 匕.
Для оценки «качества» линейного кода можно пользоваться так называемой границей Варшамова —— Гильберта. Применительно к двоичным кодам указанная оценка основывается на следующем утвержде* НИИ:
Если выполняется неравенство
1 十 G;1 + Cn—i + …十 С%_; < 2仁(4)
то существует линейный (л, %-код с кодовым расстоянием, не меньшим d, имеющий не более т проверочных символов.
Для доказательства достаточно построить матрицу Н порядка тХ «, в которой любые d——1 столбцов линейно независимы; она и будет служить проверочной матрицей искомого кода (см. §11, дополнение 4). В качестве первого столбца Н можно взять любой ненулевой вектор длины т. Пусть уже выбрано i<n столбцов, любые d——1 из которых линейно независимы. Всевозможных линейных комбинаций этих ,столбцов, содержащих ровно / слагаемых, имеется не более С{, и, следовательно, число всех линейных комбинаций, содержащих d—2 или меньше столбцов, не превосходит числа
с; + ch-…十 с£т.
Но в силу (4) это число меньше величины 2m——1, т. е. общего количества ненулевых столбцов. Поэтому мы можем добавить по крайней мере еще один столбец, не равный ни одной из указанных линейных комбинаций. В получившейся при этом системе из(+1 векторов любые d——I вектороз по-прежнему будут линейно независимы. Продолжая эту процедуру присоединения столбцов, мы и построим искомую матрицу Н.
Утверждение, доказанное в дополнении 3, обобщается на случай линейного кода над произвольным полем из q элементов; неравенство (4) заменяется при этом на следующее неравенство:
i= о
⑸⑸Можно указать еще одну простую оценку для кодового расстояния. Поскольку суммарный вес ненулевых кодовых слов ^-ичного линейного (储 А)-кода есть 几дЕ-1(д——1) (см. § 11, дополнение 3), то средний вес ненулевых кодовых слов равен 项"、《——1)〃д左——1). Ясно, что он не может быть меньше минимального веса, совпадающего с кодовым расстоянием d. Таким образом,
⑸
⑸
/一1
Мы получили границу, называемую верхней границей Плоткина.
. Оценка (5) обобщается на случай произвольного ^-ичного кода длины п, содержащего М кодовых слов. В этом случае
(6)(6)“(,一1)储仅一 g (M—i)・
(6)
(6)
Из оценки Хемминга (1) также можно получить границу для кодового расстояния. Пусть код длины п, исправляющий / и меньшее число ошибок, содержит Л! кодовых слов. В силу определения Л4 (п, 2^+1) и оценки (1) М《М (% 2/十1)《严/%. Отсюда получаем: 1十g+…十aw方.(7)
Неравенство (7) дает верхнюю границу для 厶 а значит, и для кодового расстояния d=2/+1.
Граница Хемминга точнее границы Плоткина ал兄 кодов, избыточность которых не слишком велика (отношение числа проверочных символов к общему числу символов не превосходит 0,6). В остальных случаях точнее граница Плоткина.
Например, для двоичного (16,5)-кода оценка (5) дает d《8, а из оценки (7) получается /<4, т. е, d«9.
Имеются и нелинейные совершенные коды, но их также немного. Во всяком случае известно, что любой нетривиальный совершенный код над любым полем должен иметь те же самые параметры (длину, кодовое расстояние и число кодовых слов), что и один из кодов Хемминга или Голея. Все же полнее описание нелинейных совершенных кодов, исправляющих одиночные ошибки, пока не получено (см. по этому поводу [12], задача 6.6).
16. КОДИРУЕТ И ДЕКОДИРУЕТ ЭВМ
Заголовок этого параграфа не следует понимать буквально. Вряд ли было бы целесообразно привлекать универсальные ЭВМ для кодирования и декодирования с помощью линейных и циклических кодов. Однако устройства или схемы, предназначенные для этих целей, состоят из тех же элементов, что и любая ЭВМ, так что такие схемы, если угодно, можно рассматривать как специализированные мини-ЭВМ. В случае двоичных кодов применяются элементы двух основных типов:
Ячейка памяти (или триггер), которая может находиться в двух состояниях: одно из них соответствует символу 0, другое — символу 1, Ячейка памяти имеет один вход и один выход.
Двоичный сумматор, осуществляющий сложение по модулю 2. Сумматор имеет два входа и один выход.
Устройства, составленные из этих элементов, позволяют легко перемножать и делить двоичные многочлены, а это как раз те операции, которые приходится выполнять при использовании циклических кодов.
,В качестве первого примера рассмотрим схему, осуществляющую умножение произвольного двоичного многочлена f(X) на многочлен 1+负+ХК Эта схема представлена на рис. 14 и состоит всего из трех ячеек памяти и двух сумматоров. Поясним принцип ее работы,
―
Рис. 14.
Первоначально все ячейки памяти содержат нули, а на вход поступают коэффициенты многочлена f(X)=anXn+ +а„_1Хп-1+. . .+(з0, начиная с коэффициентов при старших
-pEFrEHZh-pEFrEHZhЧд-ЖНдЬЧд-ЖНдЬ
-pEFrEHZh
-pEFrEHZh
Чд-ЖНдЬ
Чд-ЖНдЬ
степенях. Коэффициент & без изменений передается на выход и запоминается в первой ячейке памяти (рис. 15, а)
В следующем такте работы (рис. 15, б) в первую ячейку памяти попадет коэффициент а коэффициент ап
сдвигается в следующую ячейку памяти. При этом на входах первого сумматора окажутся значени兄〃几 и 。"一 а на выходе их сумма по модулю 2.
В третьем такте (рис. 15, б) произойдет дальнейший сдвиг коэффициентов в ячейках памяти, а на выходе первого сумматора и всей схемы появится сумма ^-2+^-i.
На рис. 15, г показано состояние схемы на i-м такте, когда на вход подан коэффициент ап^{ (i^n).
Последние три такта отражены на рис. 15, d——ж.
Итак, на выходе схемы появится следующая последовательность из 孔+3 коэффициентов:
a幫;%-1 十0力;瘍一2+4"-1; %-3+0”2 + %; • • • J an-i + + о厚一宀 + о”£+з; ...; ^0 + йг4-л3; 〃()+ &; %;。”
Эта последовательность соответствует многочлену
anX^ + (an_1 + ail)X'^ + (an_2 + an_1)X^1 +
+ (^П-3 + ^„-2 + й J ^ ++(%一г十%-f+ 1 +
+ a时 j+3) X"r + 3 + 一.+(& 十生 + &) Xё! +
+ ("0 + a2)X2 + &X + 4。.
Непосредственно проверяется, что этот многочлен как раз и есть нужное нам произведение
(%Х〃 +%_Х…+…+ &Х? + %Х + &) (Хз + X? + 1).
Аналогично устроена схема умножения на произвольный многочлен
g(X) = g/"Tg,…Х^Т+ …+g|X+go
над любым полем (рис. 16). В этой схеме ячейки памяти хранят элементы поля 尸,так что число различных состояний ячеек должно совпадать с числом элементов в F. Ячейки памяти, как это видно из предыдущего описания, не только
Рис. 16.
«запоминают», но и «сдвигают» поступающие в них коэффициенты (играют роль сдвигающего регистра). Сумматоры осуществляют сложение по правилам сложения в поле 尸,'
Кроме того, в схему введены добавочные устройства, производящие умножение на элемент g^W 尸(на рис. 16 эти устройства показаны кружками; помеченными соответствующими множителями). В двоичном случае особых устройств для этого не требуется: если g『=l, то в соответствующем месте схемы имеется «вертикальное» соединение и двоичный сумматор, в противном случае они отсутствуют.
Столь же просты схемы деления многочлена на многочлен с остатком. Вот, например, как устроена схема деления на многочлен 1+Х^+Х3 (рис. 17).
На вход поступают коэффициенты делимого, начиная со старших степеней, на выходе последовательно появляются
вb銀曲
Qacmwe
Рис. 17*
коэффициенты частного. После окончания деления в ячейках памяти слева направо оказываются записанными коэффициенты остатка, начиная с младших степеней. Проследим последовательность работы схемы при делении на Х3+ + Х?+1 многочлена Х5+Х&+Хз+х/1・ Деление углом дает:
Х5 + Х4 + Х3 + 0-Х2 + Х^\ |Х\+Х2 + 0Х+1
ХТХ4 + 0・Хз+Х2 Х2 + 0・Х+ 1
0Х& + ХЗ + Х2 +х~н
6х《 + 0Хз + 0Х2 + 0Х
X^ + Xf-X +1
xs+xMG^+i
0Х2 + Х + 0
(рамочками выделены последовательные частичные остатки).
В первые три такта работы схемы старшие коэффициенты делимого сдвигаются по ячейкам памяти. При этом старший коэффициент (при Х$) окажется в крайней правой ячейке (рис. 18, о). Все это время на «нижних» входах
сумматоров сохраняются нулевые элементы, не влияющие на работу схемы. В следующем такте (рис. 18, б) старший коэффициент сдвигается на выход схемы, одновременно попадая на нижние входы сумматоров. На вход схемы поступает нулевой коэффициент при X2. В первую ячейку записывается выход первого сумматора, равный 1+0—1, во
i-0八0- 7八7
—」 |gJ
Рис. 18.
вторую ——содержимое первой ячейки в предыдущем такте (т. е. 1), а в третью —— выход второго сумматора, равный i + l=0. В итоге в ячейках памяти сдвигающего регистра оказываются записанными коэффициенты первого из обведенных рамочкой остатков.
На рис. 18, 8 показано состояние схемы после еще одного такта ее работы. Теперь уже содержимое ячеек —— коэффициенты второго из заключенных в рамочку остатков.
Еще один такт работы схемы переводит ее в конечное состояние (рис. 18, г). В ячейках памяти получены коэффициенты остатка, а последовательность символов 1, 0, 1 на выходе — это коэффициенты частного^
Приведем без комментариев схему, осуществл я ющую деление с остатком на произвольный многочлен g(X) (рис. 19), предоставляя читателю самому разобраться в принципе ее действия.
Схемы умножения и деления многочленов, рассмотренные нами,——это, по существу, уже готовые кодирующие устройства (или, как их называют, кодеры) для циклических кодов. В самом деле, вспомним правило кодирования линейным (п, й)-кодом. Если Л^а0. . .ak_r ——произвольное сообщение длины 比 то ему сопоставляется кодовый вектор а = (а。. . * а兑一J G,(1)
где G ——порождающая матрица линейного кода.
Разумеется, правило остается в силе и для любого циклического кода, но на языке многочленов ему можно придать теперь иную, гораздо более удобную форму.
Если а(х) — многочлен, соответствующий вектору Q, и Л (%)=a0+a/ + 一,十a舟一
—многочлен, соответствующий сообщению Л, то равенство (1) перейдет в равенство многочленов
а(尤) = 4(x)g(%),(2)
Для того чтобы убедиться в этом, достаточно подставить в (1) матрицу G из формулы (9) § 11 и проверить, что координаты получающегося вектора служат коэффициентами многочлена 4(x)g(x).
Итак, операция кодирования сводится к умножению многочленов. При этом можно считать, что речь идет об обычном умножении многочленов, поскольку степень g(尤)равна т, а степень 4(%) меньше п——т, так что сумма степеней этих многочленов меньше п. Но схемы, которые мы здесь рассмотрели (рис. 14 и 16), как раз и вычисляют обычное произведение многочленов. Первая из них может служить кодером для циклического (7,4)-кода с порождающим многочленом %з+%?+1, а вторая ——для произвольного циклического кода с порождающим многочленом g(尤).Если на вход последней поступают информационные символы а0, а*・..,а„„г (коэффициенты многочлена 若(%)), то на выходе согласно (2) будем иметь коэффициенты кодового многочлена а(х).
На основе схем деления чрезвычайно удобно строить кодеры для систематических циклических кодов, в которых информационные символы отделены от проверочных (см. дополнение 4 к этому параграфу).
Даже наше беглое знакомство с устройствами кодирования показывает, что все они имеют унифицированную струк-
туру. Как видно из рис. 16, путем определенных видоизменений схемы, предназначенной для одного кода, можно по* лучить схему кодирования для другого кода. Поэтому в ряде случаев целесообразно использовать не конкретные схемы для каждого кода, а достаточно разветвленное устройство с большим набором стандартных элементов, работу которого можно было бы перестраивать, вводя в него ту или иную программу. Такое устройство, в сущности/и есть специализированная мини-ЭВ/4 с программным управлением.'
В задачу декодирования входит исправление и обнаружение ошибок, и эта процедура много более сложная, чем кодирование. Но устройства, подобные рассмотренным «мини-ЭВМ», позволяют решить и эту задачу. В отличие от кодеров, которые выглядят более или менее стандартно для всех циклических кодов, декодирующие устройства (или Оекоберь» отличаются большим разнообразием, и то как они устроены, зависит и от типа кода, и в особенно^ сти, от способа декодирования.
Кроме синдромного декодирования, о котором мы рассказывали в § 12, существуют еще ряд других методов, так или иначе связанных с вычислением синдрома. Для любого из них принципиальная схема декодера выглядит так, как показано на рис. 20.
□□Устройство员阳6Kqite时也只синдромаУстройство员阳6Kqite时也只синдромаНаиболее сложной частью такого декодера является комбинационная логическая схема, которая по вычисленному синдрому находит положение ошибочных символов.
□
□
Устройство员阳6Kqite时也只синдрома
Устройство员阳6Kqite时也只синдрома
По力yueHHQRС力060По力yueHHQRС力060,Msра6力2恤8 广)снобо,Msра6力2恤8 广)снобоКонОина叩оннак加 тзическансхема
По力yueHHQRС力060
По力yueHHQRС力060
,Msра6力2恤8 广)снобо
,Msра6力2恤8 广)снобо
Запог-щ^/ощее уарройстЗо
I枝7 刀 си^8о^од
Рис. 20.
Устройство этой логической схемы целиком определяется алгоритмом декодирования, а многообразием логических схем в свою очередь определяется большое разнообразие декодеров. Сложность практической реализации декодера всецело зависит от характера логической схемы. Комбинационная схема исключительно проста, как мы увидим, в случае декодеров, только обнаруживающих ошибки или исправляющих лишь одиночные ошибки, но существенно
сложнее для декодеров, исправляющих кратные ошибки. В следующих двух параграфах мы познакомимся с методами так называемого мажоритарного декодирования, которые позволяют значительно упростить комбинационную логическую схему.
Что же касается устройств для вычисления синдрома, то здесь особой проблемы нет: они реализуются по тому же принципу, что и кодеры циклических кодов. Для этой цели, оказывается, могут быть использованы схемы деления многочленов.
Чтобы убедиться в этом, рассмотрим матрицу //, по столбцам которой стоят коэффициенты остатков г^х) от деления многочленов xz (i=0, 1, . . м п——1) на порождающий многочлен g(x). Запишем ее условно в виде:
// = (г0 (х), г 1(%), г2 (%),♦…’『门-i (%))♦
Можно показать, что матрица Н является проверочной для рассматриваемого кода (см, дополнение 2 к этому параграфу).
Если 我=(〃(),〃i, , *〃八一J — принятый вектор, то его
синдром 我"т будет равен
«0^0 (Х) + «1Г1 ⑴+…+ "“- J…(办(3)
Выражение (3) совпадает с остатком от деления многочлена
我(%) = 〃0 十〃6 十...+以71Txz
на порождающий многочлен g(x). Таким образом, любая схема деления, вычисляющая остаток,— например, схема, представленная на рис. 19,—— может быть использована как составная часть декодера для получения синдрома.
На рис. 21 приведена схема декодера, предназначенного только дл貝 обнаружения ошибок.
Полученное слово одновременно вводится в запоминающее устройство и в схему деления. К моменту заполнения
запоминающего устройства в ячейках сх^мы деления будет получен остаток от деления на g(%), который равен синдрому. Если синдром равен нулю, то слово передается адресату, в противном случае прием прекращается и передающей стороне посылается запрос на повторную передачу.
Не намного сложнее схема декодера для кодов Хемминга, исправляющих одиночные ошибки. В качестве примера рассмотрим декодер для (7,4)-кода с порождающим многочленом 1 +х3+х3. Его схема представлена на рис. 22, Она
включает в себя наряду со схемой деления и запоминающим устройством также и логическую схему. Последняя у строена так, что на ее выходе появляется 1, только если на вход из ячеек памяти подается комбинация 011, равная последнему столбцу проверочной матрицы
/1 0 0 1 1 1 0\
0 10 0 111) 、 \0 0 1 1 1 0 I /
(которая построена указанным выше способом из остатков от деления многочленов 尤'на порождающий многочлен 1 +资+%3).
Предположим теперь для примера, что ошибка в слове 〃о 〃[ 〃2 ^з 卫4 辽5 〃б произошла в символе и3 —— четвертом по порядку. Как мы знаем, синдром в этом случае будет совпадать с четвертым столбцом матрицы Я, т. е. будет равен вектору (1 0 1). Следовательно, после семи тактов работы в запоминающем устройстве окажется слово 〃@ 〃工 u2 况з 〃& 〃s 历⑪ а в трех последовательных ячейках схемы деления —комбинация 1 0 1. На восьмом такте из запоминающего устройства на исправляющий сумматор поступит символ 〃б, на вход логической схемы сдвинется комбинация
1 0 1, на ее выходе окажется 0, и символ 辽^ без изменений поступит на выход всей схемы. При этом, как нетрудно проверить, в ячейках схемы деления окажется комбинация 1 1 1 (на вход всей схемы, начиная с восьмого такта поступают нули). В следующих трех тактах из запоминающего устройства будут последовательно поступать символы 〃$,卫&, 〃纟, на вход логической схемы ——комбинации 111, 110, 011, а на ее выходе получатся поочередно 0, 0 и 1. Поэтому символы 〃5 и "4 поступят на выход неисправленными, а ошибочный символ w3 исправится. Проследив дальнейшие три такта, можно убедиться, что символы 〃2, 〃i и w0 исправляться не будут. В результате на выходе схемы окажется слово, в котором будет исправлен только ошибочный символ ①3,
Совершенно аналогично происходит исправление ошибки в любой другой позиции.
Задачи и дополнения
Построить кодеры для двоичных циклических кодов длины 15 с порождающими многочленами
а) ”+Х+1; б) Х8+Х7+ХНХ4+1.
Всякий циклический (п, /г)-код с порождающим многочленом g(x) можно представить в систематической форме следующим образом. Пусть г/ (%)——остаток от деления х1 на порождающий многочлен g (%), т.е 犷=仅(尤)g (%) + %•(%)•
Рассмотрим многочлены.
"一万(元)=外(%)g(%)
при i~m, m+1, . . ., n——1, где m—n——用 —— степень порождающего многочлена g(x)・ Все эти многочлены кодовые, так как они кратны g(x). Кодовый вектор, соответствующий многочлену х^—〃(%), имеет вид:
(一尸沔,—^il» •••> 一ri, m~l^> • • •» 1,,宀 0),
где г/0, гц, 〃,m — i— коэффициенты остатка 々(х), а символ 1 стоит в позиции с номером i.
Мы получили п—m=h векторов, которые, как нетрудно видеть, линейно независимы. Если составить матрицу G, строками которой являются указанные векторы, то она и будет порождающей (ее строки образуют базис кодового подпр остр анства). Если через R обозначить матрицу, строками которой являются коэффициенты многочленов г; (х), то матрица 8 получается приписыванием к матрице — R справа единичной матрицы Е^ порядка й и ее можно условно записать в виде:
G = -R;/・(4)
Отсюда легко следует (ср. §11, задача 10), что в качестве проверочной можно взять матрицу
口。столбцам ^faтpицы Н стоят коэффициенты остатков от деления многочленов х°, R, •・尤“т на g(x).
Имеем:Имеем:犬=(/+#2十])+%2+ j,犬=(/+#2十])+%2+ j,Чтобы проиллюстрировать метод, изложенный в дополнении 2, рассмотрим снова (7,4)-код с порождающим многочленом 1十炉十К.
Имеем:
Имеем:
犬=(/+#2十])+%2+ j,
犬=(/+#2十])+%2+ j,
无4=出+%2+1) (x+l) + x2+%+ 1,
X5- (x3+x2+ 1)(炉+尤+1) + %+1, 尤6=伊+元2+[)(尤3+炉+6 +尤2+尤
Строками порождающей матрицы являются, следовательно, коэффици' енты многочленов:1+ +終+*Строками порождающей матрицы являются, следовательно, коэффици' енты многочленов:1+ +終+*]一卜尤千尤2十 1+¥+Таким образом,/1 0 1 1 0 0 0\“ 1 Ю100\“一[1100010,\0 1 10001/]一卜尤千尤2十 1+¥+Таким образом,/1 0 1 1 0 0 0\“ 1 Ю100\“一[1100010,\0 1 10001/+炉,+炉,+ *+ *+或+或\0\00 0 I 1 1 0\ 100111). 011101/0 0 I 1 1 0\ 100111). 011101/4. Метод, рассмотренный в дополнении 2, можно использовать для построения кодера систематического циклического кода.При кодировании с помощью матрицы (4) кодовое слово получается умножением информационного слова на эту матрицу (см. (6), § 11). В этом случае последние k символов ат, tz^ + 1, . . ., a„_i кодового слова совпадают с информационными символами, а все кодовое слово является линейной комбинацией строк порождающей матрицы (4) с коэффициентами ат, ат + ъ . . а坦一卜 Учитывая, что по строкам матрицы R4. Метод, рассмотренный в дополнении 2, можно использовать для построения кодера систематического циклического кода.При кодировании с помощью матрицы (4) кодовое слово получается умножением информационного слова на эту матрицу (см. (6), § 11). В этом случае последние k символов ат, tz^ + 1, . . ., a„_i кодового слова совпадают с информационными символами, а все кодовое слово является линейной комбинацией строк порождающей матрицы (4) с коэффициентами ат, ат + ъ . . а坦一卜 Учитывая, что по строкам матрицы R
Строками порождающей матрицы являются, следовательно, коэффици' енты многочленов:
1+ +終+*
Строками порождающей матрицы являются, следовательно, коэффици' енты многочленов:
1+ +終+*
]一卜尤千尤2十 1+¥+
Таким образом,
/1 0 1 1 0 0 0\
“ 1 Ю100\
“一[1100010,
\0 1 10001/
]一卜尤千尤2十 1+¥+
Таким образом,
/1 0 1 1 0 0 0\
“ 1 Ю100\
“一[1100010,
\0 1 10001/
+炉,
+炉,
+ *
+ *
+或
+或
\0
\0
0 0 I 1 1 0\ 100111). 011101/
0 0 I 1 1 0\ 100111). 011101/
4. Метод, рассмотренный в дополнении 2, можно использовать для построения кодера систематического циклического кода.
При кодировании с помощью матрицы (4) кодовое слово получается умножением информационного слова на эту матрицу (см. (6), § 11). В этом случае последние k символов ат, tz^ + 1, . . ., a„_i кодового слова совпадают с информационными символами, а все кодовое слово является линейной комбинацией строк порождающей матрицы (4) с коэффициентами ат, ат + ъ . . а坦一卜 Учитывая, что по строкам матрицы R
4. Метод, рассмотренный в дополнении 2, можно использовать для построения кодера систематического циклического кода.
При кодировании с помощью матрицы (4) кодовое слово получается умножением информационного слова на эту матрицу (см. (6), § 11). В этом случае последние k символов ат, tz^ + 1, . . ., a„_i кодового слова совпадают с информационными символами, а все кодовое слово является линейной комбинацией строк порождающей матрицы (4) с коэффициентами ат, ат + ъ . . а坦一卜 Учитывая, что по строкам матрицы R
Ч 1~Ч~ р>^у—>Ч 1~Ч~ р>^у—>ВВKodoSos6 слабоKodoSos6 слабо
Ч 1~Ч~ р>^у—>
Ч 1~Ч~ р>^у—>
В
В
KodoSos
6 слабо
KodoSos
6 слабо
&3%&5%
^НФорпаццоннь/есимволы
Рис. 23.
стоят коэффициенты остатков от деления многочленов М на порождающий многочлен g(x), мы убеждаемся, что величины 4°, а^, . t am-i являются коэффициентами остатка от деления многочлена
на многочлен g(x) (в случае двоичных многочленов знак минус перед скобкой можно опустить).
Следовательно, схемы деления могут быть использованы для нахождения проверочных символов кодовых слов циклического кода в систематической форме и, в конечном итоге, для построения его кодера. На рис. 23 приведена схема кодера двоичного (7, 4)-кода с порождаю^ щим многочленом 1 十%纟十炉,основанная на указанном принципе.
Проследим вкратце работу этой схемы в течение семи тактов. Первые четыре такта переключатели схемы находятся в положении /1, следующие три ——в положении В. В первые четыре такта инфорА^ацион- ные символы поступают (без изменений) на выход всей схемы и на выход схемы деления. В течение этих четырех тактов в последовательных ячейках схемы деления получаются коэффициенты остатка а。,。工,а? от деления многочлена а6%6+^5^5+а4%4+аз;;3 на порождающий многочлен l+^+x3, т. е. проверочные символы (в схеме на рис. 18 на это ушло бы семь тактов, но в данной схеме три такта «экономятся», так как последовательность коэффициентов ав, %, %, & подается не на вход, а сразу на выход схемы деления). В последующие три такта проверочные символы ——сначала а?, затем 〃з затем а。——поступают из схемы деления на выход всей схемы. Таким образом, по истечении семи тактов на выходе всей схемы получаем целиком кодовое слово..
Рекомендуем читателю проследить по тактам работу рассматриваемой схемы для случая。3=0, ^4~^5~се~ ■
17. ГОЛОСОВАНИЕ
Хотя в процедуре принятия решения большинством голосов нет для нас ничего необычного, может все же
показаться неожиданным, что метод голосования используется при декодировании помехоустойчивых кодов. Отчасти мы уже коснулись этого вопроса в § 8, когда рассказывали о коде с повторением,— решение о посланном символе принималось там как раз большинством голосов. Теперь же мы покажем, как применяется голосование в случае произвольного линейного кода.
Обратимся сначала к примеру. Здесь нам поможет неоднократно упоминавшийся ранее (7,3)-код, получающийся из (7,4)-^ода Хемминга добавлением общей проверки на четность. Его проверочная матрица имеет вид; .
/ 0 0 0 1 1 1 ! о 1 1 о о 1 \1 о 1 о 1 о/ 0 0 0 1 1 1 ! о 1 1 о о 1 \1 о 1 о 1 о
/ 0 0 0 1 1 1 ! о 1 1 о о 1 \1 о 1 о 1 о
/ 0 0 0 1 1 1 ! о 1 1 о о 1 \1 о 1 о 1 о
11 о о11 о о
1
1 о о
1
1 о о
Удобнее, однако, рассмотреть эквивалентный циклический код с порождающим многочленом g(x) = (%+l) (х3+х+1) и с проверочной матрицей
0 10 0 0、10100、
1 1 0 1 о г
01101/
Эта матрица получена способом, указанным в дополнении 9 к § 11. В том, что коды с проверочными матрицами Я и /Л действительно эквивалентны, читатель может убедиться самостоятельно. ■ '
Пусть принято некоторое слово а0 а2 а2 竄3 а《а§ аб> содержащее, быть может, ошибочные символы. Для каждого символа а; будем в отдельности решать, верен он или нет, используя те соотношения, которыми этот символ связан с остальными. Начнем с символа а0 и выпишем некоторые содержащие его проверки. Первой строке матрицы Hi отвечает проверочное соотношение %+仪1十%=0, сумме первой, второй и третьей строк ——соотношение aQ+a^+ +а$=6, а сумме первой, второй и четвертой строк — соотношение %+仪2十%=0. Итак, имеем:
a0 = 061 + a3,
% = & + %(1)
a0=出+a修
Если ошибки при передаче отсутствовали, то в принятом слове будет выполняться каждое из соотношений (1)э а правые их части дадут верное значение для а0. Соотношения (1) для символа а0 выбраны с таким расчетом, что всякий другой символ входит в правую часть ровно одной проверки. Поэтому если лишь один из них ошибочен, то только в одном из соотношений (1) будет нарушено равенство. Учитывая это, можно предложить следующее правило для определения верного значения символа а0- если среди значений czi+cts, а4+а5, а2+а6, а0 большинство составляют нули, то полагаем, что нуль и есть верное значение для а0, если же большинство из них ― единицы, то верным значением для а0 считаем единицу. Такое голосование гарантирует верное решение, если принятое слово содержит не более одной ошибки. Возможно и равенство голосов (например, в случае двойной ошибки), и в этом случае приходится довольствоваться ее обнаружением.
Аналогичные проверки могут быть составлены и для других символов. Например, для ах имеем соотношения:
6С1=a2 +a4, % = % + %, % = % +.
также обладающие тем свойством, что каждый символ входит в правую часть не более одного раза. Эти проверки получаются из системы (1) циклическим сдвигом на одну позицию. Последующие циклические сдвиги дают системы подобных проверок для остальных символов.
Анализируя указанным способом каждый символ принятого слова, мы правильно восстановим посланное кодовое слово, если произошло не более одной ошибки, и обна-
ружим любую 区водную ошибку. Тем самым полностью используются корректирующие способности данного кода —— ведь его кодовое расстояние равно 4.
Разобранный нами метод исправления и обнаружения ошибок называют мажоритарным декодированием (т. е. декодированием по принципу большинства). Применим он тогда, когда ——как в нашем примере ——для каждого символа сс; существует система проверок
a/=£°£为现, ⑵
а/ ~^askahi
обладающая тем свойством, что в правую часть каждой проверки входят символы, отличные от а」,и всякий такой символ входит не более чем в одну проверку. Такая система проверок называется ортогональной (или разделенной). Если число проверок, входящих в каждую ортогональную систему, не меньше s, то путем голосования могут быть исправлены любые / ошибок, где %V(s+l)/2・ В самом деле, ошибка в одном символе влияет в силу ортогональности не более чем на одну проверку, следовательно, среди значений символа а」,которые даются всеми соотношениями (2), неправильными могут оказаться не более /, т. е. не более половины значений. Тогда, сравнивая значения правых частей проверок, а также значение самого символа ау, мы по большинству голосов определяем верное значение этого символа. Если же (при нечетном s) f—(s+l)/2, то имеет место равенство голосов, ошибка при этом хотя и обнаруживается, но не исправляется.
Случай, когда число s проверок в каждой ортогональной системе на единицу меньше кодового расстояния d, т. е. когда s=d—1, является в известном смысле идеальным. В этом случае голосование позволяет, как и в рассмотренном примере, полностью реализовать корректирующие свойства кода. Код, для каждого символа которого существует система из (d—1) ортогональных проверок, называется полностью ортогонализуемым.
Чем хорош метод голосования? Прежде всего тем, что его техническая реализация предельно проста (особенно в случае двоичных циклических кодов). Наряду с обычными сумматорами и ячейками памяти схема декодирования дол-
жна содержать мажоритарный элемент (логическую схему, осуществляющую выбор значения az по большинству го- лосов).
Вот как устроена принципиальная схема мажоритарного декодирования для (7,3)-кода, упомянутого выше (рис. 24,办
В этой схеме М ——мажоритарный элемент, осуществляющий голосование, К — переключатель, находящийся в
положении 0 во время приема сообщения и в положении / при его декодировании. Рис. 24,。соответствует моменту, когда сообщение полностью поступило в запоминающий регистр и ключ К переводится в по„чожение 7. Начинается декодирование. На первом его шаге (первый такт) на вход мажоритарного элемента подаются значения а0,(Xi+a3, а2+ + ай, а4+а5. На выходе его появляется символ а;, являющийся итогом голосования. В следующем такте происходит сдвиг сообщения в регистре, а символ а; поступает в по- следнюю ячейку памяти. Этому моменту соответствует рис. 24, 6.
Теперь уже голосование осуществляется по значениям ап 仪*+%,备+嗚,%+%, и в результате получается значение а; следующего символа сообщения. Дальнейшие такты работы схемы совершенно аналогичны. Если произошло не более одной ошибки, то последовательность (а;, а;,・.. ,…&) и есть верное кодовое слово.
Как мы видим, в схеме используется только информация о принятом слове; никакой дополнительной информации не требуется. А это очень важно, потому что именно необходимость хранения большого объема данных служит основным препятствием для применения некоторых методов декодирования (например, синдромного декодирования).
Еще одно немаловажное достоинство голосования по сравнению с другими методами декодирования заключается в том, что этот метод зачастую позволяет исправлять или обнаруживать многие ошибки, кратность которых превышает (d—1)/2.
Задачи и дополнения
Доказать, что код из примера § 8 с проверками на четность по строкам и по столбцам является полностью ортогонализуе- мым, составив для каждого из символов систему из трех ортогональных проверок (например» проверки
a1=a2+a34-Pf> «1—а4Ч-а7+Р4» ©[наб+аб+аз+ар+Вз+Вб+Об+В?
образуют требуемую систему для символа %)*
Проверить, что (7,4)-код Хемминга не является полностью ор* тогонализуемым, показав, что для символа «1 не существует пары орто* тональных проверок.
Будет ли полностью ортогонализуемым расширенный (8,4)-код Хемминга?
Решить те же вопросы, что и в задаче 2, для произвольного двоичного кода Хемминга и его расширенного варианта.
Построить систему ортогональных проверок и мажоритарный декодер для троичного циклического (13,6)-кода с порождающим многочленом
g(*)=(*+2)(/+2炉+2%+2)停+*4+2).
1& МНОГОСТУПЕНЧАТОЕ ГОЛОСОВАНИЕ И КОДЫ РИДА — МАЛЛ ЕРА
Мы расскажем здесь о кодах, для которых найден замечательный алгоритм исправления ошибок, сыгравший важнейшую роль в развитии методов мажоритарного декодирования.'
4 м. И. Аршинов, Л. Е・ Садовская9?
..Проще всего начать с расширенного (8,4)-кода Хемминга. Нетрудно убедиться, что этот код дуален самому себе, т. е. что его проверочная матрица служит для него и порождающей:
G _( о о \0 1G _( о о \0 1О 0 1 1 1 1\
G _( о о \0 1
G _( о о \0 1
110 0 11 / = 0 10 10 1/\“
Этот код не является полностью ортогонализуемым (см. § 17, задача 2). Значит ли это, что голосование для этого кода невозможно? Оказывается, нет.
Идея, которую мы проиллюстрируем на данном примере, состоит в следующем. Если нельзя составить нужной системы ортогональных проверок для каждого символа в отдельности, то, может быть, это удастся сделать для определенных линейных комбинаций этих символов.
Пусть 舒=(ссо, aj, аг, «з* а《,ссй, аб, а7) — произвольное кодовое слово. Оно, как обычно, может быть записано в виде:
期=%&十&毋+&g2十%自。⑴
Выясним, как связаны координаты % вектора w с коэффициентами равенства (1). Заметим, что сумма первых двух координат каждого из векторов %,① и g^ равна 0, тогда как для вектора^ она равна 1. Поэтому сумма соответствующих координат вектора 砂 равна 偽,т. е.”
%=%+%.(2)
Совершенно так же убеждаемся, что верны равенства:
⑶⑶fl3=(Xa~|-Gt3) % = % + %, @8=аб+%.
⑶
⑶
Нетрудно понять, что соотношения (2) и (3) представляют систему ортогональных проверок для коэффициента 〃з. Для коэффициентов & и 〃工 дело обстоит аналогично и ортогональные проверки для них таковы:
a2 = % +a2, 02 = %十%, % = % + %, a2 = % +a7,a2 = % +a2, 02 = %十%, % = % + %, a2 = % +a7,a工=%十%, % = % + % &[ = % + %, 21 = % + %*a工=%十%, % = % + % &[ = % + %, 21 = % + %*(4)(4)
a2 = % +a2, 02 = %十%, % = % + %, a2 = % +a7,
a2 = % +a2, 02 = %十%, % = % + %, a2 = % +a7,
a工=%十%, % = % + % &[ = % + %, 21 = % + %*
a工=%十%, % = % + % &[ = % + %, 21 = % + %*
(4)
(4)
Применяя к полученным проверкам принцип большинства, мы найдем верные значения коэффициентов аз 仅範 а3, если произошло не более одной ошибки. В случае двойной ошибки при определении хотя бы одного из коэффициентов голоса распределятся поровну и ошибка будет только обнаружена.
Предположим, что верные значения коэффициентов。玄 仪2, @з найдены. Тогда еще один этап голосования позволяет определить также и верное значение коэффициента а0. Сделать это совсем несложно. В самом деле, рассмотрим разность
В: случае безошибочной передачи, в силу равенства (1), 5=&ogo, т,е. все координаты вектора ⑦ равны 禽・ Значит, либо все они равны нулю, либо все равны единице. Поэтому в качестве верного значения & выбираем то, которое преобладает среди координат вектора р-
Определив значения коэффициентов а。, аъ 。纟,аз卜 мы без труда восстанавливаем кодовое слово согласно равенству (1).
Пример. Пусть принято слово 01110110, содержащее одиночную ошибку. Для декодирования обращаемся к равенствам (2), (3) и (4), которые в данном случае дают следующие результаты: '
〃『0,
〃2 = L
a8 = 1,
6z2=0,
仰н。.
t^—0,
02= 1,
а§=1,
◎1=1,
电=1,
0产L
По большинству значений находим: а.О;统=办=1: Тогда ^=(01110110)—(00110011)—(01010101)-(00010000),
откуда “0=0. Следовательно,
^-^+^3=(01100110).
'Э^от изящный метод декодирования может быть применен к так называемым кодам Рида :"- Маллера (сокращенно-—PM-коды), которые мы и хотим сейчас рассмотреть.
PM-код первого порядка определяется как код, дуальный к расширенному коду Хемминга, т. е. как код, порождающая матрица которого совпадает с проверочной матрицей расширенного кода Хемминга. Таким образом, расширенному (п, ^)-коду Хемминга (n=2mt k=2m~m—l) отвечает (п, п-к)-код Рида — Маллера. При т=3'о6а кода сов-
п8дают! расширенный (8,4)-код Хемминга дуален самому себе. При т=4 получаем (16,5)-код Рида — Маллера первого порядка с порождающей матрицей
(
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 \ /$\ 0000000011111111\ /gi\ 0000111100001111 )=1gj. 0011001100110011 / \gj 0101010101010101/ \"
Алгоритм декодирования для этого кода практически не отличается от рассмотренного выше алгоритма для (8,4)- кода. Действительно, если
W = aogo + 生g]十。2g2 + a3g3 + a4g4,
то, например,
a4 = a0 + % ~a2+0^ ==% + % = %+01(7 = %+% на1 0 + cе" = h%2 + %3=%4 + %5,
Таким образом, для коэффициента а4 имеем 8 ортогональных проверочных соотношений. Такое же число ортогональных проверок получается и для каждого из коэффициентов @з
Следовательно, если произошло не более трех ошибок, то в первом «туре» голосования удается восстановить верные значения коэффициентов а^ а2, &з,包・ Во втором «туре», действуя совершенно так же, как и в случае (8,4)-кода, получаем верное значение для а0. После этого по найденным значениям коэффициентов целиком восстанавливаем кодовое слово. Итак, (16,5)-код Рида — Маллера исправляет любые ошибки, если они имеются не более чем в трех символах, и обнаруживает ошибки в четырех символах. Можно убедиться, что двух этапов голосования достаточно для любого PM-кода первого порядка.
При построении кодов Рида ——Маллера более высоких порядков используется покомпонентное умножение векторов, определяемое следующим образом: если 砂=(&力 «2,・・・ • • •» aj,胃==(伝,0§з* ・0J, т。
ЦОД— (otip^, Ct2pg,. . . , СС„РЛ)*
Покажем теперь, как по произвольному PM-коду первого порядка строятся PM-коды г-го порядка (г>1). Пусть строками порождающей матрицы PM-кода первого порядка являются векторы go, gj,・・・,gm・ Составим из этих векторов всевозможные произведения, содержащие не более г сомножителей. Добавим эти произведения в качестве допол-
нительных строк к строкам gQi git . . ,,gm. Полученную в результате матрицу и будем считать порождающей матрицей PM-кода г-го порядка. Например, для PM-кода второго порядка, соответствующего (16,5)-коду Рида — Маллера
первого порядка, эта матрица имеет вид
4 111111111111111
(Го
0000000011111111
G
000011 110000 1111
&
0011001100110011
&
0101010101010101
&
G =
0000000000001 1 1 1
н
g1。m
0000000000110011
曲。圍8
0000000001010101
敏。孰
0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
G。&8
0000010100000101
.00010001000 1 0 001,
1£8。g4丿
Этот код
исправляет любые одиночные
и обнаруживает
двойные ошибки, а мажоритарное декодирование для него может быть осуществлено в три этапа. Если w кодовое сло
во, то
w=/仇+ a这1+..・+&团+ "12g1。g2 +
+ /3的。/ +・…+0眼缜。g"(6)
На первом этапе определяем верные значения коэффициентов 〃卄,для каждого из которых имеем четыре ортогональных проверочных соотношения. Например, для коэффициента &4 они таковы:
&4=%+%+电+%,
034=a4+a5+«6+a7> 能4=% + %+%0 + % "34 =a12 + 043 +%4+ %5・
После определения коэффициентов 〃〃• составляем разность "1 = " ^izSlQ S2'"~■• ' • ^34^30 ^4 = (®^0» ОЬц* • .,0tj6).
Поскольку при безошибочной передаче
办=&go + %纟1 + &毋 + %g3 + a4M,
то проверочные соотношения для определения а^ 〃а, ag, 〃4 (это второй этап голосования) таковы же, как для РМ- кода первого порядка. К примеру,
а, = * + а; = а; + % == a; + a; = а; + * 工 a; + а;=
=a^g +в с&12 + ctigK сс〃 + а".
Наконец, на третьем этапе составляем разность 砂i—〃igi—a2ga—a$g&一a4g& в (a;, a;,…・,%5)
н по большинству значений координат a; определяем значение a0. После завершения третьего этапа кодовое слово восстанавливается по формуле (5).
Подобная процедура декодирования распространяется на PM-коды произвольных порядков; при этом для кода г-го порядка число этапов голосования равно г+1 и для кода длины 2旅 число ортогональных проверок на первом этапе равно W (на каждом последующем этапе число проверок удваивается). Таким образом, может быть исправь лено 2т~г"1—1 ошибок, а 2巾~1 ошибок всегда обнаруживается.
В настоящее время открыто достаточно много кодов, для которых применимы подобные алгоритмы декодирования. Их описание и способы построения ортогональных проверок базируются на различных комбинаторных и геометрических конструкциях.
Задачи и дополнения
Для (8,4)-кода Рида ——Маллера первого порядка исправить или обнаружить ошибки в следующих словах:
11010110, 11100001.
Анализируя соотношения (2), (3), (4), найти число обнаруживаемых и число необнаруживаемых тройных ошибок в (8,4)-коде Рида— Маллера. Имеются ли исправимые тройное ошибки? Решить те же вопросы для ошибок в четырех символах.“
Для (16,5)-кода Рида — Маллера первого порядка исправить или обнаружить ошибки в следующих словах:
1110010100100111, 1010010110101010, 1001001001001001.
Считая, что используется PM-код второго порядка длины 16, исправить или обнаружить ошибки в тех же словах, что и в задаче 3. Чем объясняются расхождения с результатами задачи 3?
Доказать, что код Рида ——Маллера r-го порядка длины п=2ст имеет 1+С^+.. .+С^ информационных символов, 1+С^+- . .+Cm~r-i проверочных символов, а его кодовое расстояние равно 2^~г.
ЛАТИНСКИЕ КВАДРАТЫ И КОДЫ
Латинские квадраты долгое время были известны лишь математикам и любителям головоломок и, в основном, благодаря одной знаменитой задаче Л. Эйлера ). В 1782 г. Эйлер предложил следующую проблему.
Среди 36 офицеров находится по шесть офицеров шести различных званий из шести полков. Можно ли построить этих офицеров в каре так, чтобы в каждой колонне и каждой шеренге встречались офицеры всех званий и всех полков?
Лишь в 1901 г. удалось доказать, что это невозможно. Однако связанные с задачей Эйлера латинские квадраты не потеряли интереса, так как вскоре обнаружилось, что они имеют многообразные практические применения. А совсем недавно (конец шестидесятых годов) они были применены и в теории кодирования. Получающиеся на их основе коды, хотя и далеки по своим параметрам от оптимальных, но зато допускают простые алгоритмы декодирования (голосование в один шаг).
Будем рассматривать квадратные матрицы порядка п, элементы которых ——числа 1, 2, . . ., п. Такую матрицу называют латинским квадратом, если всякий элемент входит ровно один раз в каждую строку и в каждый столбец.
Следующие матрицы являются примерами латинских квадратов (соответственно порядка 2, 3 и 4):
Существенным при построении кодов является свойство ортогональности матриц, которое определяется следующим образом.
Две матрицы порядка м называются ортогональными (не путать с ортогональностью векторов!), если при наложении любой из них на другую мы получим множество всех упорядоченных пар (г, /), lNj《M・
Вот пример ортогональных латинских квадратов порядка 3:
/ 1 2 3\/1 2 3\
(231),(312),
\3 1 2/\2 3 1/
Ортогональны
4 =(
также и следующие две
Т ! 1…八/1 2
2 2 2 …2 \/12
3 3 3 ... 3 I Bn] t 2
матрицы:
3 • • * л \
3…п \
3…比j,
\
м п пп/\1 2
3 ..
.п/
⑴
Легко видеть, что матрица порядка и является латинским квадратом тогда и только тогда, когда она ортогональна обеим матрицам Л и В.
При построении кодов используются матрицы (1) и им ортогональные. Способ построения обеспечивает нужное для декодирования число ортогональных проверок; состоит этот способ в следующем.
Для матрицы С указанного типа и для любого ее элемента k определим двоичную матрицу СА, которая получается из С заменой всех элементов, равных 々,единицами, а всех остальных элементов — нулями. Таким образом, по матрице С порядка п строятся матрицы С^ С爲..С„, Каждой из этих матриц Ck сопоставим вектор 空尼,первые и координат которого являются последовательными элементами первой строки матрицы С^, следующие п координат ——элементами второй строки и т. д. Иными словами, и^ координат вектора о尼——это все элементы матрицы С&, «вытянутой» в одну общую строку. Образуем, наконец, матрицу С порядка nxn2t строками которой являются векторы и用:
Например, для матрицы
/12 3、
С= 23 1、3 1 2/
имеем:
/1 О 0\/0 1 0\/0 о 1\
\0 1 0/\0 0 1/\1 о о/
^=(100001010), у2=(010100001), 03=(001010100)
/1 0 О О о 1 0 1 0\
© = ( 0 1 0 1 0 0 0 0 1 ).
\0 О 1 О 1 0 1 о о/
Пусть теперь А и В — матрицы (1), a Dit Dit. . ,tDr — попарно ортогональные латинские квадраты. Образуем из них указанным выше способом матрицы %,瓦 力[,万$,... ...,Drt а затем построим матрицу Я, которую можно условно представить в виде:
н=н=8bi瓦
н=
н=
(матрицы Л, BfDitDit . . MDr подписываются одна под другой и к получившейся матрице приписывается справа единичная матрица Ет соответствующего порядка т).
Матрицу Н будем считать проверочной матрицей кода, построенного с помощью латинских квадратов. Число строк этой матрицы, как вытекает из построения, равно (尸+2)м, а число столбцов составляет п^+(г+2)п. Кодовое расстояние полученного кода, как мы увидим, будет не меньше г+3.
В качестве примера рассмотрим код, построенный с помощью двух ортогональных латинских квадратов порядка 3;
В этом случае
4=(2 2\3 3 3/4=(2 2\3 3 3/8=d 2 Г),\1 2 3/8=d 2 Г),\1 2 3/
4=(2 2
\3 3 3/
4=(2 2
\3 3 3/
8=d 2 Г),\1 2 3/
8=d 2 Г),\1 2 3/
/I 1 1 О 0 0 0 0 0\ A=:(oooi 1 1000),\0 0 0 0 0 0 1 ( I //I 1 1 О 0 0 0 0 0\ A=:(oooi 1 1000),\0 0 0 0 0 0 1 ( I //1 0 О 1 О 0 1 0 0\ 3=( 0 1 0 0 1 0 0 1 0 ), \0 0 1 О 0 1 0 0 1 //1 0 О 1 О 0 1 0 0\ 3=( 0 1 0 0 1 0 0 1 0 ), \0 0 1 О 0 1 0 0 1 /
/I 1 1 О 0 0 0 0 0\ A=:(oooi 1 1000),
\0 0 0 0 0 0 1 ( I /
/I 1 1 О 0 0 0 0 0\ A=:(oooi 1 1000),
\0 0 0 0 0 0 1 ( I /
/1 0 О 1 О 0 1 0 0\ 3=( 0 1 0 0 1 0 0 1 0 ), \0 0 1 О 0 1 0 0 1 /
/1 0 О 1 О 0 1 0 0\ 3=( 0 1 0 0 1 0 0 1 0 ), \0 0 1 О 0 1 0 0 1 /
/1 О О 0 0 1 0 1 0\ 0^(010100001], \0 0 1 О ГО 1 о о//1 О О 0 0 1 0 1 0\ 0^(010100001], \0 0 1 О ГО 1 о о//1 О О О 1 О О 0 1\ Оа^(010001 100), \0 0 1 1 0 0 0 1 0//1 О О О 1 О О 0 1\ Оа^(010001 100), \0 0 1 1 0 0 0 1 0/
/1 О О 0 0 1 0 1 0\ 0^(010100001], \0 0 1 О ГО 1 о о/
/1 О О 0 0 1 0 1 0\ 0^(010100001], \0 0 1 О ГО 1 о о/
/1 О О О 1 О О 0 1\ Оа^(010001 100), \0 0 1 1 0 0 0 1 0/
/1 О О О 1 О О 0 1\ Оа^(010001 100), \0 0 1 1 0 0 0 1 0/
Наконец, проверочная матрицаНаконец, проверочная матрицаискомого кода такова:искомого кода такова:1}100000000011100000000011110010010001001001000100100110000[01001010000100г0]0100100010001010001100.001I000101}100000000011100000000011110010010001001001000100100110000[01001010000100г0]0100100010001010001100.001I00010I11I11I1I1оооо1111111/1/Легко видеть,Легко видеть,для каждого из 9 информационнейдля каждого из 9 информационнейчточто
Наконец, проверочная матрица
Наконец, проверочная матрица
искомого кода такова:
искомого кода такова:
1
}
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
1
0
0
1
0
0
0
1
0
0
1
0
0
1
0
0
0
1
0
0
1
0
0
1
1
0
0
0
0
[
0
1
0
0
1
0
1
0
0
0
0
1
0
0
г
0
]
0
1
0
0
1
0
0
0
1
0
0
0
1
0
1
0
0
0
1
1
0
0
.0
0
1
I
0
0
0
1
0
1
}
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
1
0
0
1
0
0
0
1
0
0
1
0
0
1
0
0
0
1
0
0
1
0
0
1
1
0
0
0
0
[
0
1
0
0
1
0
1
0
0
0
0
1
0
0
г
0
]
0
1
0
0
1
0
0
0
1
0
0
0
1
0
1
0
0
0
1
1
0
0
.0
0
1
I
0
0
0
1
0
I
1
1
I
1
1
I
1
I
1
о
о
о
о
1
1
1
1
1
1
1/
1/
Легко видеть,
Легко видеть,
для каждого из 9 информационней
для каждого из 9 информационней
что
что
строки матрицы Н дают следующие проверки для первого символа а0:
%=%+% 十 % &,а0=а6+а7+а16>a 产 &+%+%8.
Ортогональность этих соотношений, как можно убедиться, как раз и объясняется свойством ортогональности исходных матриц. При этом число таких соотношений для каждого символа всегда равно числу матриц, используемых для построения, т, е. г+2. А значит, кодовое расстояние не может быть меньше, чем『+3; в нашем примере оно не меньше пяти.
На рис. 25 мы приводим часть декодирующей схемы, предназначенную для декодирования символа а@ (буквой М, как и раньше, обозначен мажоритарный элемент).
МАТРИЦЫ АДАМАРА И КОДИРОВАНИЕ
Важную роль в алгебре и комбинаторике играют матрицы Адамара, которые впервые были введены в математический обиход в конце прошлого века *). Сравнительно недавно (в 1960 г.) было замечено, что эти матрицы могут быть использованы для построения кодов с большим кодовым расстоянием (d》愕]).
Квадратная матрица Н порядка 九 с элементами ±1 называется матрицей Адамара, если выполняется условие
НН^пЕп.
Вот несколько примеров матриц Адамара:
⑴,п= 1/11111I11⑴,п= 1/11111I1111 1'—1 1 —11 Т -1—i —11—1 —1 —1 ♦1 —1 1-1 1 11 i —I,11 1'—1 1 —11 Т -1—i —11—1 —1 —1 ♦1 —1 1-1 1 11 i —I,Рассмотрим произвольную матрицу АдамараРассмотрим произвольную матрицу Адамара
⑴,
п= 1
/1
1
1
1
1
I
1
1
⑴,
п= 1
/1
1
1
1
1
I
1
1
11 1'
—1 1 —1
1 Т -1
—i —11
—1 —1 —1 ♦
1 —1 1
-1 1 1
1 i —I,
11 1'
—1 1 —1
1 Т -1
—i —11
—1 —1 —1 ♦
1 —1 1
-1 1 1
1 i —I,
Рассмотрим произвольную матрицу Адамара
Рассмотрим произвольную матрицу Адамара
Из определения следует, что для любой пары строк с номерами f и / «тЧ) верно равенство:
hiihJ1 + hi2h/i+ ... +hinhj.n = Q.(1)
_ *) Жак Адамар (1865—1963) — один из крупнейших французских математиков конца XIX и первой половины XX века, автор ряда основополагающих работ в области теории чисел, алгебры и матема- гического анализа.
Таким образом, различные строки матрицы Адамара попарно ортогональны. Далее, число слагаемых в (1), равных + 1, должно совпадать с числом слагаемых, равных —1. Следовательно, п четно и любые две строки совпадают ровно в п/2 позициях и различаются в остальных.
Пусть теперь Л — двоичная матрица, получающаяся из матрицы Н заменой элемента +1 на 0 ——1 на 1. Множество векторов-строк матрицы Л образует тогда код с расстоянием Хемминга между любыми кодовыми словами, равным п/2. Так, из матрицы Адамара порядка 8 получаем матрицу Л, задающую код длины 8 с кодовым расстоянием 4:
(0 0 0 0 0 0 0 0、
0 10 10 10 1 00110011 0 1100110⑵
门-0 0 0 0 1 1 1 1 *(/丿
0 10 110 10
0 0 1 1 0 0 1 1
о 1 1 о 1 о о L
Не меняя кодового расстояния, можно уменьшить длину кода, если отбросить первый (нулевой) символ каждого слова.
Указанным образом из всякой матрицы Адамара порядка п можно получить двоичный код Адамара типа (几——1, п, л/2) (п——1 ——длина кодового слова, п ——число слов кода, л/2 — кодовое расстояние). Это, как правило, код, не являющийся линейным,
С матрицей Л связаны еще два кода, которые тоже называют кодами Адамара.
Первый HjHhx получается так. Перейдем от матрицы А к матрице 4, заменив все элементы матрицы А их дополнениями (т. е. заменив единицы нулями, а нули — единицами). Тогда строки матриц Л и Л в совокупности образуют код типа (и, 2п, п/2), что легко проверяется с помощью равенства (1).
Другой код Адамара получается из предыдущего отбрасыванием первого символа в каждом кодовом слове. Это будет код типа (也——1, 2n, ~——I)・
Например, из матрицы (2) можно получить таким способом коды Адамара типов (8,16, 4) и (7, 16, 3).
Коды Адамара, как видно из их определения, обладают интересной особенностью: расстояние между любыми двумя кодовыми словами одинаково и совпадает поэтому с кодо-
вым расстоянием. Подобные коды называют эквидистантными, и в некоторых случаях их использование дает особые преимущества.
Коды Адамара, обладая большим кодовым расстоянием, позволяют соответственно исправить и большое количество ошибок (первые два из них исправляют ошибки примерно в четверти позиций кодового слова). Достигается это, конечно, ценой высокой избыточности.
Для построения и реализации кода Адамара той или иной длины необходимо построить сначала матрицу Адамара соответствующего порядка. Надо сказать, что такое построение является совсем нелегким делом, и этому вопросу посвящен внушительный раздел современной комбинаторики. Некоторые методы построения будут рассмотрены ниже в разделе «Задачи и дополнения» (см. также [4]).
С матрицами Адамара связан ряд нерешенных проблем, одна из которых состоит в следующем. Мы уже видели, что порядок п матрицы Адамара при 九》3 может быть лишь четным. Более того, нетрудно доказать, что при п^4 порядок обязан делиться на 4 (см. дополнение 3). До настоящего времени остается открытым вопрос: для любого ли % кратного 4, существует матрица Адамара порядка п? Неизвестно, в частности, существует ли матрица Адамара порядка 268 (это наименьший порядок, кратный 4, для которого матрица Адамара еще не построена).
Задачи и дополнения
Укажем наиболее простой способ построения матриц Адамара сколь угодно больших порядков. Пусть Z7n— матрица Адамара порядка п и —Нп—матрица с противоположными элементами. Составим из них матрицу порядка 2л следующим образом:
Именно таким образом получались одна из другой матрицы порядков 1, 2, 4, 8, приведенные в начале этого параграфа.
Доказать, что матрица Н2п является матрицей Адамара^
Следующие две операции преобразуют матрицу Адамара снова в матрицу Адамара:
перестановка строк (или столбцов);
умножение строки (или столбца) на —1.
С помощью этих операций любую матрицу Адамара можно преобразовать в так называемую нормализованную матрицу Адамара, у которой первая строка и первый столбец состоят из одних единиц*
Докажем, что если Н — матрица Адамара порядка п>2, то п кратно 4.
Действительно, можно считать матрицу Н нормализованной мат- з强 Адамара. Переставляя ее столбцы, всегда можно добиться/ )ы первые три строки матрицы имели вид:
11.,111• »•11111”》・1
11—1—1…,—1—I—1 .• •—I
1 1…—1—1一111.,,1—1一1—1
Получается четыре типа столбцов. Пусть 厶 /,囱,/ означают соответственно число столбцов первого, второго, третьего и четвертого типов. Свойство ортогональности строк влечет тогда также равенства:
f十/-1=0,
i—/+ 々一/=0,
j—j一论+/=0.
Кроме того»
i+j+k+l=n.
Из этих равенств получаем $=/ = 々 = 2 =彳,откуда и следует наше утверждение.
Изложим еще один метод построения матрицы Адамара ——метод Пэли. Рассмотрим поле Тр вычетов по модулю р, где р — простое число. Всякий элемент %戸,являющийся квадратом какого-либо элемента того же поля, называется квадратичным, вычетом, всякий другой квадратичным невычетом. Определим на Z/? следующую функцию ^(0, называемую символом Лежандра *):
0, если 1 = 0;
X(0~1,если I—квадратичный вычет;
—1, если г—квадратичный невычет.
Исходя из этого определения, можно доказать, что для всякого с卢0 выполняется равенство
X (D%"+2) + y ⑵ X 泛+B十…+%"二 D*(^1 + 不=一 L (3)
Рассмотрим теперь квадратную матрицу Q порядка р, элементы которой q(j (/, /=lf 2, , . ., р) определяются следующим образом:
力7 = %(戸一瓦
Пусть Е —— единичная матрица порядка р, a J —— квадратная матрица того же порядка, все элементы которой равны 1. Тогда, пользуясь (3), можно доказать равенства
QQT="E—J, Q«/ = JQ=O.(4)
Пусть теперь р=4也——1. В этом случае матрица
111 1 ...11 1 ...1Н =Н =Q-E :Q-E :
1
1
1 1 ...1
1 1 ...1
Н =
Н =
Q-E :
Q-E :
1
является матрицей Адамара порядка 〃十 1. Действительно, бычисляя произведение ННт , получаем:
〃"Т =〃"Т =J + (Q-£) (QT-E)J + (Q-£) (QT-E)О ... ОО ... О
〃"Т =
〃"Т =
J + (Q-£) (QT-E)
J + (Q-£) (QT-E)
О ... О
О ... О
Далее, как нетрудно проверить, матрица Q порядка р=4也一1 совпадает I с матрицей —QT . Отсюда с учетом (4) имеем:‘
丿十(Q-E)(Q'-E) = J + QQT-Q-QT+E=
=J + рЕ—J 一 Q + Q + E=(p+1)E・
Таким образом, Я//т~(р+1)£.
В качестве примера построим матрицу Адамара порядка 8, При этом р=7. Функция %«) задается следующей таблицей:
j
0 1 23 456
х(0
011—11—1—1
Матрицы Q н 少 имеют тогда вид:
0
1 1—1 1 —1 一"
—1
011 —1 IT
—1
— 1011—11
Q =
1
—1—1011—1
—1
1—1—1 о I 1
1
—11 —1101
1
1—1 1—1 一1 oj
/1
n
1
—1
11—11 —1 —
1
-1
—111 —11 —
1
一1
1
—1—1—1 1 1 -
1
—1
1 —1 —1 —1 i
1
1
一11 -1 —1 —1
〔1
]
1 —1 I —1 -1 -
Построить методом Пэли матрицу Адамара порядка 12 и найти соответствующее коды Адамара,
2L ЗАДАЧА OB ОЖЕРЕЛЬЯХ, ФУНКЦИЯ МЁБИУСА И СИНХРОНИЗИРУЕМЫЕ КОДЫ
Некоторые вопросы теории кодирования связаны с известной комбинаторной задачей, называемой «задачей об ожерельях». Эту задачу можно сформулировать следующим образом.
Пусть ожерелье состоит из бусинок нескольких цветов. Спрашивается, сколько существует различных ожерелий, если задано число бусинок каждого цвета.
Расположим 篦 бусинок по окружности, указав для каждой бусинки номер ее цвета. Если обойти эту
окружность в определенном направлении, начав с некоторой бусинки, то ожерелью
из 冷 бусинок будет сопоставлено слово (图 а2. • аи), где а( есть номер цвета Z-й бусинки. Но обход можно начать с любой бусинки, поэтому любому ожерелью соответствует и слов, получаемых одно из другого циклическими сдвигами. Например, для ожерелья, представленного на рисунке, получаем следующие слова:
12213, 31221, 13122, 21312, 22131.
Вообще говоря, среди п слов, сопоставленных ожерелью, могут быть и одинаковые. Нас, однако, будут интересовать не все ожерелья, а только такие, которые нельзя составить из, двух или более одинаковых «кусков». Таким ожерельям отвечают слова, которые нельзя составить из нескольких одинаковых слов меньшей длины. Будем называть подобные слова основными. Например, слова 11, 100100100 не являются основными, а слово 1011 —основное. Ясно, что каждому «несоставному» ожерелью отвечает п различных основных слов.
Чтобы указать удобную формулу для числа основных слов, нам потребуется так называемая функция Мёбиуса *),
определяемая следующим образом:
<1 , если и= 1;
I (——1)Л, если п ——произведение 育 различных N (九)=)простых чисел;
[0 в остальных случаях.
Обозначим через Рп(т) общее число основных слов длины п алфавита из m символов. Тогда, как можно доказать, Р〃(他)=出(&)m拉自+卩(厶)团门/応+ .…+"⑷小",(]) где di, d2,. . ,, dk——все различные делители числа п.
Формула (1) позволяет найти число интересующих нас ожерелий, которое, очевидно, равно Рп(т)/п.
Выясним теперь, какое отношение имеет задача об ожерельях к проблемам кодирования. Дело в том, что при передаче закодированных сообщений должна соблюдаться определенная синхронность работы на передающей и приемной сторонах канала связи, которая обеспечивается дополнительными устройствами — тактовыми генераторами. При сбоях этих генераторов происходит нарушение синхронизации, и в качестве начального символа кодового слова воспринимается символ, который начальным не является. Отсюда актуальность задачи построения кодов, способных восстанавливать синхронизацию. Один из возможных путей ее решения (если отвлечься от исправления ошибок в символах) состоит в следующем. Будем рассматривать множество n-буквенных кодовых слов, удовлетворяющее такому ограничению: если (&】а2. . лп) и (6г Ь^..・匕几)——кодовые слова (не обязательно различные), то никакое из «перекрытий» между ними
(&〃з …(能• ' •。切也2), * • •» (а/i * * •1)
не является кодовым словом. Коды с этим свойством называют синхронизируемыми, и они, как легко понять, отвечают поставленной цели.
Как и обычно, платой за усовершенствование кода является уменьшение числа кодовых слов и, как обычно, возникает вопрос, насколько велика эта плата. Для ответа на этот вопрос как раз и можно использовать решение задачи об ожерельях. В самом деле, если а==@ & 為..q) — кодовое слово синхронизируемого кода, то кодовым словом не может быть никакой его циклический сдвиг, так как он является перекрытием для пары (а, а). Кроме того, по той же причине всякое кодовое слово должно быть основным.
113113§ М. ц. Аршинов, Л. Е. Садовский
113
113
Поэтому максимальное число /г-буквенных слов синхронизируемого кода, использующего алфавит из т символов, не превосходит числа несоставных ожерелий с 孔 бусинками т различных цветов. Обозначив это число через Wn(m)t имеем, следовательно,
Таким образом, пользуясь (1), получаем такую верхнюю границу для числа «-буквенных кодовых слов синхронизируемого кода:
取" (m) С4^⑷死/"1+…十N (&)加"4);⑵
(здесь di,..・,4々 по-прежнему все различные делители и).
Можно доказать (но это достаточно сложно), что при нечетных п граница (2) действительно достигается, и что это, вообще говоря, не так, если п четно. Относительно простые выкладки показывают, что при больших п сумма в скобках близка к 付,т. е. к общему числу слов длины 孔 в т-буквен- ном алфавите, так что число допустимых слов синхронизируемого кода примерно в п раз меньше общего числа слов длины п.
Задачи и дополнения
Доказать следующее свойство функции Мёбиуса: fA(nm)—ц(п)р, (/и) для любых взаимно простых п и /п.
Функция / называется сумматорной функцией для g, если
/仇) = Xgй|п
(запись d|n означает, что суммирование распространяется на все различные делители числа п).
Показать, что сумматорная функция для функции Мёбиуса равна нулю при н>1 и единице при п=1.
Пусть / — сумматорная функция для g (см. задачу 2). Верна следующая замечательная формула обращения Мёбиуса, лежащая в основе всех приложений функции 卩(孔):
g(〃) = N"(a/d) / (办(3)
din
Действительно,
Z M S/d) / (d) =N 卩(zz/d) 2J g (砂=2 Z N (n/d) g 但).⑷
d\nd\n k\d d\n
В получившейся двойной сумме изменим порядок суммирования. Заметим для этого, что аргумент k функции g 焦)при двойном суммирова-
нии пробегает всевозможные делители числа п, и если й фиксировано, то d пробегает все делители п, которые в свою очередь делятся на k. Поэтому двойную сумму (4) можно переписать в виде:
2 £ g 3) ^(n/d)^^g(k) 2 卩仇/d), k\n k\d\nk\n k\d\n
при этом запись k\d\n обозначает, что d пробегает все делители /г, делящиеся на 瓦 Введем обозначения m=n/d и t—n!k, тогда m пробегает всевозможные делители /ив силу утверждения задачи 2
2 卩(n/rf) = 2fi(m) = Jе&叫=1'
k\d\nm\t l о, если / > 1.
Следовательно,
2 ^(nld)^[ *' если £ = (^-делитель n). k\d\nI 0, если k <n
Обращаясь теперь к выражению (5), мы видим, что в сумме по А имеется лишь одно ненулевое слагаемое, отвечающее значению k—n, и потому
£g®》MS/d) = g®, k\n h\d\n
что равносильно (3).
Назовем числом периодом слова 仪,если а получается сочленением одинаковых слов длины d н не является сочленением одинаковых слов меньшей длины. Пусть Р^(/и) означает общее число слов длины п в алфавите из т символов, имеющих период d.
Убедиться, что
^j pd (加)=加",
и, пользуясь формулой обращения (3), получить оценку (2)$
ЗАКЛЮЧЕНИЕ
Наши рассказы о кодировании подошли к концу. Мы познакомились, конечно, далеко не со всеми задачами этой теории, но в той или иной мере затронули три ее основных направления — кодирование с целью засекречивания сообщений, кодирование с целью сжатия информации, наконец, кодирование с целью исправления и обнаружения ошибок. Нам хотелось дать представление читателю, сколь широки и многообразны связи этой теории с разными разделами математики, и как порой самые абстрактные математические теории могут с успехом применяться для решения практических задач.
Дальнейшее проникновение в проблематику теории кодирования (подробное изучение циклических кодов и их обобщений, знакомство с кодами, исправляющими пакеты ошибок, и специфическими алгоритмами их декодирования и т. д.) требует уже значительно более серьезной математической подготовки. Впрочем, интересующийся читатель может при желании обратиться к литературе, список которой приводится в конце книги.
ПРИЛОЖЕН ИЗ
В школьной математике рассматриваются различные операции над числами. Простейшие из них ——сложение и обратная к нему операция вычитания, и умножение, для которого обратной операцией является деление. Подобные действия приходится производить не только над числами, но и над другими, более сложными объектами. Это можно обнаружить уже и в школьном курсе: на уроках геометрии и физики учат складывать и вычитать векторы, а на уроках алгебры рассматривают операции сложения и умножения многочленов. Однако список таких объектов гораздо обширнее. Мы познакомимся с некоторыми из них, наиболее важными для наших целей.
Сравнения и классы вычетов
Исходным материалом для нас остаклся пока все х;е числа. Два целых числа а и & называют сравнимыми по модулю п (п — натуральное), если их разность а — 6 делится на 几 без остатка Это выражают следующей записью:
ам b (mod 吟⑴
Число п называют модулем сравнения (I). Например, 35=2 (mod II), так как разность 35—2^33 делится на 11; аналогично, 25^—11 (mod 9), так как 25—(—! 1)=36 делится на 9.
Запись а=0 (mod п) означает тогда, что само число о делится на п, т. е. a—k •/:.
Если зафиксировать некоторый модуль сравнения п, то всяко? натуральное число с можно единственным образом представить в виде c=Wz十广,⑵
где 々一 частное от деления на % а г — остаток, совпадающий с одним
*) Понятие сравнимости впервые было введено великим немецким математиком Карлом Фридрихом Гауссом (1777—1855) в его трактате «Арифметические исследования» и является одним из основных понятий теории чисел, ■ '
из ч “сел
О, 1, 2, * . т 〃一!•(3)
Остаток г называют также вычетом числа с по модулю п. Заметим’ ч то запись вида (2), где 0<г<п—Ь допускают не только нaтypaльныei но и любые целые числа. Очевидно, из равенства (2) следует, что се 『r(mod «), т. е. всякое число сравнимо со своим остатком (вычетом) по модулю п. Пусть теперь а и & — два произвольных числа, записанные в виде (2):
(i~ k^r^ii Ь=к2п^гГ2,
Каждый из остатков ^ и 厂纟—это одно из чисел (3), поэтому их разность может делиться на п лишь в одном случае, когда ^=^. Но тогда и разность а ——b=(后一^2)^+ri——厂а может делиться на п тогда и только тогда, когда ^―г2- Отсюда следует, что a^b (mod /г) тогда и только тогда, когда числа аиЬ имеют одинаковые остатки при делении на п.
В теории чисел (см.? например, 1.5]) доказывается ряд свойств сравнений, во многом аналогичных свойствам обычных равенств. Подобно тому, как мы это делаем с равенствами, сравнения по одинаковому модулю можно складывать, перемножать и т. д. (так, перемножив сравнения 17=5 (mod 4) и 7三3 (mod 4), получим, как нетрудно убедить* ся, верное сравнение 119三 15 (mod 4). Вообще, если о】三玩,仪2三台2,то 的十02三% + 62,a102三%匕2"
Значение этих свойств заключается в том, что при рассмотрении вопросов делимости чисел и различных числовых арифметических выражений мы можем входящие в эти выражения числа заменять на другие, сравнимые с ними по данному модулю л; в частности, каждое число может быть заменено своим вычетом. Проиллюстрируем сказанное следующей задачей.
Доказать, что число (1981)^+ (1982)* при любом нечетном натуральном k делится на 3.
Замечаем, что 1981^1 (mod 3), 1982三2 (mod 3), Заменяя в исходном внраженнн числа 1981, 1982 их вычетами по модулю 3, получаем
(1981 产十(1982产曰 1 十2比(mod 3).
Следовательно, левая часть сравнения делится на 3 тогда и только тогда, когда на 3 делится сумма l+2ft. Для степеней двойки имеем: 23=1, 23三2; 2&曰I, 25=2 и т. д. Вообще, применяя индукцию по 月$ убеждаемся, что 2Й=1 при 论 четном и 2走三2 при k нечетном. Таким образом, при нечетном 月
1+2』1+2w0 (mod 3),
е. если А нечетно^ то исходное выражение делится на 3.
В разобранной задаче числа 1981 и 1982 могли быть заменены любыми числами а и Ь, дающими при делении на 3 остатки соответственно 1 и 2. Ни утверждение задачи, ни способ его доказательства от этого не изменились бы. Таким образом, в некоторых вопросах все числа, имеющие один и тот же вычет г по модулю и, и, следовательно, сравнимые между собой по этому модулю, оказываются взаимозаменяемыми. Объединим все их в один класс, обозначаемый г:
г = {с I c^r (mod /?)}.(4)
Иными словами, класс г состоит из всех тех целых чисел, которые записываются в виде (2). Класс, определяемый равенством (4), называют классом вылетов. Каждому вычету 0, 1,2,..., п—1 отвечает свой класс вычетов, так что имеется ровно 九 различных классов
0, 1, 2, > < <, м — 1 •О
Ясно, что эти классы попарно не пересекаются и каждое целое число попадает ровно в один класс.
Мы обнаруживаем, далее, что используя операции сложения и умножения чисел, можно производить аналогичные операции и над классами вычетов. — —
В самом деле, пусть г^ и г2 一 пва класса вычетов. Выберем любые два числа из этих классов: а^г^, &£小 Пусть оказалось, что сумма 仪工+。2 имеет вычет г, а произведение ад — вычет s:
a1十&eаcifl2 Es,
Тогда будем считать, что «сумма» классов q и 用 равна г, а их «произведение» равно s:
"4^2=7,大.Г2=m.
Законность этого определения обосновывается тем, что класс, которому принадлежит сумма а^а^ (соответственно произведение ага^ не зависит от выбора элементов а^ и а2 в классах 广,и г2.
Поясним данное определение на примере, взяв за модуль сравнения число п=2. В этом случае имеем два класса вычетов — 0 и 匸 а операции над ними выглядят так:
0 + 0 = 0; 0+?=Т +Н =1; Т+Т = 0;
0 *0 — 0; 0 • 1 = 1 • 0 = 0; 1 ■ 1 = 1.
Часто, когда это не вызывает путаницы, в обозначениях классов вычетов опускают черту, записывая их как обычные натуральные числа. В основном тексте книги это делается без специальных оговорок. Выпишем, например, таблицу сложения и умножения классов по
модулю 4 в этих упрощенных обозначениях:
•012300000]01232020230321•012300000]01232020230321
•
0
1
2
3
0
0
0
0
0
]
0
1
2
3
2
0
2
0
2
3
0
3
2
1
•
0
1
2
3
0
0
0
0
0
]
0
1
2
3
2
0
2
0
2
3
0
3
2
1
Эти таблицы можно понимать деляют две операции на множестве во модулю 4.Эти таблицы можно понимать деляют две операции на множестве во модулю 4.н буквально, считая^ что они опре- {О, 1^ 2, 3} — сложение и умножениэн буквально, считая^ что они опре- {О, 1^ 2, 3} — сложение и умножениэ
Эти таблицы можно понимать деляют две операции на множестве во модулю 4.
Эти таблицы можно понимать деляют две операции на множестве во модулю 4.
н буквально, считая^ что они опре- {О, 1^ 2, 3} — сложение и умножениэ
н буквально, считая^ что они опре- {О, 1^ 2, 3} — сложение и умножениэ
Группы
Прежде чем дать определение группы, рассмотрим один еажный пример.
Будем исходить из понятия взаимно однозначного отображения множества на себя. В случае конечного множества такое отображение называют обычно подстановкой. Пусть множество 附 состоит из чисел 1, 2, 3: М={1, 2, 3). Чтобы задать какую-либо подстановку множества 5,достаточно указать для каждого из чисел 1, 2, 3 то число, в которое оно отображается этой подстановкой. Удобнее всего сделать это, использовав таблицу из двух строк,— в первой строке выписываются (в любом порядке) числа 1, 2, 3, а во второй под каждым из них пишется соответствующее ему прв данной подстановке число. Скажем, обе таблицы
С 2 3\/2 3 1、
<2 3 1八(3 1 2丿
задают одну и ту же подстановку: в 3, 3 — в 1. Нетрудно указать все /И; их будет шесть:
число 1 переходит в число 2, 2— различные подстановки множества
% =
5 = (1 2 3 丿,
I 2 3\
2 3“
Определим теперь на множестве 5= {仃力 а2> ■ • •> 仃^} всех подстановок операцию умножения (или композицию} подстановок. Именно, произведением подстановок О/ и оу- будем называть подстановку о&, получающуюся в результате последовательного выполнения сначала подстановки О/, а затем О/ (записывается: 5叮=仃@・ Например,
/1 2 3\ /1 2 3\/1 2 3\
〈3 1 2丿[1 3 2丿=〈2 1 3/
(первая подстановка переводит число 1 в число 3, после чего вторая подстановка переводит число 2 в число 3, так что в результате последовательного выполнения подстановок число 1 перейдет в число 2 и т, д.). Читатель может проверить, что
/12 3(13 2/12 3(13 21 2 3\/1 2 3、3 1 2丿=<3 2 1 丿,1 2 3\/1 2 3、3 1 2丿=<3 2 1 丿,
/12 3
(13 2
/12 3
(13 2
1 2 3\/1 2 3、
3 1 2丿=<3 2 1 丿,
1 2 3\/1 2 3、
3 1 2丿=<3 2 1 丿,
и тем самым убедиться, что произведение двух подстановок зависит, вообще говоря, от порядка сомножителей.
Множество S с определенной выше операцией умножения называют группой подстансвок множества М.
Операция умножения на S обладает следующими свойствами. Во-первых, эта операция ассоциативна: для любых о;, oyt G&
9歩丿)Ok = ^i (^j^k)*
Вс-вторых, тождественная подстановка
переводящая каждый элемент в себя, играет роль единицы в обычном умножении, а именно, для любой подстановки о;
Накснсн, вместе с каждой подстановкой о/ множество S содержит обратную ей подстановку О/, которая переводит число а в число Ъ тогда и только тогда, когда и/ переводит число Ь в число а. При этом, понятно, каждое из произведений 070/ и оуо/ будет тождественной подстановкой:
' О jO у = 0/6’ = °1・
Эти три свойства сохранятся, если распространить определение умножения подстановок множества {1, 2, 3} на случай подстановок любого конечного множества,.
Более того, выяснилось, что имеются самые разнообразные системы объектов с операцией, обладающей указанными свойствами.
' 121
Это привело к следующему (общему) определению группы )・ , Множество Gi на котором определено умножение элементов^ называется группой, если выполняются три аксиомы:
Умножение ассоциативно: для любых элементов а, Ь^ с из G
。(历)=(ab)ct
В множестве G существует такой единичный элемент % что
еа=ае~а.
Для каждого элемента а множества G существует в G такой обратный элемент 。一匕 что
аа~^ ^а^М — е.
Обращаем внимание читателя на то, что в приведенном определении говорится об умножении элементов и используется связанная с обычным умножением терминология и символика. Этой «мультипликативной» терминологии мы и будем в дальнейшем придерживаться. Однако термин «умножение» нельзя понимать буквально; речь идет о любой операции, удовлетворяющей данным аксиомам. В частности, в ряде случаев естественнее называть операцию сложением и соответственно переформулировать аксиомы группы, пользуясь терминологией, связанной со сложением («аддитивной» терминологией);
Сложение ассоциативно: для любых элементов а, Ь、с из G
3+匕)+с=а+ (匕+。).
Существует такой нулевой элемент 0, что для любого элемента а из G
а+0=0+а=а.
Для каждого элемента а существует такой противоположный элемент (—①,что
a十(一a)= (-0)+。=0.
Группа подстановок, определенная выше, является, как мы видим, одним из примеров группы. Вообще взаимно однозначные преобразования любого множества образуют группу относительно операции умножения преобразований (эти группы сыграли основную роль в формировании общего понятия группы).
Читатель обнаружит далее, что многие примеры групп ему уже известны. Перечислим некоторые из них:
Множество всех ненулевых действительных чисел относительно операции умножения ——«мультипликативная группа действительных чисел» R*.
Множество всех целых чисел относительно операции сложения —«аддитивная группа целых] чисел» 宏.
Множество всех векторов в пространстве относительно операции сложения векторов.
Множество всех многочленов с действительными коэффициентами относительно операции сложения многочленов.
Группы в примерах 1—4 имеют бесконечно много элементов, а группа S ——конечная (6 элементов). Число элементов конечной группы называется ее порядком.
Из аксиом группы можно вывести, что в группе существует только один единичный элемент. Можно доказать также и единственность обратного элемента для всякого элемента группы.
Пример группы подстановок показывает, что умножение в группе может быть некоммутативным. Те группы, для которых операция коммутативна, так и называются коммутативными (примеры 1—4).
Если некоторое подмножество Н группы G само образует группу относительно операции, определенной в G, то подмножество Н называют подгруппой группы G.
Например, подмножества Н[= {о^, о食} и Н?= {仃力 и^ а5} группы S явля.этся подгруппами этой группы. Подмножество четных целых чисел есть подгруппа аддитивной группы % всех целых чисел, а подмножество нечетных чисел не будет подгруппой этой группы (сложение на % не задает операцию на этом подмножестве, так как сумма двух нечетных чисел есть число четное).
Имеет место следующая теорема.
Для того чтобы, подмножество Я являлось подгруппой группы G, необходимо и достаточно^ чтобы выполнялись два условия-.
произведение любых элементов Ai, Л2 из подмножества Н также является элементом из Н 也也 W 以);
если 力€〃,加。〃 обратный к: нему элемент принадлежит
Наиболее просты так называемые циклические подгруппы, которыми обладает любая группа G. Со всяким элементом g£G можно связать «порожденную» им циклическую подгруппу, которая, по существу^ представляет собой наименьшую из подгрупп, содержащую данный элемент. Чтобы определить ее, введем понятие степени элемента g, полагая g°=e и для любого натурального 女
g* = gg …g,gf = (g 百)7
k сомножителей
При таком определении степени выполняются хорошо знакомые
нам правила действий со степенями: для любых целых чисел типgmgn~gm + nf (gmy = g^,
Ясно, что всякая подгруппа, содержащая элемент g, должна содержать люСые его степени. С другой стороны, уже само множество степеней образует, как нетрудно убедиться, группу.
Указанную группу называют циклической подгруппой, порожденной элементом g; ее обозначают символом 鱼),а сам элемент g назы* вается образующим элементом этой группы.
Может случиться, что для некоторого элемента g циклическая подгруппа (g) совпадает со всей группой G, и тогда группа G также называется циклической. Например, аддитивная группа целых чисел есть циклическая группа с образующим элементом 1 (или —1), а ее подгруппа четных чисел — циклическая с образующим элементом 2. Являясь наиболее простыми, циклические группы служат важным инструментом для изучения групп, имеющих более сложное строение.
Между группой и любой ее подгруппой существует определенная связь, которую можно охарактеризовать с помощью понятия смежного класса по подгруппе.
Пусть Н — подгруппа группы G н g£G — произвольный элемент группы G (мы не требуем, чтобы он обязательно принадлежал подгруппе). Множество всевозможных произведений g;“ где h — любой элемент подгруппы Н$ называется смежным классом (точнее, левым смежным кассом) по подгруппе Я, а элемент ^ — его представителем» Обозначая левый смежный класс через gH, имеем, следовательно,
gH={gh[hWH*
Аналогично определяются правые смежные классы Hg. Если группа G — коммутативная, то Hg=gH.
Для смежных классов, безразлично, левых или правых, справедливы два основных факта.
В случае конечной подгруппы 11 число элементов в любом смежном классе одно и то же и совпадает с порядком подгруппы.
Любые два смежных класса g】"и g2H либо совпадают, либо вовсе не имеют общих элементов.
Для иллюстрации понятия смежного класса рассмотрим следующий пример. Пусть % — аддитивная группа целых чисел, а 27 — ее подгруппа, состоящая из чисел, кратных пяти. Тогда можно «выписать»
следующие смежные классы:
〃 +() = {.・・, —10, —5, 0, 5, 10, ...}, "+1=一 9, -4, 1, 6, 11,
// + 2 = {...,-8, —3, 2, 7, 12,・♦•}, 〃十3 = {…,一7, -2, 3, 8, 13,…}, ^ + 4 = {,. ,| - 6, —1, 4, 3, 14, I1,}.
Читатель сразу же заметит, что это классы вычетов б, If 2, 3, 4 по модулю 5( Легко видеть, что всякий смежный класс 日+也 совпадает с одним из этих пяти, и что классы эти не Пересекаются, Непосредственно видно также, что
Z=(H + 0)и (Н+1) и (Я+ 2) и (” + 3) и (Н + 4).
Оказывается, то же самое верно для любой группы: если Hg> Hg2, . . т Hgr— все различные (правые) смежные классы группы G по подгруппе //, то
G = Hg& (J 〃ga U± — U Hg「
В случае, когда G 丛 Н — конечные группы порядков m и п, из Последнего равенства вытекает, что т—n-г, Л!ы пришли к следующей теореме Лагранжа ):
Порядок любой подгруппы конечной группы является делителем порядка группы.
Мы привели здесь простейшие определения и факщ теории групп. За дальнейшими сведениями читатель может обратиться, например, к книгам ⑻? [9].
Кольца и поля
Часто приходится рассматривать множества, на которых определены две операции, например, различные числовые множества, множества многочленов, множества классов вычетов с олреде* ленными на них операциями сложения и умножения. Выделяя йе- которые свойства этих операций, общие для всех указанных множеств* мы приходим к еще одному важному алгебраическому понятию — по* нятию кольца.
Кольцом называется (непустое) множество К, на котором определены две операции (сложение и умножение), обладающие следующими свойствами:
множество К относительно сложения образует коммутативную группу;
умножение ассоциативно: для любых а, Ь, с ^К
(ab)c-a(bc);
сложение и умножение подчиняются дистрибутивному закону: c = ac-^bct c(a-\-b) — ca-\-cb
для любых а, Ь, с£К・
При этом множество К> рассматриваемое лишь относительно операции сложения, называется аддитивной группой кольца.
Приведем некоторые примеры колец.
Множество целых чисел с операциями сложения и умножения — ксльцо целых чисел %•
Множество многочленов от одного неизвестного с действительными коэффициентами с операциями сложения и умножения много- qgg — кольцо многочленов R[X]・
Множество классов вычетов по модулю 汽 с операциями сложения и умножения классов — кольцо классов вычетов %母・
Читателю предлагается проверить выполнимость аксиом кольца в каждом из примеров. Остановимся подробнее на примере 3.
Поскольку операции над классами вычетов сводятся к операциям над числами из этих классов, то свойства ассоциативности и коммутативности этих операций вытекают из аналогичных свойств числового сложения и умножения. То же замечание относится к свойству дистри- бутивнссти. Роль нулевого элемеша при сложении играет класс 0. Противоположным элементом для класса вычетов /"№ является класс п — г, Из определения сложения классов следует, что
Г+(北-r) = 0"
В общем определении кольца не содержится требование коммутативности умножения. В том случае, если умножение обладает этим дополнительным свойством, кольцо называется коммутативным. В примерах 1—3 мы имеем как раз коммутативные кольца, а позднее (в приложении 5) познакомимся с важным примером некоммутативного кольца.
Умножение в кольце, как в в группе^ является ассоциативной операцией, но другие свойства группового умножения в кольце могут на выполняться, Правда, большинство важных колец содержат единичный элемент относительно умножения (скажем, кольца из примеров 1—3), но и такие кольца заведомо содержат элементы, для которых не существует обратного (необратимые элементы). В любом кольце необратим элемент 0 —— нулевой элемент относительно сложения, так как доказывается, что он отличен от единичного и что для любого а£ К имеет место:
0.〃=4,0=0*
Как показывают примеры 1 и 2, необратимыми могут быть к нен\глевые
элементы. Так, в кольце целых чисел обратимы лишь 1 и —1, всякое другое п^О в кольце % не имеет обратного, так как 1/n^Z-
Рассмотрим таблицы умножения ненулевых элементов в кольцах вычетов %4 и %5・
Таблица 19 показывает, что в кольце могут существовать ненулевые элементы, произведение которых равно нулю: в %& 2»2~0. Из этой же таблицы видно, что класс 2 необратим. Вообще, можно доказать, что ненулевые элементы, произведение которых равно нулю (называемые делителями нуля), всегда необратимы. С другой стороны^ таблица 20 показывает, что в кольце Z5 всякий ненулевой элемент обратим. Кольца с этим свойством имеют особое значение. Примем такое определение.
Коммутативное кольцо с единицей, в котором всякий ненулевой элемент обратим, называется полем,
Множество ненулевых элементов поля относительно умножения образует в силу определения поля коммутативную группу, которая называется мультипликативной группой поля.
Простейшими примерами числовых полей являются поле рациональных чисел Q и поле действительных чисел R (разумеется, относительно операций сложения и умножения чисел). Полем, как ясно из предыдущего, является и кольцо ^5* Вообще, можно доказать, что при любом простом 卩(н юлькс в этом случае) кольцо вычетов %戸 является полем. Оно называется полем вычетов по модулю р. В таблице 21 указаны элементы, обратные к ненулевым элементам поля вычетов %?.
Поля вычетов %? являются простейшими примерами конечных полей. В алгебре доказывается, что в произвольном конечном поле число элементов q всегда есть степень простого числа: д=р尊,Справедливо и обратное утверждение: для любого д, являющегося степенью простого числа, существует поле с q элементами.
Таблица 21
12 3 4 5 6
й-1
1 4 5 2 3 6
Конечные поля часто называют полями Галуа (их обозначают GF (^)); важное их свойство, используемое, в частности, и в теории кодирования, состоит в следующем:
Мультипликат йен ая группа поля Галуа является циклической группой порядка g—L
Образующий элемент мультипликативной группы поля Галуа называют примитивным элементом. Так, в поле %7 примитивным элементом является класс вычетов 3. Действительно, его степени
3,事=可矛=& 争=4 35 = 5,方=f исчерпывают все ненулевые элементы поля.
Заметим, что класс 2 не является примитивным элементом в %?, так как среди его степеней нет, например, класса 3. В то же время имеется очень много простых чисел ", для которых элемент 2 примитивен в %尸.Так обстоит дело в полях Zg, Z5,Nii и т. д. В теории чисел известна следующая до сих пор не решенная задача:
Бесконечно ли множество тех простых чисел р, для которых 2 является примитивным элементом в
Интересно, что с ответом на этот вопрос связано решение некоторых проблем теории кодирования.
В заключение определим еще одно важное понятие, связанное с кольцом,— понятие идеала.
Подмножество / кольца К называется его (двусторонним) идеалом, если оно само является кольцом относительно операций на К н если для jiioObjx элементов о^К и Ь£/ оба произведения ab и Ьа принадлежат /.
Так, множество четных чисел есть идеал кольца %, Читатель легко проверит, что н вообще всякое множество чисел; кратных какому-нибудь числу Е является идеалом кольца 惠.
Рекомендуем читателю найти идеалы колец вычтем %修 %屮 %* я кольца многочленов R1X],
Арифметическое я-мерное векторное пространство
Всякая точка на - плоскости при выбранной системе координат задается парой (а, р) своих координат; числа а и ₽ можно понимать также как координаты радиуса-вектора с концом в этой точке. Аналогично, в пространстве тройка (а, р, у) определяет точку или вектор с координатами а, р, у. Именно на этом основывается хорошо известная читателю геометрическая интерпретация систем линейных уравнений с двумя или тремя неизвестными. Так, в случае системы двух линейных уравнений с двумя неизвестными
ахх-\-Ьху = с^。2%,+ b 2y ==e2
каждое из уравнений истолковывается как прямая на плоскости (см. рис, £6), а решение (а, р) — как точка пересечения этих прямых или
как вектор с координатами а и Р (рисунок соответствует случаю, когда система имеет единственное решение).
Аналогично можно поступить с системой линейных уравнений с тремя неизвестными, интерпретируя каждое уравнение как уравнение плоскости в пространстве.
В математике и различных ее приложениях (в частности, в теории кодирования) приходится иметь дело с системами линейных уравнений, содержащих более трех неизвестных. Системой линейных уравнений с п неизвестными Xi,尤2,・・,,尤曜 называется совокупность уравнений вида
0"打十仪12%2 十• • • +fllnxn =方 1,
"ml/+0/w2"2十一,十4m川n=力加,
где а,, и bi— произвольные действительные числа. Число уравнений в системе может быть любым и никак не связано с числом неизвестных. Коэффициенты при неизвестных a(j имеют двойную нумерацию: первый индекс i указывает номер уравнения, второй индекс /——номер неизвестного, при котором стоит данный коэффициент. Всякое решение системы понимается как набор (действительных) значений неизвестных («1,а2, .. ., ссп), обращающих каждое уравнение в верное равенство.
Хотя непосредственное геометрическое истолкование системы (1) при 孔>3 уже невозможно, однако вполне возможно и во многих отношениях удобно распространить на случай произвольного п геометрический язык пространства двух или трех измерений. Этой цели и служат дальнейшие определения.
Всякий упорядоченный набор из п действительных чисел (仪力匕纟,• •・ > ..,а/ называется п-мерным арифметическим вектором, а сами числа «1, се2, . . ., ап — координатами этого вектора.
Для обозначения векторов используется, как правило, жирный шрифт и для вектора а с координатами а】, сс2, . . ., &门 сохраняется обычная форма записи:
。(“I, с(2, • • •>
По аналогии с обычной плоскостью множество всех n-мерных векторов, удовлетворяющих линейному уравнению с 汽 неизвестными, называют гиперплоскостью в n-мерном пространстве. При таком определении множество всех решений системы (1) есть не что иное, как пересечение нескольких гиперплоскостей.
Сложение и умножение n-мерных векторов определяются по тем же правилам, что и для обычных векторов. А именно, если
а = (а】,(^2» • • • > а%),6 = (6i, 02, ♦Bn)⑵
—два n-мерных вектора, то их суммой называется вектор
〃十匕=(% +%,网十阮ап+ Рп)*(3)
ПроиЗЕедением вектора а на число X называется вектор
入а — (XfXj,九а?, • • • I 入《〃).(4)
Множество всех n-мерных арифметических векторов с операциями сложения векторов и умножения вектора на число называется ар〃ф* метическим п-мерным векторным пространством Ln.
Используя введенные операции, можно рассматривать произвольные линейные комбинации нескольких векторов, т. е. выражения вида
^101十九2。2 + ■ • ■ +入目。左,
где 九;—— действительные числа. Например, 'линейная комбинация векторов (2) с коэффициентами 九 н 卩一это вектор
九0 + (I匕 = (Ахz] + [101,入a2+232, 一,,九a體 +卩Bn),
/ В трехмерном пространстве векторов особую роль играет тройка векторов Z, ji k (координатные орты), по которым разлагается любой вектор а:
a^xi+yj+zk,
где х,夕,z — действительные числа (координаты вектора а).
В и-мериом случае такую же роль играет следующая система векторов:
£1=(1, 0, 0, ... , 0),
^? —(0, 1, 0, . . . , 0), 5(0, 0, 1,, 0),(5)
е“=(0, 0, 0,, 1).
Всякий вектор а есть, очевидно, линейная комбинация векторов ^, Q,,…з ^п:
а = %£[ Ч~ с<2^2 + •…十 % 自“(6)
причем коэффициенты ①仪门 совпадают с координатами век
тора а.
Обозначая через 0 вектор, все координаты которого равны нулю (кратко, нулевой вектор)t введем следующее важное определение:
Система векторов а— 。2, .*・,〃& называется линейно зависимой, если существует равная нулевому вектору линейная комбинация
入1% 十入2a2十• • •十九在以左=0,
в которой хотя бы один из коэффициентов Af, Х2,,.” 九用 отличен от нуля. В противном случае система называется линейно независимой.
Так, векторы
«1 = (1, 0t 1, 1), &2 = (1, 2, 1, 1), а3 — (2, 2, 2, 2) линейно зависимы* поскольку
% 十 色一a3 = 0"
Линейная зависимость, как видно из определения, равносильна (при 々^2) тому, что хотя бы один из векторов системы является линейной комбинацией остальных.
Если система состоит из двух векторов &力 а2, то линейная зависимость системы означает, что один из векторов пропорционален другому, скажем, ai=%&2;B трехмерном случае это равносильно коллинеарности векторов Oj и。2・ Точно так же линейная зависимость системы из трех векторов в обычном пространстве означает компланарность этих векторов. Понятие линейной зависимости является, таким образом, естественным обобщением понятий коллинеарности и компланар
ности,
Нетрудно убедиться, что векторы 6力 &,…竹 еп из системы (5) линейно независимы. Следовательно, в п-мер ном пространстве сущей- вуют системы из п линейно независимых векторов. Можно показать» что всякая система из большего числа векторов линейно зависима* Всякая система а±, а&, . . ., ап из п линейно независимых векторов п-мерного пространства Ln называется его базисом.
Любой вектор а пространства Ln раскладывается, и притом единственным образом, по векторам произвольного базиса 仪力 做,一 т ani
a =九工аI十九2a2十* 1 + %也a小
Этот факт легко устанавливается на основании определения базиса. Продолжая аналогию с трехмерным пространством, можно и в 『,・мернсм случае определить скалярное произведение а・Ь векторов, полагая
0,Ь = a161 + a2% 十 .一 +a幫8〃・
При таком определении сохраняются все основные свойстса скалярного произведения трехмерных векторов. Векторы а и & называются ортогональными, если их скалярное произведение равно нулю:
a1历十a202++а〃вМ=0.
В теории линейных кодов используется еще одно важное понятие —— понятие подпространства. Подмножество V пространства Ln называется подпрсстранствсм этого пространства, если
для любых векторов а, Ъ, принадлежащих И, их сумма 。+口 также принадлежит V;
для любого вектора а, принадлежащего V, и для любого действительного числа 九 вектор Ха также принадлежит V.
Например, множество всех линейных комбинаций векторов ез е? из системы =5) будет подпространством пространства Ln.
В линейной алгебре доказывается, что во всяком подпространстве V существует такая линейно независимая система векторов 4工,。2, ■ •. ..口々,что всякий вектор а подпространства является линейной комбинацией этих векторов:
a =储a[+厶2a? + ...+入尼
Указанная система векторов называется базисом подпространства У.
Из определения пространства и подпространства непосредственно следует, что пространство Ln есть коммутативная группа относительно операции сложения векторов, а любое его подпространство V является подгруппой этой группы. В этом смысле можно, например, рассматривать смежные классы пространства Ln по подпространству У.
В заключение подчеркнем, чю если в теории a-мерного арифметического пространства вместо действительных чисел (т. е. элементов
поля действительных чисел) рассматривать элементы произвольного поля 尸,то все определения и факты, приведенные выше, сохранили бы силу.
В теории кодирования важную роль играет случай, когда поле 尸 есть поле вычетов % 戸,которое, как мы знаем, конечно. В этом случае соответствующее n-мерное пространство также конечно н содержит, как нетрудно видеть, рп элементов.
Понятие пространства, как и понятия группы и кольца, допускает также и аксиоматическое определение. За подробностями мы отсылаем читателя к любому курсу линейной алгебры.
Алгебра матриц
Большую роль в линейной алгебре и многих других областях математики играют так называемые матрицы.
Под матрицей понимают прямоугольную таблицу вида
(1)(1)
(1)
(1)
где буквы &// обозначают некоторые элементы. Эти обозначения содержат два индекса, первый из которых указывает номер строки, а второй ——номер столбца, на пересечении которых находится соответствующий элемент. Про матрицу, у которой т строк и п столбцов, говорят, что она имеет порядок тХп. В случае, когда число строк и столбцов одинаково (т= * матрица называется квадратной порядка 几.
Если 也=1, то матрицу можно понимать как вектор, координаты которого записаны в строку; ее тогда так и называют еектор-строка. Точно так же в случае одностолбцовой матрицы пользуются термином вгктор-столбец. Иногда матрицу обозначают одной буквой (Л, В и т. д.), а вместо (1) часто используется сокращенное обозначение (а/у).
Если в исходной матрице Д строки и столбцы поменять ролями, то получим матрицу, называемую транспонированной к Л (обозначается 4т). Матрица, транспонированная к матрице (1), имеет вид:
/ а11 °21 • ■ 'атг\[fl12 a22 …а3 ]\ f ? 1 * У\ 4[〃 a2门• • •0m/
Для матриц с действительными элементами определяются опе
рации сложения матриц и умножения матрицы на число, аналогичные операциям над векторами, а именно, для любых двух матриц порядка
тХп
a加+ bin、°mn4~^mn/a加+ bin、°mn4~^mn/瓦 я\ / °11+ ^и • • •bmJ x^mi 4^ ^mi *»»
a加+ bin、
°mn4~^mn/
a加+ bin、
°mn4~^mn/
'н для любой матрицы и любого числа а
“ / &ii • • • "in、 / ^^-li * • * °〃仇\
Определение этих операций выглядит вполне естественно. Иначе обстоит дело с довольно своеобразной операцией умножения матриц. Рассмотрим сначала умножение квадратных матриц одного порядка /г. Если
< = (&/) и в = @т
—две таких матрицы, то их произведением
С = А'В~ (е/у) называется квадратная матрица порядка ", произвольный элемент которой вычисляется по правилу:
с〃 = &"瓦/+。;2 匕 ”+ • ■ • Л-^itPnj*(2)
Иначе говоря, чтобы получить элемент i-й строки и /-го столбца матрицы С~А *В, нужно взять сумму произведений элементов f-й строки матрицы Л на соответствующие элементы /-го столбца матрицы В. Например,
(;;)(—;А5)・
Умножение матриц некоммугативно, т. е., вообще говоря, А*В^В-А. Так, перемножив две предыдущие матрицы в обратном порядке, получим иную матрицу:
Вместе с тем, нетрудно доказать, что умножение матриц ассоциативно:
(46)9=4(8 С).
Особую роль (псдобную числовой единице) играет так называемая единичная матрица
/1 о0\
\о О1/
Действительно, из формулы (2) следует, чю
ЕА=АЕ~А
для любой квадратной матрицы Л.
Можно убедиться, что множество всех квадратных матриц заданного порядка образует относительно введенных операций сложения и умножения (некоммутативное) кольцо.
Правило умножения матриц можно распространить и на прямоугольные матрицы, не являющиеся квадратными. Формула (2) позволяет это сделать, если число столбцов первой матрицы Д совпадает с числом строк матрицы В. Например,
имеет столько же строк, сколькоимеет столько же строк, сколькоПри этом получающаяся матрица
имеет столько же строк, сколько
имеет столько же строк, сколько
первый сомножитель, и столько же столбцов, сколько второй. Пользуясь операциями над матрицами, мы получаем возможность записы
кранной матричной форме.кранной матричной форме.вать произвольные системы уравнений в Действительно, пусть матрица
кранной матричной форме.
кранной матричной форме.
/ Й11 g12 • • •/ Й11 g12 • • •«2.«2.
/ Й11 g12 • • •
/ Й11 g12 • • •
«2.
«2.
составлена из коэффициентов при неизвестных системы (1) приложения 4 (в этом случае она называется матрицей системы). Рассмотрим векторы- столбцы неизвестных и свободных членов, обозначая их соответственно через х и й:
Тогда произведение Ах есть матрица с m строками и одним столбцом, т, е. вектор-столбец, элементы которого вычисляются согласно формуле (2). Таким образом,
АхАха11х1 + 的2尤2十 * • • + а1пкпa21A + 022也 + …• + а2пхп
Ах
Ах
0s1%1 + a力2%2 + , • ' ~^атпХn
Каждое из уравнений системы (1) означает равенство соответствующих координат вектора Ах и вектора &, и вся система в целом означает тогда равенство
4%=Ь.
Полученная краткая запись и есть матричная форма системы линей- кых уравнений. Подобная матричная запись встречается во множестве других ситуаций, и она широко используется в математической! физи* ческой и технической литературе.
Все сказанное о матрицах с действительными элементами в равной мере относится к матрицам с элементами из произвольного поля F* Так, в теории кодирования приходится рассматривать матрицы, составленные из элементов конечного поля. Естественно, что при оперировании с такими матрицами их элементы складываются и умножаются в соответствии с «арифметикой» поля Г. Вот, к примеру, как перемножаются две матрицы с элементами из Z?:
Задачи и дополнения
Покажите, что преобразование, обратнее параллельному перенесу в направлении вектора а, есть параллельный перенос в противоположном направлений (на вектор —а).
Пусть /—симметрия плоскости относительно оси Ох, ^—поворот плоскости на л/2 против часовой стрелки. Проверьте, что пресб- разование fg есть симметрия относительно биссектрисы 1-го и 3-го координатных углов. Найдите также преобразование g/ и убедитесь, что /g 力 gf.
Операция произведения преобразований обладает свойством ассоциативности, это значит, что для любой тройки преобразований /2> /з выполняется равенство
(/1/2)/з = Л 仇/з),
Справедливость соотношения вытекает из того, что обе его части есть результат последовательного выполнения трех преобразований сначала /15 затем %,затем /3.
Какие из следующих множеств образуют группу преобразований плоскости:
力6)小D5力6)小D5множество всех параллельных переносов;
力6)小D5
力6)小D5
множество всех вращений относительно фиксированного центра; множество всех вращений плоскости;
множество всевозможных осевых симметрий.
Напомним, что совокупность всех подстановок «-элементного
множества образует группу. Она называется симглетрическон группой степени м и обозначается 5及,Найдите все подстановки из S3, не меняющие значения функций
а)中1 =勺&十尤2尤8 +%/3;
6) 6 =(/一Х2)(修一尤3)(x2 - *3).
Проверьте прямым вычислением, что найденные в каждом из случаев подстановки образуют группы.
Транспозицией называется подстановка, переставляющая какие-либо два символа, а все прочие оставляющая на месте. Например, из двух подстановок
/1 2 3 4\(1234、
[1324丿,〈2341丿
первая является транспозицией, вторая —нет, но она может быть представлена в виде произведения транспозиций следующим образом:
12 34\/123 4\ /12 3 4\ /1 234、
23 41丿=〈213 4八32 1 4丿(4 2 3 1丿* ⑴
Справедлив общий факт: всякая подстановка разлагается в произведение транспозиций.
Это разложение неоднозначно, например, вместо (1) мы могли бы написать
/123 4\_ /1234\/123 4\ /12 34\
\234 1/ \1324丿[143 2丿(21 34丿,
Однако можно доказать, что при всех представлениях подстановки в виде произведения транспозиций число сомножителей имеет одинаковую четность.
Подстановка называется четной, если число транспозиций и в разложении четно, в противном случае подстановка называется нечетной.
Покажите, что множество всех четных подстановок образует группу, она сбозначается Ап и называется знакопеременной группой.
Убедитесь, что множество подстансвск из задачи 5 (б) совпадает со знакопеременной группой Л3.
Восбще рассмотрим функцию
尸(尤 1, *2’ • • • > *〃)~ Ц(”£*/)‘ i, /, = 1, 2,.…,л.⑵
i </
Тогда множество всех подстановок переменных, не меняющих значения этой функции, совпадает со знакопеременной группой Ап. Это вытекает из того, что при любой транспозиции значение функции (2) меняется на противоположное, например,
广(尤2,X],,* • *,%m) = F (Xj,义2,* • • > 司)'
Сказанное объясняет и происхождение термина «знакопеременная группа》.
Для числовых групп типичной является такая ситуация, когда все степени одного элемента g 卢 1 различны ). Если же обратиться к группам преобрязований» то в них зачастую бывает так, что две различные степени одного элемента (преобразования) совпадают. В качестве примера таких элементов рассмотрите преобразования: а)симметрию относительно оси; б) поворот плоскости на угол л/3 (вообще на угол 2л/А).
Что касается конечных групп, то здесь для любого элемента g существуют такие натуральные А и m 但 W m), что
g* = gs.(3)
Если бы это было не так, то группа содержала бы бесконечно много элементов.
Пусть в равенстве (3) k > т. Умножим сбе его части на элемент g-也, это даст следующее равенство g^-w =е, или g厶=е, где n~k—m > 0.
В описанной ситуации обязательно найдется наименьшее натуральное п со свойствок! g" = e,которое называется порядком элемента
Если же все степени элемента g
различны, то g называется элементом бесконечного порядка.
Найдите порядки следующих подстановок:
“2345、/12345、/1 2 3 45、
(23451丿,(23154丿,<14523丿.
Пусть G = (g) — конечная циклическая группа, и ее образующий g имеет порядок п. Рассмотрим произвольную степень gm.
Если показатель кратен 及(他=sn), то gm = gns = (g^3 = es~e. Если же показатель /п произволен, то его всегда можно записать в виде: m~sn-[- г, О^г^г —- 1, где г —остаток от деления т на п. Но тогда gm = gsn-^г~gsn.^rе,gr = grt Это значит, что все элементы группы G = (g) исчерпываются следующими п элементами:
% g,處…,g"L
Мы доказали, что порядок конечной циклической группы совпадает с порядком ее образующего. Как, используя сказанное, вывести из теоремы Лагранжа следующие утверждения:
порядок любого элемента конечной группы является делителем порядка этой группы;
всякая группа простого порядка является циклической?
Найдите возможные порядки элементов в группах S3, S5, циклической группе порядка 12.
Проверьте, что всякая подгруппа " циклической группы G = (g) сама является циклической.
Указание: рассмотрите наименьшую положительную степень g* W Н, покажите, что Н = (О
Покажем, пользуясь законом дистрибутивности, что нулевой элемент аддитивной группы кольца играет роль нуля и при умножении.
Рассмотрим произведение любых двух элементов а и b и преобразуем его следующим образом:
ab = (a+0)力=^6+0氏
Второе слагаемое, как видно из равенства, играет роль нейтрального элемента при сложении. В силу его единственности 06 = 0 для всякого 6 £ К.
切 6в)切 6в)Какие из следующих числовых множеств являются кольцами относительно сбычных операций сложения и умножения: множество четных чисел;
切 6в)
切 6в)
множество чисел, кратных данному п;
множество многочленов степени <п с действительными коэф
фициентами;
множество всех многочленов с целыми коэффициентами;
множество неотрицательных действительных чисел;
множество всех чисел вида а-\-Ь У2 , где а и 6——рациональные.
В каких случаях мы имеем дело с кольцом с единицей, в каких—с полем?
Покажем, (что делитель нуля (левый или правый) не может быть обратим. В самом деле, пусть ха — 1 и 以6 = 0. Тогда
xab =xab =(ха) 'b=l'b = bt л:(。匕)=%・0 = 0.
xab =
xab =
Следовательно, 6 = 0 и а не является делителем нуля.
Из сказанного непосредственно вытекает, что никакое поле не содержит делителей нуля.
Показать, что если n = /?i*/73—-число составное, то %『? не является полем.
Показать, что ненулевой элемент 左£%门 обратим тогда и только тогда, когда числа kn п взаимно просты, и что в противнем случае 々 является делителем нуля.
Пользуясь предыдущим утверждением, найдите обратимые элементы и делители нуля в кольцах вычетов Zg, Zs> Zu,麼i2・ Для обратимых элементов найдите обратные. Для элементов 生 явля*
ющихся делителями нуля, найдите m * 0 такой, что^■ т =б. Является ли такой класс m единственным?
Уже самые простые сведения о кольцах и группах могут быть применены в различных математических вопросах. Прекрасной иллюстрацией этого является теория чисел. Рассмотрим, например, хорошо известную теорему (малую теорему Ферма):
Если "——простое, то для любого натурального а число а尸一а делится на р.
Рассуждаем так:
ар—а = а (й^"1— 1).
Если 。делится на р, то утверждение очевидно.
Пусть а не делится на р и а~тр-^г (0 < г《р——1). Тогда в поле вычетов %尸 а£「ц г ^^. Делимость числа аР~】——1 на р равносильна тому, что в %尸 справедливо равенство г^'1-—Т = б или равнееильнсе ему
7戶-1 =l(4丿
Так как порядок мультипликативной группы поля 元尸 равен р—1, то из теоремы Лагранжа вытекает справедливость равенства (4), и это доказывает малую теорему Ферма.
Подумайте (это не простая задача), как с помощью указанных методов можно доказать утверждение: если р — простое, то (卩——1)!十1 делится на ". Это теорема Вильсона, одна из наиболее изящных теорем элементарной теории чисел.
Функция Эйлера (р (л) определяется в теории чисел как количество натуральных чисел, меньших 孔 и взаимно простых с ним. Например, ф (4) = 2, ср (8) = 4 и т. д. Для всякого простого р очевидно Ф (р) = Р——】• Обобщением малой теоремы Ферма является теорема Эйлера, которая формулируется так:
Для любого натурального а, взаимно простого с п, “①(八)——1 делится на п. Например, при /? = 8, а = 5 имеем 5’——1 =624 = 8x78. Можно предложить следующий план доказательства теоремы Эйлера (детали —на усмотрение читателя):
показать, что множество обратимых элементов любого кольца образует группу относительно умножения;
рассмотреть кольцо вычетов %以 и убедиться, что группа его обратимых элементов имеет порядок ф (п) (вспомните утверждение пункта 18);
дальнейшие рассуждения таковы же, как и при доказательстве малой теоремы Ферма.
Найти все решения системы линейных уравнений
* + 2z=I, p + 2z = 2,2% + z=1
в поле вычетов: а) по модулю 3; б) по модулю 5.
Многочлен /?(Х)€^[Х] называется неприводимым, если не существует разложения р (X) = / (X) g (X), в котором f (X), g (X) £ £尸[X] и степени сомножителей меньше, чем степень многочлена Р(Х)・
Выяснить, являются ли следующие многочлены:
Хз 十片十1, Х4 + Х2+1,Л3-2
неприводимыми над полем: а) %2; 6) ^3; в) Q; г) R.
Разложить на неприводимые множите*ти многочлен
Х《 + ХЗ+Х + 1
над полем: a) z2; б)区з; в)
Найти наибольший общий делитель многочленов
/(Х) = Хз + Х2 + 2Х + 2;g(X) = X2 + x + h
над полем: а) ^3; б) Q.
Доказать что в конечном кольце с единицей любой ненулевой элемент либо обратим, либо является делителем нуля. Верно ли это ^отверждение без предположения конечности (вспомните кольцо Z)?
Используя предыдущее утверждение, докажите, что кснечнсе коммутативное кольцо без делителей нуля, содержащее более одного элемента, является полем.
В вопросах, связанных с решением систем линейных уравнений, сссбую роль играет понятие определителя квадратной матрицы.
Введем здесь это понятие применительно к матрице 2-го порядка
с элементами из произвольного поля F. Ее определителем называется величина
А = аб — бу*(6)
Доказать, что в кольце всех матриц 2-го порядка матрица (5) обратима тогда и только тогда, когда ее определитель отличен от нуля (указать способ отыскания обратной матрицы). В противном случае матрица (5) являегся делителем нуля.
Какие из перечисленных ниже матриц сбратимы или являются делителями нуля
.2\Л0\./1П
<21/<02/〈22丿
над полем: а) %з; 6) Q ?
В cnyqae, если матрица обратима, найти сбратную*
ЛИТЕРАТУРА
Шеннон К. Работы по теории информации и кибернетике.— М.: ИЛ, 1963.
Дглом A, M.t 兄2coM И. М. Вероятность я информация.——М.: Наука, 1973.
Бриллюэн Л. Наука и теория информации.— М.: Физматгиз, 1959.
Холл М. Комбинаторика.— М.: Мир, 1970.
Оре О, Приглашение в теорию чисел.— М.: Наука, 1980.
Репьи А. Трилогия о математике.— М.: Мир, 1980.
Кострикин А. И. Введение в алгебру.——М.: Наука, 1977.
Калужнин Л. Л. Введение в общую алгебру.— М.: Наука, 1973<
Фано Р. Передача информации. Статистическая теория связи.— М.: Мир, 1965.
Галлагер Р. Теория информации и надежная связь.— М.: Советское радио, 1974.
Питерсон У., Уэлдон Э. Коды, исправляющие ошибки.— М.: Мир, 1976.
Мак-Вильямс Ф., Слоэн Н. Дж. Теория кодов, исправляющих ошибки.一 М.: Связь, 1979,
Касами Г., Токура Н., И задари £., Инагаки Я. Теория кодирования.—М.: Мир, 1978.
Вер九екзмп 3・ Алгебраическая теория кодирования.—М.: Мир, 1971.
Колесник В. Д., Мирончиков Е. Г. Декодирование циклических кодов.— М.: Связь, 1968.
Стиффлер Дж. Теория синхронной связи.——М. : Связь, 1975.
Облонский С. В. Введение в дискретную математику.— М.: Наука, 1979.
Блох Э. Л., 3兄6几08 В. В. Обобщенные каскадные коды.— М.: Связь, 1976.
Марков А. А. Введение в теорию кодирования.— М.: Наука, 1982.
Новик, Д. Л. Эффективное кодирование.— М. Л.: Энергия, 1965.
Воро6ь€8 Н* Н$ Числа Фибоначчи&— М.: Наука, 1972,
СОДЕРЖАНИЕ
ПРЕДИСЛОВИЕ3
КОДИРОВАНИЕ - ИСТОРИЯИ ПЕРВЫЕШАГИ5
ШИФРЫ, ШИФРЫ, ШИФРЫЮ
КОД ФАНО — ЭКОНОМНЫЙкод18
СВОЙСТВО ПРЕФИКСА, ИЛИ КУДАИДТИРОБОТУ24
ЕЩЕ О СВОЙСТВЕ ПРЕФИКСА И ОДНОЗНАЧНОЙ ДЕКОДИ-
РУЕМОСТИ27
ОПТИМАЛЬНЫЙ КОД32
ОБ ИЗБЫТОЧНОСТИ, ШУМАХ И КРИПТОГРАММЕ, КОТОРУЮ
НЕЛЬЗЯ РАСШИФРОВАТЬ37
КОДЫ - АНТИПОДЫ4 0
КОД ХЕММИНГА4 5
НЕОБЫЧНОЕ ОБЫЧНОЕ РАССТОЯНИЕ48
ЛИНЕЙНЫЕ ИЛИ ГРУППОВЫЕ КОДЫ50
ДЕКОДИРОВАНИЕ ПО СИНДРОМУ И ЕЩЕ РАЗ О КОДЕ ХЕМ
МИНГА61
О КОДАХ, ИСПРАВЛЯЮЩИХ НЕСИММЕТРИЧНЫЕ ОШИБКИ 65
ЦИКЛИЧЕСКИЕ КОДЫ68
О ГРАНИЦАХ ВОЗМОЖНОГО В КОДИРОВАНИИ И СОВЕРШЕН
НЫХ КОДАХ77
6КОДИРУЕТ И ДЕКОДИРУЕТЭВМ82
ГОЛОСОВАНИЕ93
МНОГОСТУПЕНЧАТОЕ ГОЛОСОВАНИЕ И КОДЫ РИДА т
МАЛЛЕРА97
ЛАТИНСКИЕ КВАДРАТЫИКОДЫ102
МАТРИЦЫ АДАМАРА И КОДИРОВАНИЕ1 07
ЗАДАЧА ОБ ОЖЕРЕЛЬЯХ, ФУНКЦИЯ МЁБИУСА И СИНХРО
НИЗИРУЕМЫЕКОДЫ112
ЗАКЛЮЧЕНИЕ116
ПРИЛОЖЕНИЕ117
СРАВНЕНИЯ И КЛАССЫ ВЫЧЕТОВ117
ГРУППЫ120
КОЛЬЦА И ПОЛЯ125
АРИФМЕТИЧЕСКОЕ /г-А4ЕРНОЕ ВЕКТОРНОЕ ПРОСТ
РАНСТВО129
АЛГЕБРА МАТРИЦ132
ЗАДАЧИ И ДОПОЛНЕНИЯ)36
ЛИТЕРАТУРА142
Михаил Наумович Аршинов Леонид Ефимович Садовский
КОДЫ И МАТЕМАТИКА
(рассказы о кодировании)
(Серия: Библиотечка《Квант》)
БИБЛИОТЕЧКА - КВАНТ- выпуск 30
М. Н. АРШИНОВ Л. Е. САДОВСКИЙ
КОДЫ
И МАТЕМАТИКА
*) Леонард Эйлер (1707—1783) — один из великих математиков XVIII века, создавших основы математического анализа. Швейцарец