SlideShare une entreprise Scribd logo
1  sur  52
Конспект лекций
по теории кодирования
Александр Дайняк
Актуальная версия файла доступна на www.dainiak.com
Распространяется на условиях лицензии
Creative Commons «Attribution-NonCommercial-ShareAlike»
www.dainiak.com
Моим родителям, сумевшим передать мне то,
что систематическому кодированию не поддаётся
www.dainiak.com
Оглавление
Введение...........................................................................................................................................................5
1. Алфавитное кодирование ...........................................................................................................................5
1.1. Математическая постановка, однозначность кодов..........................................................................5
1.1.1. Критерий однозначности алфавитного кодирования.................................................................6
1.1.2. Оценка длины неоднозначно декодируемых слов.....................................................................7
1.2. Коды с минимальной избыточностью.................................................................................................7
1.2.1. Свойства оптимальных кодов........................................................................................................9
2. Коды, исправляющие ошибки ..................................................................................................................10
2.1. Модель канала с ошибками...............................................................................................................10
2.2. Основные определения и обозначения............................................................................................10
2.3. Границы мощностей кодов.................................................................................................................12
2.3.1. Граница Хемминга (граница сферической упаковки) ...............................................................12
2.3.2. Граница Синглтона........................................................................................................................12
2.3.3. Граница Плоткина.........................................................................................................................13
2.3.4. Граница Элайеса—Бассалыго......................................................................................................13
3. Линейные коды ..........................................................................................................................................15
3.1. Основные понятия...............................................................................................................................15
3.2. Теорема Варшамова—Гилберта ........................................................................................................17
3.3. Двоичный код Хемминга....................................................................................................................18
3.4. Границы мощностей для линейных кодов........................................................................................19
3.4.1. Граница Синглтона для линейных кодов....................................................................................19
3.4.2. Граница Грайсмера—Соломона—Штиффлера ..........................................................................19
3.5. Графы-расширители и коды на их основе ........................................................................................20
3.5.1. Графы-расширители .....................................................................................................................20
3.5.2. Коды на основе расширителей....................................................................................................21
3.5.3. Алгоритм Сипсера—Шпильмана.................................................................................................22
4. Коды Рида—Соломона и Рида—Маллера...............................................................................................23
4.1. Коды Рида—Соломона (I.S. Reed, G. Solomon) .................................................................................23
4.1.1. Определение.................................................................................................................................23
4.1.2. Декодирование RS-кодов.............................................................................................................24
4.2. Коды Рида—Маллера (I.S. Reed, D.E. Muller)....................................................................................25
4.2.1. Определение.................................................................................................................................25
4.2.2. Кодовое расстояние......................................................................................................................25
4.2.3. Декодирование RM-кодов ...........................................................................................................26
4.3. Понятие об алгеброгеометрических кодах (кодах В.Д. Гоппы) ......................................................28
www.dainiak.com
5. Циклические коды......................................................................................................................................28
5.1. Определение........................................................................................................................................28
5.2. Порождающий многочлен..................................................................................................................29
5.3. Порождающая и проверочная матрицы...........................................................................................30
5.4. Граница БЧХ и коды БЧХ.....................................................................................................................32
5.4.1. Граница БЧХ...................................................................................................................................32
5.4.2. Коды БЧХ........................................................................................................................................33
5.5. Циклическое представление кодов Хемминга.................................................................................34
5.6. Восстановление синхронизации для смежных классов циклических кодов ................................34
5.6.1. Задача восстановления синхронизации.....................................................................................34
6. Совершенные коды....................................................................................................................................35
6.1. Совершенство кодов Голея и Хемминга ...........................................................................................36
6.2. Некоторые теоремы о совершенных кодах......................................................................................36
6.2.1. Доказательство теоремы Васильева при 𝑞 = 2.........................................................................37
7. Теоремы Шеннона о скорости кодирования...........................................................................................37
7.1. Шенноновская ёмкость графов..........................................................................................................37
7.2. Теоремы Шеннона для каналов с фиксированной вероятностью ошибок ...................................40
7.2.1. Теоремы Шеннона........................................................................................................................40
7.2.2. Доказательство теоремы о существовании хороших кодов.....................................................41
8. Некоторые специальные семейства кодов..............................................................................................42
8.1. Коды Варшамова—Тененгольца........................................................................................................42
8.1.1. Исправление одной ошибки выпадения в кодах Варшамова—Тененгольца ........................43
8.1.2. Исправление одной ошибки вставки в кодах Варшамова—Тененгольца ..............................43
8.2. Матрицы Адамара и коды Адамара..................................................................................................44
8.2.1. Матрицы Адамара ........................................................................................................................44
8.2.2. Конструкция Пэли на основе квадратичных вычетов................................................................45
8.2.3. Коды Адамара...............................................................................................................................46
8.3. Каскадные коды...................................................................................................................................47
8.3.1. Определение.................................................................................................................................47
8.3.2. Асимптотически хорошие коды с полиномиальным декодированием..................................47
9. О приложениях теории кодирования в информатике............................................................................48
9.1. Коммуникационная сложность..........................................................................................................48
9.2. Криптография с открытым ключом: криптосистема МакЭлиса (R. McEliece ’1978)......................49
9.3. 𝑙-однородные множества и дерандомизация .................................................................................49
9.4. Задача о разделении секрета.............................................................................................................51
Литература ......................................................................................................................................................52
www.dainiak.com
Введение
Теория кодирования изучает модели хранения и передачи «дискретной» информации и предлагает
способы оптимального её кодирования. Основные требования, которые предъявляются к способам
кодирования, перечислены ниже.
 Однозначность. По закодированному сообщению нужно уметь однозначно
восстанавливать исходное. Это требование обязательно.
 Минимальная избыточность. Закодированное сообщение должно при прочих равных
условиях иметь как можно меньший объём для скорейшей передачи по каналам связи.
 Устойчивость к ошибкам. Возможность расшифровать закодированное сообщение даже
при возникновении ошибок при его передаче.
Теории кодов, исправляющих ошибки, будет посвящено основное внимание, однако начнём мы с
рассмотрения первых двух пунктов.
1. Алфавитное кодирование
Чтобы хранить в компьютере тексты на естественном языке, нужно их кодировать. Простейший
подход состоит в следующем: каждой букве языка и знаку препинания сопоставим по двоичному
слову, и тогда текст закодируем, записав друг за другом коды отдельных букв.
1.1. Математическая постановка, однозначность кодов
Даны алфавиты 𝔸 = { 𝑎1, … , 𝑎 𝑛} и 𝔹 = {𝑏1, …, 𝑏 𝑞 }.
Алфавит 𝔸 — кодируемый, «естественный»; алфавит 𝔹 — кодовый (например, 𝔹 = {0,1}).
Алфавитное кодирование — это отображение 𝜙: 𝔸∗
→ 𝔹∗
, такое, что для любых 𝑎𝑖1
, …, 𝑎𝑖 𝑟
выполнено 𝜙(𝑎𝑖1
… 𝑎𝑖 𝑟
) = 𝜙(𝑎𝑖1
) … 𝜙(𝑎𝑖 𝑟
).
Видно, что достаточно определить 𝜙 на отдельных символах алфавита 𝔸:
𝜙( 𝑎1) = 𝐵1
⋮
𝜙( 𝑎 𝑛) = 𝐵 𝑛
Слова 𝐵1, …, 𝐵 𝑛 называются кодовыми, совокупность { 𝐵1,… , 𝐵 𝑛} называется кодом.
Кодирование 𝜙 называется однозначным, если 𝜙( 𝑤′) ≠ 𝜙( 𝑤′′) при 𝑤′
≠ 𝑤′′
. В противном случае
кодирование почти бесполезно. Для однозначности необходимо, чтобы все 𝐵𝑖 были различны (и
везде далее мы будем это предполагать), но этого недостаточно. Однозначность никак не зависит от
алфавита 𝔸, а целиком определяется набором { 𝐵1,… , 𝐵 𝑛}.Кодирование однозначное т. и т.т., когда
никакое слово 𝑏𝑖1
𝑏𝑖2
… 𝑏𝑖 𝑟
нельзя двумя разными способами разбить на кодовые слова:
Каждое из перечисленных условий является достаточным для однозначности кода:
 Равномерность: | 𝐵1| = | 𝐵2| = ⋯ = | 𝐵 𝑛|.
 Свойство префикса: ∄𝑖, 𝑗 (𝑖 ≠ 𝑗 и 𝐵𝑖 = 𝐵𝑗 𝑤, где 𝑤 ∈ 𝔹∗
).
 Свойство суффикса: ∄𝑖, 𝑗(𝑖 ≠ 𝑗 и 𝐵𝑖 = 𝑤𝐵𝑗, где 𝑤 ∈ 𝔹∗
).
𝑏𝑖1
⬚ 𝑏𝑖2
⬚⬚⬚⬚ … ⬚⬚⬚ 𝑏𝑖 𝑟
𝐵3 𝐵8
𝐵5 𝐵1 𝐵3
𝑎3 𝑎8 или 𝑎5 𝑎1 𝑎3 ?
www.dainiak.com
Префиксные коды называют ещё мгновенными, так как закодированные с их помощью сообщения
можно декодировать по мере приёма, без задержек.
Пример того, что равномерность, префиксность и суффиксность не являются необходимыми
условиями для однозначности:
𝔸 = { 𝑎1, 𝑎2},
𝔹 = {0,1},
𝜙( 𝑎1) = 0,
𝜙( 𝑎2) = 010.
1.1.1. Критерий однозначности алфавитного кодирования
В этом разделе мы выведем критерий, позволяющий по любому заданному кодированию (или, что
то же, набору кодовых слов) определять, однозначно ли оно. Для этого подробнее рассмотрим
свойства неоднозначных кодов.
Код неоднозначен, если найдётся слово 𝐵 ∈ 𝔹∗
, которое не менее чем двумя разными способами
можно разбить на кодовые слова. Рассмотрим самое короткое такое «неоднозначное» 𝐵 и два его
различных разбиения на кодовые слова:
Заметим, что точки «верхнего» и «нижнего» разбиений, кроме крайних, все различны, иначе слово 𝐵
можно было бы укоротить:
Также, среди отрезков 𝐵, концы которых принадлежат разным разбиениям, нет кодовых слов, иначе
𝐵 также можно было бы укоротить:
Минимальные отрезки слова 𝐵, концы которых принадлежат разным разбиениям, назовём
промежуточными.
Первый промежуточный отрезок (п.о.) получается, если из начала некоторого кодового слова
«отнять» некоторую последовательность кодовых слов. Любой из остальных отрезков получается,
если из некоторого кодового слова отнять предыдущий отрезок и последовательность (возможно,
пустую) кодовых слов. Последний п.о. таков, что если его отнять из начала некоторого кодового
слова, получится последовательность кодовых слов.
Обозначим через 𝑤1, … , 𝑤 𝑘 все промежуточные отрезки. Через 𝛽 будем обозначать
последовательность (возможно, пустую) кодовых слов. Имеем:
∃𝑖, 𝛽( 𝐵𝑖 = 𝛽𝑤1)
∃𝑖, 𝛽( 𝐵𝑖 = 𝑤1 𝛽𝑤2)
⋮
∃𝑖, 𝛽( 𝐵𝑖 = 𝑤 𝑘−1 𝛽𝑤 𝑘)
∃𝑖, 𝛽( 𝐵𝑖 = 𝑤 𝑘 𝛽)
Наоборот, пусть нашлись непустые слова 𝑤1, …, 𝑤 𝑘 ∈ 𝔹∗
, кодовые слова 𝐵𝑖1
, …, 𝐵𝑖 𝑘+1
и
последовательности кодовых слов 𝛽1, …, 𝛽 𝑘+1, такие, что выполнены соотношения
𝐵𝑖1
= 𝛽1 𝑤1
𝐵𝑖2
= 𝑤1 𝛽2 𝑤2
⋮
𝐵𝑖 𝑘+1
= 𝑤 𝑘 𝛽 𝑘+1
www.dainiak.com
Тогда слово 𝛽1 𝑤1 𝛽2 𝑤2 … 𝑤 𝑘−1 𝛽 𝑘 𝑤 𝑘 𝛽 𝑘+1 можно разбить на кодовые слова двумя способами.
𝐵𝑖1
= 𝜀𝛽1 𝑤1 𝐵𝑖2
= 𝑤1 𝛽2 𝑤2
⋮
𝐵𝑖 𝑘+1
= 𝑤 𝑘 𝛽 𝑘+1 𝜀
Пример:
Сказанное выше позволяет нам теперь сформулировать следующее утверждение.
Критерий однозначности алфавитного кодирования (Ал. А. Марков ’1963)
Код 𝐶 = { 𝐵1, …, 𝐵 𝑛} не однозначный т. и т.т., когда найдутся непустые слова 𝑤1, … , 𝑤 𝑘 ∈ 𝔹∗
∖ 𝐶,
кодовые слова 𝐵𝑖1
, … , 𝐵𝑖 𝑘+1
и последовательности кодовых слов 𝛽1,… , 𝛽 𝑘+1, такие, что 𝑘 ≥ 1 и
выполнены соотношения
𝐵𝑖1
= 𝛽1 𝑤1
𝐵𝑖2
= 𝑤1 𝛽2 𝑤2
⋮
𝐵𝑖 𝑘+1
= 𝑤 𝑘 𝛽 𝑘+1
(или 𝑘 = 0 и 𝐵𝑖1
= 𝛽1, где 𝛽1 составлено не менее чем из двух кодовых слов).
1.1.2. Оценка длины неоднозначно декодируемых слов
Через 𝜀 будем обозначать пустое слово. Пусть 𝐶 = { 𝐵1, … , 𝐵 𝑛} — код, который нужно проверить на
однозначность. Построим орграф 𝐺𝐶 = ( 𝑉, 𝐸), где
𝑉 ≔ {𝜀, а также все слова из 𝔹∗
∖ 𝐶, являющиеся началами и концами кодовых слов},
𝐸 ≔ {( 𝛼′
, 𝛼′′) ∣ ∃𝛽 ∈ 𝐶∗
(( 𝛼′
𝛽𝛼′′
∈ 𝐶)∧ (( 𝛽 ≠ 𝜀) ∨ (( 𝛼′
≠ 𝜀) ∧ ( 𝛼′′
≠ 𝜀))))}.
Доказанный нами критерий однозначности можно переформулировать так: код 𝐶 однозначный т. и
т.т., когда в орграфе 𝐺𝐶 нет (ориентированного) цикла, проходящего через вершину 𝜀. Имеем
| 𝑉| ≤ 1 + ∑(| 𝐵| − 1)
𝐵∈𝐶
≤ | 𝐶| ⋅ max
𝐵∈𝐶
| 𝐵|.
Получим отсюда оценку длины минимального неоднозначно декодируемого слова. Если в 𝐺𝐶 есть
цикл через 𝜀, то есть и цикл, число вершин в котором не больше, чем | 𝐶| ⋅ max
𝐵∈𝐶
| 𝐵|. Рассмотрим
соответствующее этому циклу неоднозначно декодируемое слово 𝑊неодн. =
𝛽1 𝑤1 𝛽2 𝑤2 … 𝑤 𝑘−1 𝛽 𝑘 𝑤 𝑘 𝛽 𝑘+1. Каждая пара 𝛽𝑖 𝑤𝑖 умещается в некотором кодовом слове, поэтому
|𝑊неодн.| ≤ ( 𝑘 + 1) ⋅ max
𝐵∈𝐶
| 𝐵| ≤ | 𝐶| ⋅ (max
𝐵∈𝐶
| 𝐵|)
2
.
Из предыдущих рассуждений вытекает следующая оценка на длину неоднозначно декодируемого
слова.
Теорема. (А.А. Марков)
Если 𝐶 — неоднозначный код, длина слов которого не превосходит 𝑙, то найдётся слово длины не
более | 𝐶| ⋅ 𝑙2
, декодируемое неоднозначно.
1.2. Коды с минимальной избыточностью
Обычно, кодируемые символы 𝑎1,… , 𝑎 𝑛 встречаются в кодируемых сообщениях не одинаково часто,
а с разными частотами. Например, в английском языке буква e встречается примерно в 180 раз чаще,
𝛽4 (пустая)𝛽2
𝐵𝑖2 𝐵𝑖4
𝐵𝑖5
𝐵𝑖1
𝛽3 (пустая)
𝐵𝑖3
𝛽5
𝑤1 𝑤2 𝑤3 𝑤4
𝛽1
www.dainiak.com
чем z. Естественно при построении кодирования 𝜙 кодировать более частые буквы более короткими
словами.
Поставим задачу математически. Пусть в кодируемых сообщениях символы 𝑎1, …, 𝑎 𝑛 встречаются с
частотами 𝑝1, …, 𝑝 𝑛 соответственно. Считаем, что ∑𝑝𝑖 = 1 и ∀𝑖 𝑝𝑖 > 0.
Пусть символ 𝑎𝑖 кодируется словом 𝐵𝑖. Рассмотрим сообщение 𝐴 ∈ 𝔸∗
. Каждый из символов 𝑎𝑖
встретится в | 𝐴| примерно | 𝐴| ⋅ 𝑝𝑖 раз. Отсюда
| 𝜙( 𝐴)| ≈ ∑| 𝐴| ⋅ 𝑝𝑖 ⋅ | 𝐵𝑖|
𝑖
= | 𝐴| ⋅ ∑ 𝑝𝑖 ⋅ | 𝐵𝑖|
𝑖
.
То есть «среднестатистическое» сообщение 𝐴 при кодировании «разбухает» примерно в ∑ 𝑝𝑖| 𝐵𝑖|𝑖
раз. Величина ∑ 𝑝𝑖| 𝐵𝑖|𝑖 называется коэффициентом избыточности (к.и.) кода.
Задача построения кода с минимальной избыточностью: по заданным 𝑝1, … , 𝑝 𝑛 построить
однозначно декодируемый код 𝐵1,… . , 𝐵 𝑛 ∈ 𝔹∗
, для которого коэффициент избыточности
минимален.
Такой код называется кодом с минимальной избыточностью (к.м.и.) для набора частот 𝑝1, … , 𝑝 𝑛.
Все слова кода не получится взять слишком короткими, иначе код не будет однозначным.
Количественно это выражает следующая теорема.
Теорема. (L.G. Kraft, B. McMillan)
Пусть 𝑙1,… , 𝑙 𝑛 — длины слов однозначного кода в алфавите 𝔹, где | 𝔹| = 𝑞. Тогда выполнено
неравенство
∑ 𝑞−𝑙 𝑖
𝑛
𝑖=1
≤ 1.
Доказательство. Пусть 𝐵1, … , 𝐵 𝑛 — однозначный код в 𝑞-значном алфавите, и пусть | 𝐵𝑖| = 𝑙 𝑖.
Пусть 𝑡 ∈ ℕ. Положим 𝐿 ≔ 𝑡 ⋅ max
𝑖
𝑙 𝑖. Рассмотрим выражение
(∑ 𝑞−𝑙 𝑖
𝑛
𝑖=1
)
𝑡
= ∑ 𝑞−( 𝑙 𝑖1
+⋯+𝑙 𝑖 𝑡
)
1≤𝑖1,…,𝑖 𝑡≤𝑛
= ∑ 𝑠𝑙 𝑞−𝑙
𝐿
𝑙=1
,
где 𝑠𝑙 — количество наборов ( 𝑖1,… , 𝑖 𝑡), таких, что 𝑙 𝑖1
+ ⋯ + 𝑙 𝑖 𝑡
= 𝑙.
Каждому набору ( 𝑖1,… , 𝑖 𝑡) ∈ 𝑆𝑙 поставим в соответствие слово 𝐵𝑖1
… 𝐵𝑖 𝑡
∈ 𝔹∗
. Тогда разным наборам
из 𝑆𝑙 соответствуют разные слова (т.к. код однозначный). Отсюда 𝑠𝑙 ≤ 𝑞 𝑙
и следовательно
(∑ 𝑞−𝑙 𝑖
𝑛
𝑖=1
)
𝑡
= ∑ 𝑠𝑙 𝑞−𝑙
𝐿
𝑙=1
≤ ∑ 1
𝐿
𝑙=1
= 𝐿.
Получили, что для любого 𝑡 ∈ ℕ выполнено ∑ 𝑞−𝑙 𝑖𝑛
𝑖=1 ≤ (𝑡 ⋅ max
𝑖
𝑙 𝑖)
1 𝑡⁄
. Устремляя 𝑡 к бесконечности,
получаем ∑ 𝑞−𝑙 𝑖𝑛
𝑖=1 ≤ 1.
Теорема доказана.
Докажем обратное утверждение:
Теорема.
Пусть натуральные числа 𝑙1,…, 𝑙 𝑛 и 𝑞 таковы, что ∑ 𝑞−𝑙 𝑖𝑛
𝑖=1 ≤ 1. Тогда существует префиксный код
𝐵1, …, 𝐵 𝑛 в 𝑞-значном алфавите, такой, что | 𝐵𝑖| = 𝑙 𝑖.
Доказательство. Будем считать, что среди 𝑙1,… , 𝑙 𝑛 всего 𝑚 различных, и при этом 𝑙1 < ⋯ < 𝑙 𝑚. Для
каждого 𝑗 ∈ [1, 𝑚] положим 𝑛𝑗 ≔ |{𝑖 ∈ [1, 𝑛] ∣ 𝑙 𝑖 = 𝑙 𝑗}|. Тогда из условия теоремы следует
неравенство ∑ 𝑛𝑗 𝑞−𝑙 𝑗𝑚
𝑗=1 ≤ 1. Отсюда
www.dainiak.com
∑ 𝑛𝑗 𝑞−𝑙 𝑗
𝑘
𝑗 =1
≤ 1
для любого 𝑘 ∈ [1, 𝑚]. Домножив обе части последнего неравенства на 𝑞 𝑙 𝑘, получим
𝑞 𝑙 𝑘 ≥ ∑ 𝑛𝑗 𝑞 𝑙 𝑘−𝑙 𝑗
𝑘
𝑗=1
= 𝑛 𝑘 + ∑ 𝑛𝑗 𝑞 𝑙 𝑘−𝑙 𝑗
𝑘−1
𝑗=1
.
Следовательно, для любого 𝑘 ∈ [1, 𝑚] имеем 𝑛 𝑘 ≤ 𝑞 𝑙 𝑘 − ∑ 𝑛𝑗 𝑞 𝑙 𝑘−𝑙 𝑗𝑘−1
𝑗=1 . Будем строить префиксный
код, сначала выбирая 𝑛1 слов длины 𝑙1, затем 𝑛2 слов длины 𝑙2, и т.д. Пусть уже набраны все
кодовые слова с длинами 𝑙1,…, 𝑙 𝑘−1. Слов длины 𝑙 𝑘, для которых выбранные кодовые слова
являются префиксами, не более 𝑛1 𝑞 𝑙 𝑘−𝑙1 + ⋯ + 𝑛 𝑘−1 𝑞 𝑙 𝑘−𝑙 𝑘−1 , то есть «пригодных для выбора» слов
длины 𝑙 𝑘 не меньше, чем 𝑞 𝑙 𝑘 − ( 𝑛1 𝑞 𝑙 𝑘−𝑙1 + ⋯+ 𝑛 𝑘−1 𝑞 𝑙 𝑘−𝑙 𝑘−1 ). Из неравенства 𝑛 𝑘 ≤ 𝑞 𝑙 𝑘 −
∑ 𝑛𝑗 𝑞 𝑙 𝑘−𝑙 𝑗𝑘−1
𝑗=1 вытекает, что мы сможем выбрать 𝑛 𝑘 слов длины 𝑙 𝑘, так, чтобы никакие из ранее
выбранных слов не были их префиксами. По индукции получаем утверждение теоремы.
Теорема доказана.
Следствие из двух доказанных теорем.
Для любого однозначного кода существует префиксный код в том же алфавите и с теми же
длинами кодовых слов. Значит, к.м.и. можно искать только среди префиксных кодов.
1.2.1. Свойства оптимальных кодов
Лемма о монотонности длин слов к.м.и.
Если 𝐵1, …, 𝐵 𝑛 — к.м.и. для набора частот 𝑝1, …, 𝑝 𝑛, то
∀𝑖, 𝑗 (𝑝𝑖 > 𝑝𝑗 ⇒ | 𝐵𝑖| ≤ |𝐵𝑗|).
Доказательство. В противном случае, поменяв 𝐵𝑖 и 𝐵𝑗 местами, получили бы код с
коэффициентом избыточности
∑ 𝑝𝑖| 𝐵𝑖|
𝑛
𝑖=1
− (𝑝𝑖 − 𝑝𝑗)(| 𝐵𝑖| − |𝐵𝑗|) < ∑ 𝑝𝑖| 𝐵𝑖|
𝑛
𝑖=1
.
Лемма доказана.
Теорема «о редукции». (D.A. Huffman)
Пусть 𝑝1 ≥ ⋯ ≥ 𝑝 𝑛−1 ≥ 𝑝 𝑛 и 𝑝 ≔ 𝑝 𝑛−1 + 𝑝 𝑛 . Если 𝐵1, … , 𝐵 𝑛−2, 𝐵 ∈ {0,1}∗
— префиксный к.м.и. для
частот 𝑝1, …, 𝑝 𝑛−2, 𝑝, то 𝐵1,… , 𝐵 𝑛−2, 𝐵0, 𝐵1 — префиксный к.м.и. для частот 𝑝1, …, 𝑝 𝑛.
Доказательство. Пусть к.и. кода 𝐵1, …, 𝐵 𝑛−2, 𝐵 для частот 𝑝1, …, 𝑝 𝑛−2, 𝑝 равен 𝑘. К.и. кода
𝐵1, …, 𝐵 𝑛−2, 𝐵0, 𝐵1 для частот 𝑝1, … , 𝑝 𝑛 равен
∑ 𝑝𝑖| 𝐵𝑖|
𝑛−2
𝑖=1
+ ( 𝑝 𝑛−1 + 𝑝 𝑛 )(| 𝐵| + 1) = ∑ 𝑝𝑖| 𝐵𝑖|
𝑛−2
𝑖=1
+ 𝑝| 𝐵| + 𝑝 = 𝑘 + 𝑝.
Допустим, что нашёлся код 𝐵1
′
, … , 𝐵 𝑛
′
, к.и. которого для набора частот 𝑝1, … , 𝑝 𝑛 равен 𝑘′
< 𝑘 + 𝑝, и
придём к противоречию. Б.о.о. будем считать код { 𝐵𝑖
′}𝑖=1
𝑛
префиксным к.м.и. для набора 𝑝1, … , 𝑝 𝑛.
Т.к. 𝑝1 ≥ ⋯ ≥ 𝑝 𝑛, то | 𝐵1
′ | ≤ ⋯ ≤ |𝐵 𝑛
′
|.
Пусть 𝐵 𝑛
′
= 𝐵′
0, где 𝐵′
— некоторое слово. Заметим, что 𝐵′
∉ { 𝐵𝑖
′}𝑖=1
𝑛
и 𝐵′
является префиксом
одного из слов 𝐵1
′
,… , 𝐵 𝑛−1
′
. Б.о.о. будем считать, что 𝐵 𝑛−1
′
= 𝐵′
1. Тогда код 𝐵1
′
,… , 𝐵 𝑛−2
′
, 𝐵′
префиксный. К.и. кода 𝐵1
′
, …, 𝐵 𝑛−2
′
, 𝐵′
для набора частот 𝑝1, … , 𝑝 𝑛−2, 𝑝 равен
( 𝑝 𝑛−1 + 𝑝 𝑛 )| 𝐵′| + ∑ 𝑝𝑖|𝐵𝑖
′
|
𝑛−2
𝑖=1
= ∑ 𝑝𝑖|𝐵𝑖
′
|
𝑛
𝑖=1
− ( 𝑝 𝑛−1 + 𝑝 𝑛) = 𝑘′
− 𝑝 < 𝑘,
— противоречие с тем, что код 𝐵1, … , 𝐵 𝑛−2, 𝐵 является к.м.и. для частот 𝑝1, …, 𝑝 𝑛−2, 𝑝.
www.dainiak.com
Теорема доказана.
2. Коды, исправляющие ошибки
2.1. Модель канала с ошибками
Основная модель канала связи:
Чаще всего рассматривают следующие типы ошибок:
 Ошибки замещения: муха → мука
o Симметричные (если символ 𝑥 может замениться на 𝑦, то возможно и обратное)
o Несимметричные
 Ошибки стирания: муха → му?а
 Ошибки выпадения: муха → уха
 Ошибки вставки: мука → мурка
 Комбинации перечисленных типов
Всегда задаются ограничения на «ненадёжность» канала. Ограничения можно разделить на два
типа:
 вероятностные (например, вероятность возникновения ошибки в одном символе сообщения),
 детерминированные (например, верхняя оценка числа ошибок на одно сообщение).
Естественный язык весьма устойчив к ошибкам: «веть ву мжте прчтттть эт ткст п поняц го!». Причины
этой устойчивости: избыточность (например, наличие «малоинформативных» гласных) и
разреженность («вблизи» слов обычно нет других слов). Если эти свойства где-то нарушаются, то
ошибки исправлять тяжело: сравните чемодан зарыт и чемодан закрыт.
2.2. Основные определения и обозначения
Пусть 𝔸 𝑞 — кодовый алфавит, алфавит канала, и пусть |𝔸 𝑞 | = 𝑞. Будем называть 𝑞-ичным кодом
любое подмножество 𝐶 ⊆ 𝔸 𝑞
𝑛
, где 𝑛 — длина кода (длина кодовых слов), | 𝐶| — мощность кода
(число кодовых слов).
Чаще всего рассматривают двоичные коды, т.е. когда 𝑞 = 2 и 𝔸 𝑞 = {0,1}. Таким же важным является
случай, когда 𝔸 𝑞 является полем. В этих случаях для произвольного слова 𝒂 будем через ‖ 𝒂‖
обозначать вес этого слова, то есть величину #{𝑖 ∣ 𝑎𝑖 ≠ 0}.
Пусть 𝒂 и 𝒃 — слова в алфавите канала. Обозначимчерез 𝑑̃( 𝒂, 𝒃) минимальное число ошибок, в
результате которых 𝒂 может перейти в 𝒃.
Способ кодирования позволяет обнаруживать 𝑘 ошибок, если для любых различных кодовых
сообщений 𝒂′
и 𝒂′′
при передаче в канал 𝒂′
на выходе из канала не может получиться 𝒂′′
(если в
канале произошло не более 𝑘 ошибок). Иначе говоря, 𝑑̃( 𝒂′
, 𝒂′′) > 𝑘.
Способ кодирования позволяет исправлять 𝑘 ошибок, если при передаче в канал различных
кодовых сообщений 𝒂′
и 𝒂′′
на выходе из канала будут получаться различные сообщения (при
условии, что с каждым отдельным сообщением в канале происходит не более 𝑘 ошибок).
Формально:
Канал связи
(в котором
могут
происходить
ошибки)
Кодер
Декод
ер
Исходное сообщение
Закодированное сообщение
Принятое
сообщение
(возможно, с
ошибками)
Декодированное сообщение
(после исправления ошибок);
должно совпасть с исходным
www.dainiak.com
∄𝒂′
, 𝒂′′
∈ 𝐶, 𝒂: 𝒂′
≠ 𝒂′′
∧ 𝑑̃( 𝒂′
, 𝒂) ≤ 𝑘 ∧ 𝑑̃( 𝒂′′
, 𝒂) ≤ 𝑘.
Особенно удобно, когда 𝑑̃ является метрикой:
 ∀𝒂, 𝒃 𝑑̃( 𝒂,𝒃) = 𝑑̃( 𝒃, 𝒂) — симметричность
 ∀𝒂 ≠ 𝒃 𝑑̃( 𝒂, 𝒃) > 0
 ∀𝒂 𝑑̃( 𝒂, 𝒂) = 0
 ∀𝒂, 𝒃, 𝒄 𝑑̃( 𝒂, 𝒃) ≤ 𝑑̃( 𝒂, 𝒄) + 𝑑̃( 𝒄, 𝒃) — неравенство треугольника
Так бывает не всегда. Например, если в канале могут происходить лишь ошибки вставки, то при 𝒂 ≠
𝒃 по крайней мере одна из двух величин 𝑑̃( 𝒂, 𝒃), 𝑑̃( 𝒃, 𝒂) вовсе не определена.
Пусть 𝑑̃(…, … ) — метрика и 𝐶 — код. Положим
𝑑̃( 𝐶) ≔ min
𝒂≠𝒃
𝒂,𝒃∈𝐶
𝑑̃( 𝒂, 𝒃).
Величина 𝑑̃( 𝐶)называется кодовым расстоянием кода 𝐶.
Утверждение (о связи кодового расстояния с устойчивостью к ошибкам).
 Код 𝐶 обнаруживает 𝑡 ошибок ⇔ 𝑑̃( 𝐶) > 𝑡.
 Код 𝐶 исправляет 𝑡 ошибок ⇐ 𝑑̃( 𝐶) > 2𝑡. Для метрик Хемминга и Левенштейна можно «⇐»
заменить на «⇔».
Докажем только первую часть.
⇐ Пусть в канал передавалось сообщение 𝒂. Если в канале происходит не более 𝑡 ошибок, то даже
если при передаче возникли ошибки и получилось слово 𝒂′
≠ 𝒂, то нам гарантирована оценка
𝑑̃( 𝒂, 𝒂′) ≤ 𝑡. Но тогда 𝒂′
∉ 𝐶, а значит, мы увидим, что при передаче произошли ошибки.
⇒ С другой стороны, если бы в коде была пара слов 𝒂, 𝒃, таких, что 𝑑̃( 𝒂, 𝒃) ≤ 𝑡, то при неудачной
ситуации, когда в канал передавалось слово 𝒂, ошибки могли распределиться таким образом, что
получилось бы в точности слово 𝒃. Но тогда, приняв слово 𝒃, мы наивно полагали бы, что «само
слово 𝒃 и передавалось изначально, причём при передаче не было ошибок».
Доказательство второй части утверждения — упражнение (придётся использовать и симметричность
метрики, и неравенство треугольника).
Утверждение доказано.
Если рассматриваются слова одной и той же длины, а в канале возможны только ошибки типа
замещения (любые), то 𝑑̃( 𝒂, 𝒃) = 𝑑( 𝒂, 𝒃), где
𝑑( 𝒂, 𝒃) ≔ #{𝑖 ∣ 𝑎𝑖 ≠ 𝑏𝑖}.
Функционал 𝑑 называется метрикой Хемминга, а величина 𝑑( 𝒂, 𝒃) — расстоянием Хемминга
между 𝒂 и 𝒃.
Везде далее по умолчанию будем считать, что в канале возможны произвольные ошибки типа
замещения, т.е. в качестве метрики на словах везде далее используется метрика Хемминга.
Обозначим
𝑑( 𝐶) ≔ min
𝒂≠𝒃
𝒂,𝒃∈𝐶
𝑑( 𝒂, 𝒃).
Шар радиуса 𝑟 с центром в 𝒂 — это множество 𝑆 𝑟( 𝒂) ≔ { 𝒃 ∣ 𝑑( 𝒂, 𝒃) ≤ 𝑟}.
Если в канал передавалось 𝒂, то на выходе из канала может быть любое слово 𝒃 ∈ 𝑆𝑡( 𝒂). Значит, код
обнаруживает 𝑡 ошибок т. и т.т., когда никакое кодовое слово не попадает в шар радиуса 𝑡 с центром
в другом кодовом слове. Аналогично, код исправляет 𝑡 ошибок т. и т.т., когда при передаче в канал
различных кодовых слов на выходе получаются различные слова, то есть когда шары радиуса 𝑡 с
центрами в кодовых словах не пересекаются.
Основная задача теории кодов, исправляющих ошибки: строить коды, для которых число кодовых
слов как можно больше, кодовое расстояние как можно больше, а длина кодовых слов как можно
www.dainiak.com
меньше. Также можно рассматривать задачи, связанные с ресурсами: процессы кодирования и
декодирования (исправление ошибок) должны быть возможно менее трудоёмкими по количеству
операций и по памяти.
Геометрически основная задача — это задача об упаковке возможно большего числа шаров,
возможно большего радиуса, в пространстве возможно меньшей размерности.
Обозначение кода с заданными параметрами
Если 𝐶 — 𝑞-ичный код с длиной слов 𝑛, числом слов 𝑀 и кодовым расстоянием 𝑑, то пишут: «𝐶
является ( 𝑛, 𝑀, 𝑑) 𝑞-кодом». Если код двоичный, то символ 𝑞 не указывают.
2.3. Границымощностей кодов
Полезно знать границы своих возможностей при построении кодов. С несколькими такими
границами мы познакомимся в этом разделе.
2.3.1. Граница Хемминга (граница сферической упаковки)
Теорема. (R.W. Hamming)
Для любого ( 𝑛, 𝑀, 𝑑) 𝑞-кода имеем
𝑀 ≤
𝑞 𝑛
|𝑆⌊( 𝑑−1) 2⁄ ⌋( 𝟎)|
В двоичном случае
𝑀 ≤
2 𝑛
∑ ( 𝑛
𝑘
)
⌊( 𝑑−1) 2⁄ ⌋
𝑘=0
Доказательство. Пусть 𝐶 = { 𝒂1, 𝒂2, … , 𝒂 𝑀} — ( 𝑛, 𝑀, 𝑑) 𝑞-код. Так как 𝑑( 𝐶) = 𝑑, то шары радиуса
⌊( 𝑑 − 1) 2⁄ ⌋ с центрами в кодовых словах не пересекаются. Отсюда 𝑞 𝑛
≥ ∑ |𝑆⌊( 𝑑−1) 2⁄ ⌋(𝒂𝑗)|𝑀
𝑗=1 = 𝑀 ⋅
|𝑆⌊( 𝑑−1) 2⁄ ⌋( 𝟎)|.
Теорема. (В некотором смысле, обратная границе Хемминга)
Пусть числа 𝑞, 𝑛, 𝑀, 𝑑 ∈ ℕ таковы, что 𝑀 ≤
𝑞 𝑛
| 𝑆 𝑑 ( 𝟎)|
. Тогда существует ( 𝑛, 𝑀, 𝑑) 𝑞-код.
Доказательство. Пусть 𝐶 = {𝒂1, … , 𝒂| 𝐶|} — код максимальной мощности с кодовым расстоянием 𝑑
и длиной слов 𝑛. Тогда шары радиуса 𝑑 с центрами в кодовых словах покрывают целиком
множество 𝔸 𝑞
𝑛
(иначе код 𝐶 можно было пополнить любым из слов, не лежащих ни в одном из этих
шаров). Отсюда ∑ |𝑆 𝑑(𝒂𝑗)|
| 𝐶|
𝑗=1 ≥ 𝑞 𝑛
, следовательно, | 𝐶| ≥ 𝑀.
Коды, достигающие границу Хемминга, называются совершенными или плотно упакованными.
2.3.2. Граница Синглтона
Теорема. (R.C. Singleton)
Для любого ( 𝑛, 𝑀, 𝑑) 𝑞-кода имеем 𝑀 ≤ 𝑞 𝑛−𝑑+1
.
Доказательство. Пусть 𝐶 = { 𝒂1, … , 𝒂 𝑀} — ( 𝑛, 𝑀, 𝑑) 𝑞-код. Рассмотрим слова { 𝒂𝑖
′}𝑖=1
𝑀
, где 𝒂𝑖
′
получено
из 𝒂𝑖 отбрасыванием ( 𝑑 − 1) последних координат. Так как 𝑑(𝒂𝑖, 𝒂𝑗) ≥ 𝑑 для любых 𝑖, 𝑗, то все слова
𝒂𝑖
′
различны. Их количество не превосходит числа всех 𝑞-ичных слов длины ( 𝑛 − 𝑑 + 1). Поэтому
𝑀 ≤ 𝑞 𝑛−𝑑+1
.
Теорема доказана.
Коды, на которых достигается граница Синглтона, называются MDS-кодами (maximum distance
separable codes).
www.dainiak.com
2.3.3. Граница Плоткина
Теорема. (M. Plotkin)
Пусть 𝑛𝑟 < 𝑑, где 𝑟 ≔ 1 − 1
𝑞
. Тогда для любого ( 𝑛, 𝑀, 𝑑) 𝑞-кода имеем 𝑀 ≤ ⌊
𝑑
𝑑−𝑛𝑟
⌋.
Доказательство. Рассмотрим матрицу, в которой по строкам выписаны все кодовые слова:
(
𝒂1
⋮
𝒂 𝑀
).
Элементы этой матрицы будем обозначать 𝑎𝑖𝑗. Оценим снизу и сверху следующую сумму:
𝑇 ≔ ∑ 𝟙 𝑎 𝑖𝑘≠𝑎 𝑗𝑘
1≤ 𝑘≤𝑛
1≤𝑖<𝑗≤𝑀
(через 𝟙… обозначен индикатор того, что условие … выполняется).
Имеем
𝑇 = ∑ ∑ 𝟙 𝑎 𝑖𝑘≠𝑎 𝑗𝑘
1≤𝑘≤𝑛1≤𝑖<𝑗≤𝑀
= ∑ 𝑑(𝒂𝑖, 𝒂𝑗)
1≤𝑖<𝑗≤𝑀
≥
𝑀 ⋅ ( 𝑀 − 1)
2
⋅ 𝑑.
С другой стороны,
𝑇 = ∑ ∑ 𝟙 𝑎 𝑖𝑘≠𝑎 𝑗𝑘
1≤𝑖<𝑗≤𝑀1≤𝑘≤𝑛
.
Зафиксируем произвольное 𝑘. Пусть среди кодовых слов ровно 𝑥 𝑠 слов имеют 𝑘-ю координату,
равную 𝑠. Тогда
∑ 𝟙 𝑎 𝑖𝑘≠𝑎 𝑗𝑘
1≤𝑖<𝑗≤𝑀
= ∑ 𝑥 𝑠′ ⋅ 𝑥 𝑠′′
𝑠′
≠𝑠′′
.
Имеем
∑ 𝑥 𝑠′ ⋅ 𝑥 𝑠′′
𝑠′
≠𝑠′′
=
1
2
⋅ ((∑ 𝑥 𝑠
𝑠
)
2
− ∑ 𝑥 𝑠
2
𝑠
) =
1
2
⋅ (𝑀2
− ∑ 𝑥 𝑠
2
𝑠
) ≤
1
2
⋅ (𝑀2
− 𝑞 ⋅
𝑀2
𝑞2
) =
𝑀2
2
(1 −
1
𝑞
).
(Выше мы учли, что минимум выражения ∑ 𝑥 𝑠
2
𝑠 достигается, когда все 𝑥 𝑠 равны 𝑀 𝑞⁄ , — это
неравенство Коши—Буняковского.)
Из выведенных неравенств мы получаем оценку
𝑇 = ∑ ∑ 𝟙 𝑎 𝑖𝑘≠𝑎 𝑗𝑘
1≤𝑖<𝑗≤ 𝑀1≤𝑘≤𝑛
≤
𝑛𝑀2
2
(1 −
1
𝑞
).
Сопоставим верхнюю и нижнюю оценки для 𝑇:
𝑀 ⋅ ( 𝑀 − 1)
2
⋅ 𝑑 ≤ 𝑇 ≤
𝑛𝑀2
2
(1 −
1
𝑞
).
Отсюда ( 𝑀 − 1) ⋅ 𝑑 ≤ 𝑛𝑟𝑀, и, стало быть, 𝑀( 𝑑 − 𝑛𝑟) ≤ 𝑑. Так как 𝑑 − 𝑛𝑟 > 0 по условию и 𝑀 ∈ ℤ, то
𝑀 ≤ ⌊
𝑑
𝑑−𝑟𝑛
⌋.
Теорема доказана.
2.3.4. Граница Элайеса—Бассалыго
2.3.4.1. Вложения метрических пространств
Метрическое пространство — это множество с заданной на нём метрикой.
Примеры:
 ({0,1} 𝑛
, 𝑑( 𝒂, 𝒃)) — метрическое пространство Хемминга (здесь 𝑑 — метрика Хемминга).
www.dainiak.com
 (ℝ 𝑛
, 𝑑̃( 𝒂, 𝒃)) — евклидово метрическое пространство (здесь 𝑑̃( 𝒂, 𝒃) ≔ √∑ ( 𝑎𝑖 − 𝑏𝑖)2
𝑖 —
обычная евклидова метрика).
Вложение метрического пространства 𝑈 в метрическое пространство 𝑉 — это отображение 𝜙: 𝑈 →
𝑉, сохраняющее метрику:
dist 𝑈 ( 𝑥, 𝑦) = dist 𝑉 (𝜙( 𝑥), 𝜙( 𝑦)).
Вложение 𝑛-мерного хеммингова пространства в евклидово 𝑛-мерное пространство при 𝑛 > 1
сделать не получится, но можно выполнить отображение, сохраняющее определённую информацию
о метрике. Сопоставим каждому вектору 𝒂 ∈ {0,1} 𝑛
вектор 𝒙 𝒂
∈ ℝ 𝑛
по правилу:
𝑥 𝑖
𝒂
= {
1, если 𝑎𝑖 = 1
−1, если 𝑎𝑖 = 0
.
При этом
 𝑑̃(𝒙 𝒂
, 𝒙 𝒃
) = 2 ⋅ √𝑑( 𝒂, 𝒃),
 ⟨𝒙 𝒂
, 𝒙 𝒃
⟩ = 𝑛 − 2 ⋅ 𝑑( 𝒂, 𝒃),
 ‖ 𝒙 𝒂‖ = √ 𝑛 (здесь ‖⋅‖ — евклидова норма).
2.3.4.2. Системы векторов в евклидовом пространстве
Лемма (о тупоугольной системе векторов).
Пусть 𝒚, 𝒙1, … , 𝒙 𝑚 ∈ ℝ 𝑛
таковы, что выполнено
 ⟨ 𝒙𝑖, 𝒚⟩ > 0 для 𝑖 = 1, … , 𝑚,
 ⟨𝒙𝑖, 𝒙𝑗⟩ ≤ 0 при 𝑖 ≠ 𝑗.
Тогда 𝒙1, … , 𝒙 𝑚 линейно независимыи, в частности, 𝑚 ≤ 𝑛.
Доказательство. Рассмотрим произвольную нулевую линейную комбинацию: 𝑐1 𝒙1 + ⋯ + 𝑐 𝑚 𝒙 𝑚 =
𝟎. Положим
Pos ≔ { 𝑖 ∣∣ 𝑐𝑖 > 0 }, Neg ≔ { 𝑖 ∣∣ 𝑐𝑖 < 0}.
Нам нужно доказать, что Pos = Neg = ∅. Допустим, что это не так, и придём к противоречию. Пусть,
например, Pos ≠ ∅ (быть может, при этом Neg = ∅). Положим
𝒛 ≔ ∑ 𝑐𝑖 𝒙𝑖
𝑖∈Pos
= ∑ (−𝑐𝑗)𝒙𝑗
𝑗∈Neg
.
Имеем
⟨ 𝒛, 𝒚⟩ = ∑ 𝑐𝑖⟨ 𝒙𝑖, 𝒚⟩
𝑖∈Pos
> 0.
Отсюда следует, что 𝒛 ≠ 𝟎. Имеем
𝒛 ≔ ∑ 𝑐𝑖 𝒙𝑖
𝑖∈Pos
= ∑ (−𝑐𝑗)𝒙𝑗
𝑗∈Neg
≠ 𝟎.
Рассмотрим теперь соотношения
0 < ⟨ 𝒛, 𝒛⟩ = ⟨ ∑ 𝑐𝑖 𝒙𝑖
𝑖∈Pos
, ∑ (−𝑐𝑗)𝒙𝑗
𝑗∈Neg
⟩ = ∑ 𝑐𝑖(−𝑐𝑗) ⋅ ⟨𝒙𝑖, 𝒙𝑗⟩
𝑖∈Pos
𝑗∈Neg
≤ 0
— противоречие!
Лемма доказана.
www.dainiak.com
2.3.4.3. Доказательство теоремы Элайеса—Бассалыго
Теорема. (P. Elias, Л.А. Бассалыго)
Для любого ( 𝑛, 𝑀, 𝑑)2-кода, где 𝑑 ≤ 𝑛 2⁄ , выполнено неравенство
𝑀 ≤
𝑛2 𝑛
|𝑆⌊ 𝜏𝑛−1⌋ |
,
где 𝜏 = 1−√1−2𝛿
2
, 𝛿 = 𝑑
𝑛
. Через 𝑆⌊ 𝜏𝑛−1⌋ мы сокращённо обозначаем шар 𝑆⌊ 𝜏𝑛−1⌋ ( 𝟎).
Доказательство. Положим 𝛿 ≔ 𝑑
𝑛
, 𝜏 ≔ 1−√1−2𝛿
2
и 𝑡 ≔ ⌊ 𝜏𝑛 − 1⌋.
Пусть 𝐶 — ( 𝑛, 𝑀, 𝑑)-код. Положим deg 𝑡 𝐶 ≔ max
𝒃∈{0,1} 𝑛
| 𝐶 ∩ 𝑆𝑡( 𝒃)|. Имеем
| 𝐶| ⋅ | 𝑆𝑡| = ∑ ∑ 𝟙 𝑑( 𝒂,𝒃)≤𝑡
𝒃∈{0,1} 𝑛
𝒂∈𝐶
= ∑ ∑ 𝟙 𝑑( 𝒂,𝒃)≤𝑡
𝒂∈𝐶𝒃∈{0,1} 𝑛
≤ 2 𝑛
⋅ deg 𝑡 𝐶.
Отсюда 𝑀 ≤
2 𝑛 ⋅deg 𝑡 𝐶
| 𝑆 𝑡|
. Осталось доказать, что при выбранном 𝑡 выполнено неравенство deg 𝑡 𝐶 ≤ 𝑛.
Пусть 𝒃 ∈ {0,1} 𝑛
, и 𝒂1, … , 𝒂 𝑚 ∈ 𝐶 ∩ 𝑆𝑡( 𝒃) (𝒂𝑖 ≠ 𝒂𝑗 при 𝑖 ≠ 𝑗). Нам нужно доказать, что 𝑚 ≤ 𝑛.
Сопоставим словам 𝒃, 𝒂1, …, 𝒂 𝑚 векторы 𝒚, 𝒙1, … , 𝒙 𝑚 ∈ ℝ 𝑛
так (на примере 𝒃):
𝑦𝑖 = {
1 √ 𝑛⁄ , если 𝑏𝑖 = 1,
−1 √ 𝑛⁄ , если 𝑏𝑖 = 0.
При этом
⟨ 𝒙𝑖, 𝒚⟩ =
1
𝑛
(𝑛 − 2𝑑( 𝒂𝑖, 𝒃)) ≥
1
𝑛
( 𝑛 − 2𝑡) > 1 − 2𝜏
и
⟨𝒙𝑖, 𝒙𝑗 ⟩ =
1
𝑛
(𝑛 − 2𝑑(𝒂𝑖, 𝒂𝑗)) ≤
1
𝑛
( 𝑛 − 2𝑑) = 1 − 2𝛿.
Похоже, можно применить лемму о векторах в ℝ 𝑛
, но для этого придётся «подправить» векторы 𝒚
и 𝒙1, … 𝒙 𝑚. Для этого перейдём к векторам
2𝜏𝒚, ( 𝒙1 − (1 − 2𝜏) 𝒚),… , ( 𝒙 𝑚 − (1 − 2𝜏) 𝒚).
Для этих векторов получаем
⟨( 𝒙𝑖 − (1 − 2𝜏) 𝒚),2𝜏𝒚⟩ = 2𝜏⟨ 𝒙𝑖, 𝒚⟩− 2𝜏(1 − 2𝜏)⟨ 𝒚, 𝒚⟩ = 2𝜏⟨ 𝒙𝑖, 𝒚⟩ − 2𝜏(1 − 2𝜏) > 0
и
⟨( 𝒙𝑖 − (1 − 2𝜏) 𝒚),(𝒙𝑗 − (1 − 2𝜏) 𝒚)⟩ = ⟨𝒙𝑖, 𝒙𝑗⟩ + (1 − 2𝜏)2⟨ 𝒚, 𝒚⟩ − (1 − 2𝜏)(⟨ 𝒙𝑖, 𝒚⟩ + ⟨𝒙𝑗, 𝒚⟩)
≤ 1 − 2𝛿 + (1 − 2𝜏)2
− 2(1 − 2𝜏)2
= −2(2𝜏2
− 2𝜏 + 𝛿) = 0.
Отсюда, по лемме о тупоугольной системе векторов, следует, что 𝑚 ≤ 𝑛.
Теорема доказана.
3. Линейные коды
3.1. Основные понятия
Пусть 𝑞 — степень простого числа и символы кодовых слов — элементы конечного поля 𝔽 𝑞.
( 𝑛, 𝑀, 𝑑) 𝑞-код 𝐶 называется линейным, если он является линейным подпространством пространства
𝔽 𝑞
𝑛
, то есть линейная комбинация кодовых слов также является кодовым словом.
Если dim 𝐶 = 𝑘, то говорят, что задан линейный [ 𝑛, 𝑘, 𝑑] 𝑞-код.
Пример линейного двоичного кода — код с проверкой чётности:
𝐶 ≔ {( 𝑎1,… , 𝑎 𝑛) ∈ 𝔽2
𝑛
∣ ∑𝑎𝑖 = 0}
Один из базисов этого кода:
(1,0,0, … ,0,1)
(0,1,0, … ,0,1)
(0,0,1, … ,0,1)
www.dainiak.com
⋮
(0,0,0, … ,1,1)
Если выписать базис линейного [ 𝑛, 𝑘, 𝑑] 𝑞-кода построчно в виде матрицы размера 𝑘 × 𝑛, получим
порождающую матрицу кода.
Итак, для задания [ 𝑛, 𝑘, 𝑑] 𝑞-кода достаточно указать его порождающую матрицу 𝐺 ∈ 𝔽 𝑞
𝑘×𝑛
. Число
линейных комбинаций 𝑘 базисных векторов с коэффициентами из 𝔽 𝑞 равно 𝑞 𝑘
, поэтому каждый
[ 𝑛, 𝑘, 𝑑] 𝑞-код является ( 𝑛, 𝑞 𝑘
, 𝑑) 𝑞-кодом. Если линейный [ 𝑛, 𝑘, 𝑑] 𝑞-кода задан порождающей
матрицей 𝐺, а исходное сообщение представлено как вектор 𝒙 ∈ 𝔽 𝑞
𝑘
, то закодировать его можно
быстро и просто:
𝒙
кодирование
→ 𝒙 𝑇
𝐺 ∈ 𝔽 𝑞
𝑛
.
Обратно, если закодированное сообщение 𝒂 ∈ 𝔽 𝑞
𝑛
было принято без ошибок, декодируем его,
решая, например, методом Гаусса систему 𝒙 𝑇
𝐺 = 𝒂.
Порождающую матрицу 𝐺 ∈ 𝔽 𝑞
𝑘×𝑛
линейными преобразованиями и перестановками строк и
столбцов можно привести к каноническому виду:
(
1 0 ⋯ 0
0 1 ⋯ 0
⋮ ⋮ ⋱ ⋮
0 0 ⋯ 1 ∣
∣
∣
∣
∣
∣
𝐺̃ ),
где 𝐺̃ ∈ 𝔽 𝑞
𝑘×( 𝑛−𝑘)
.
Тогда кодирование будет систематическим:
( 𝑥1,… , 𝑥 𝑘)
кодирование
→ (𝑥1,… , 𝑥 𝑘 ∣ 𝒙𝐺̃).
Если порождающая матрица кода задана в каноническом виде, то кодирование будет
систематическим и слово ( 𝑥1, …, 𝑥 𝑘) переходит в
(𝑥1, …, 𝑥 𝑘 ∣ 𝒙𝐺̃) = ( 𝑥1,… , 𝑥 𝑘, 𝑥̃1,… , 𝑥̃ 𝑛−𝑘).
Разряды 𝑥1,… , 𝑥 𝑘 называются информационными, а 𝑥̃1,… , 𝑥̃ 𝑛−𝑘 — проверочными.
Если матрица 𝐺 исходно задана не в каноническом виде, а мы приводим её к каноническому виду,
то получается в общем случае не тот же код, а эквивалентный ему. Формально, коды 𝐶1 и 𝐶2
эквивалентны, если существует перестановка 𝜋 и константы 𝑟1, …, 𝑟𝑛 ∈ 𝔽 𝑞 ∖ {0}, такие, что
( 𝑎1, …, 𝑎 𝑛 ) ∈ 𝐶1 ⇔ (𝑟1 𝑎 𝜋(1),… , 𝑟𝑛 𝑎 𝜋( 𝑛)) ∈ 𝐶2.
Для эквивалентных кодов 𝑑( 𝐶1) = 𝑑( 𝐶2).
Утверждение (о кодовом расстоянии линейных кодов).
Для любого линейного кода 𝐶 имеем
𝑑( 𝐶) = min
𝒂∈𝐶
𝒂≠𝟎
‖ 𝒂‖.
Доказательство. Поскольку 𝟎 ∈ 𝐶, то
𝑑( 𝐶) ≝ min
𝒂,𝒃∈𝐶
𝒂≠𝒃
𝑑( 𝒂, 𝒃) ≤ min
𝒂∈𝐶
𝒂≠𝟎
𝑑( 𝒂, 𝟎) = min
𝒂∈𝐶
𝒂≠𝟎
‖ 𝒂‖.
В обратную сторону. Пусть кодовое расстояние достигается на паре слов 𝒂∗
, 𝒃∗
. Тогда так как
( 𝒂∗
− 𝒃∗) ∈ 𝐶, получаем
𝑑( 𝐶) = 𝑑( 𝒂∗
, 𝒃∗) = ‖ 𝒂∗
− 𝒃∗‖ ≥ min
𝒂∈ 𝐶
𝒂≠𝟎
‖ 𝒂‖.
Утверждение доказано.
Проверочная матрица 𝐻 линейного кода — это матрица однородной системы линейных уравнений,
которым удовлетворяет код. Например, для кода с проверкой чётности 𝐻 = (11…1). Для любого
www.dainiak.com
кодового слова 𝒂, по определению матрицы 𝐻, выполнено равенство 𝐻𝒂 𝑇
= 𝟎. Для [ 𝑛, 𝑘, 𝑑] 𝑞-кода
𝐻 ∈ 𝔽 𝑞
( 𝑛−𝑘)×𝑛
.
Утверждение.
Если 𝐺 и 𝐻 — порождающая и проверочная матрицы линейного [ 𝑛, 𝑘, 𝑑] 𝑞-кода, то 𝐻𝐺 𝑇
= 𝟎( 𝑛−𝑘)×𝑘
.
Доказательство: достаточно заметить, что каждая строка матрицы 𝐺 — это кодовое слово, а значит,
она удовлетворяет системе, задаваемой 𝐻.
Если коды 𝐶1 и 𝐶2 таковы, что проверочная матрица 𝐶1 является порождающей матрицей для 𝐶2, то
эти коды называют двойственными. Коды 𝐶1 и 𝐶2 двойственныт. и т.т., когда ⟨ 𝒂1, 𝒂2⟩ = 0 для любых
слов 𝒂1 ∈ 𝐶1, 𝒂2 ∈ 𝐶2. Поэтому двойственные коды называются также ортогональными.
Пусть 𝐻 — проверочная матрица кода 𝐶, и пусть 𝒂 ∈ 𝐶. Если при передаче 𝒂 по каналу произошло 𝑡
ошибок, на выходе из канала имеем слово 𝒃. Вектор 𝒆 ≔ 𝒃 − 𝒂 называется вектором ошибок.
Очевидно, ‖ 𝒆‖ = 𝑡. Исправить ошибки в 𝒃 — то же самое, что найти вектор 𝒆. Используем равенство
𝐻𝒃 𝑇
= 𝐻𝒂 𝑇
+ 𝐻𝒆 𝑇
= 𝐻𝒆 𝑇
.
Получаем задачу: найти вектор 𝒆, такой, что
{
‖ 𝒆‖ <
𝑑( 𝐶)
2
,
𝐻𝒆 𝑇
= 𝐻𝒃 𝑇
.
Утверждение.
Если решение этой системы существует, то оно единственное.
Доказательство. Пусть нашлись разные решения 𝒆1 ≠ 𝒆2. Тогда ‖ 𝒆1 − 𝒆2‖ ≤ ‖ 𝒆1‖ + ‖ 𝒆2‖ < 𝑑( 𝐶)и
𝐻( 𝒆1 − 𝒆2) 𝑇
= 0 — противоречие.
Можно составить таблицу решений системы
{
‖ 𝒆‖ <
𝑑( 𝐶)
2
,
𝐻𝒆 𝑇
= 𝒔.
для всевозможных 𝒔. При получении из канала слова 𝒃 мы вычисляем 𝒔 ≔ 𝐻𝒃 𝑇
(синдром слова 𝒃), и
для этого 𝒔 смотрим в таблице соответствующий вектор 𝒆. Декодированное сообщение — решение
системы
𝒙 𝑇
𝐺 = ( 𝒃 − 𝒆).
3.2. Теорема Варшамова—Гилберта
Утверждение. (О связи кодового расстояния и проверочной матрицы)
Линейный код, определяемый проверочной матрицей 𝐻, имеет расстояние 𝑑 т. и т.т., когда любые
( 𝑑 − 1) столбцов 𝐻 линейно независимы, и найдутся 𝑑 линейно зависимыхстолбцов в 𝐻.
Доказательство. Пусть 𝒂 = ( 𝑎1,… , 𝑎 𝑛) ≠ 𝟎 — произвольное кодовое слово кода с проверочной
матрицей 𝐻. Пусть 𝐻1,… , 𝐻 𝑛 — столбцы 𝐻. Имеем
𝐻𝒂 𝑇
= 𝑎1 ⋅ 𝐻1 + ⋯+ 𝑎 𝑛 ⋅ 𝐻 𝑛.
Если 𝑖1,… , 𝑖 𝑡 — все ненулевые координаты 𝒂, то
𝑎1 𝐻1 + ⋯+ 𝑎 𝑛 𝐻 𝑛 = 𝑎𝑖1
𝐻𝑖1
+ ⋯+ 𝑎𝑖 𝑡
𝐻𝑖 𝑡
.
Так как 𝒂 — кодовое слово, то 𝐻𝒂 𝑇
= 𝟎, то есть
𝑎𝑖1
𝐻𝑖1
+ ⋯+ 𝑎𝑖 𝑡
𝐻𝑖 𝑡
= 𝟎.
Мы получили, что в коде есть слово веса не более 𝑡 т. и т.т., когда некоторые 𝑡 столбцов матрицы 𝐻
линейно зависимы. Осталось воспользоваться формулой, справедливой для любых линейных кодов:
𝑑( 𝐶) = min
𝒂∈𝐶
𝒂≠𝟎
‖ 𝒂‖.
Утверждение доказано.
www.dainiak.com
Одним из важнейший достаточных условий существования линейныхкодов является следующая
теорема.
Теорема. (Р.Р. Варшамов, E.N. Gilbert)
Пусть натуральные числа 𝑛, 𝑘, 𝑑′
таковы, что
∑ (
𝑛 − 1
𝑗
)
𝑑′
−1
𝑗=0
< 2 𝑛−𝑘
.
Тогда существует [ 𝑛, 𝑘, 𝑑]-код, где 𝑑 > 𝑑′
.
Доказательство. Покажем, что в условиях теоремы можно построить матрицу 𝐻 ∈ 𝔽2
( 𝑛−𝑘)×𝑛
, у
которой любые 𝑑′
столбцов линейно независимы. Будем строить матрицу по столбцам. Пусть уже
выбраны 𝑚 столбцов (где 𝑚 < 𝑛) и требуется выбрать ( 𝑚 + 1)-й столбец. Этот новый столбец не
должен образовывать нулевую линейную комбинацию с ( 𝑑′
− 1) или менее из уже выбранных
столбцов. Так как мы работаем в 𝔽2, то это равносильно тому, что выбираемый столбец не равен
сумме ( 𝑑′
− 1) или менее уже выбранных столбцов. Количество таких сумм равно
∑ (
𝑚
𝑗
)
𝑑′
−1
𝑗=0
≤ ∑ (
𝑛 − 1
𝑗
)
𝑑′
−1
𝑗=0
< 2 𝑛−𝑘
.
Итак, запрещённых для выбора столбцов у нас оказывается строго меньше 2 𝑛−𝑘
, а всего векторов
длины ( 𝑛 − 𝑘) ровно 2 𝑛−𝑘
. Значит, найдётся вектор из 𝔽2
𝑛−𝑘
, который можно добавить в качестве
очередного столбца.
Теорема доказана.
3.3. Двоичный кодХемминга
В этом разделе мы введём коды Хемминга, пожалуй, самые простые нетривиальные линейные
коды.
Рассмотренный нами ранее простейший двоичный код с проверкой чётности
{( 𝑎1,… , 𝑎 𝑛) ∈ 𝔽2
𝑛
∣ ∑𝑎𝑖 = 0}
может обнаруживать одну ошибку, т.к. если один разряд 𝑎𝑖 заменить на противоположный,
соотношение ∑𝑎𝑖 = 0 нарушится. Но исправить ошибку не удастся. Хочется построить двоичный код,
исправляющий хотя бы одну ошибку. Для этого вместо «глобального» контроля чётности применим
несколько «дихотомических» проверок на чётность.
Пример для 𝑛 = 7. Рассмотрим код, удовлетворяющий соотношениям
𝑎4 + 𝑎5 + 𝑎6 + 𝑎7 = 0,
𝑎2 + 𝑎3 + 𝑎6 + 𝑎7 = 0,
𝑎1 + 𝑎3 + 𝑎5 + 𝑎7 = 0.
Проверочная матрица этого кода:
(
0 0 0 1 1 1 1
0 1 1 0 0 1 1
1 0 1 0 1 0 1
).
Столбцы матрицы — всевозможные ненулевые векторы высоты 3: 𝑗-й столбец суть двоичная запись
числа 𝑗. Любая пара столбцов л.н.з., значит 𝑑( 𝐶) ≥ 3, значит, этот код исправляет одну ошибку
и обнаруживает две. Если ошибка случается в 𝑎𝑗, то можно вычислить левые части проверочных
соотношений, и они дадут двоичную запись 𝑗, например:
𝑎4 + 𝑎5̅̅̅ + 𝑎6 + 𝑎7 = 1
𝑎2 + 𝑎3 + 𝑎6 + 𝑎7 = 0
𝑎1 + 𝑎3 + 𝑎5̅̅̅ + 𝑎7 = 1
www.dainiak.com
Общий случай: 𝑛 ≔ 2 𝑚
− 1 для некоторого 𝑚. Двоичный код Хемминга длины 𝑛 с параметрами
[2 𝑚
− 1, 2 𝑚
− 𝑚 − 1, 3] определяется проверочной матрицей 𝐻 ∈ 𝔽2
𝑚×𝑛
, столбцы которой —
всевозможные двоичные векторы высоты 𝑚:
(
1 0 1 ⋯ 1
0 1 1 ⋯ 1
⋮ ⋮ ⋮ ⋯ ⋮
0 0 0 ⋯ 1
).
Теорема Хемминга утверждает, что для любого ( 𝑛, 𝑀, 𝑑)-кода выполнено неравенство 𝑀 ≤
2 𝑛
∑ ( 𝑛
𝑘
)
⌊( 𝑑−1) 2⁄ ⌋
𝑘=0
. Напомним, что коды, на которых достигается граница Хемминга, называются
совершенными или плотно упакованными. Нетрудно показать, что код Хемминга совершенен.
Действительно, для кода Хемминга имеем 𝑛 = 2 𝑚
− 1, 𝑀 = 22 𝑚
−𝑚−1
и 𝑑 = 3. Отсюда
∑ ( 𝑛
𝑘
)
⌊( 𝑑−1) 2⁄ ⌋
𝑘=0 = 𝑛 + 1 = 2 𝑚
= 2 𝑛
𝑀⁄ .
3.4. Границымощностей для линейных кодов
3.4.1. Граница Синглтона для линейных кодов
Утверждение. (Граница Синглтона для линейных кодов)
Для любого [ 𝑛, 𝑘, 𝑑] 𝑞-кода выполнено неравенство 𝑘 ≤ 𝑛 − 𝑑 + 1.
Доказательство. По теореме Синглтона, для любого ( 𝑛, 𝑀, 𝑑) 𝑞-кода выполнено 𝑀 ≤ 𝑞 𝑛−𝑑+1
. С
другой стороны, для линейного кода 𝑀 = 𝑞 𝑘
.
3.4.2. Граница Грайсмера—Соломона—Штиффлера
Теорема об остаточном коде. (G. Solomon, J.J. Stiffler)
Если существует [ 𝑛, 𝑘, 𝑑] 𝑞-код, то существует и [ 𝑛 − 𝑑, 𝑘 − 1, 𝑑′] 𝑞-код, где 𝑑′
≥ 𝑑 𝑞⁄ .
Доказательство. Пусть 𝐺 — порождающая матрица некоторого [ 𝑛, 𝑘, 𝑑] 𝑞-кода 𝐶. Б.о.о. будем
считать, что первая строка 𝐺 содержит ровно 𝑑 ненулевых элементов и имеет вид ( 𝑟1 … 𝑟 𝑑0… 0).
Порождающая матрица кода 𝐶:
𝐺 = (
𝑟1 … 𝑟 𝑑 0… 0
⋯ 𝐺′ ).
Имеем 𝐺′
∈ 𝔽 𝑞
( 𝑘−1)×( 𝑛−𝑑)
. Покажем, что rk 𝐺′
= 𝑘 − 1. Допустим противное: некоторая
нетривиальная линейная комбинация строк 𝐺′
равняется 𝟎. Тогда линейная комбинация
соответствующих строк 𝐺 равна ( 𝑡1 … 𝑡 𝑑0 … 0), где ∀𝑖 ( 𝑡𝑖 ≠ 0).
Линейная комбинация 𝑈 некоторых строк 𝐺 равна ( 𝑡1 … 𝑡 𝑑0 …0), где ∀𝑖 ( 𝑡𝑖 ≠ 0). Т.к. 𝔽 𝑞 — поле, то
∃𝑠 ∈ 𝔽 𝑞, такой, что 𝑠𝑡 𝑑 = −𝑟 𝑑. Тогда 𝑠 ⋅ 𝑈 + ( 𝑟1 … 𝑟𝑑0… 0) — линейная комбинация строк 𝐺, равная
(( 𝑠𝑡1 + 𝑟1)… ( 𝑠𝑡 𝑑−1 + 𝑟𝑑−1) 00… 0).
Это противоречит условию 𝑑( 𝐶) = 𝑑.
Итак, 𝐺′
∈ 𝔽 𝑞
( 𝑘−1)×( 𝑛−𝑑)
и rk 𝐺′
= 𝑘 − 1. Значит, 𝐺′
является порождающей матрицей некоторого
[ 𝑛 − 𝑑, 𝑘 − 1, 𝑑′] 𝑞-кода 𝐶′
(этот код называется остаточным для исходного кода 𝐶).
Рассмотрим любой ненулевой вектор кода 𝐶′
:
𝒂′
≔ ( 𝑎1
′
,… , 𝑎 𝑛−𝑑
′ ) ≠ 𝟎,
такой, что ‖ 𝒂′‖ = 𝑑′
.
В коде 𝐶 есть вектор вида
( 𝑎1, …, 𝑎 𝑑, 𝑎1
′
, … , 𝑎 𝑛−𝑑
′ ).
Пусть 𝑓1, … , 𝑓𝑞 — все элементы поля 𝔽 𝑞.
Коду 𝐶 принадлежат все векторы вида
www.dainiak.com
(( 𝑎1 − 𝑓𝑖 𝑟1), … ,( 𝑎 𝑑 − 𝑓𝑖 𝑟 𝑑), 𝑎1
′
, … , 𝑎 𝑛−𝑑
′
).
Запишем эти 𝑞 векторов построчно в виде матрицы и оценим количество ненулевых элементов в
ней:
(
( 𝑎1 − 𝑓1 𝑟1) … ( 𝑎 𝑑 − 𝑓1 𝑟 𝑑) 𝑎1
′
… 𝑎 𝑛−𝑑
′
( 𝑎1 − 𝑓2 𝑟1) … ( 𝑎 𝑑 − 𝑓2 𝑟 𝑑) 𝑎1
′
… 𝑎 𝑛−𝑑
′
⋮ ⋮ ⋮ ⋮ ⋮ ⋮
(𝑎1 − 𝑓𝑞 𝑟1) … (𝑎 𝑑 − 𝑓𝑞 𝑟𝑑) 𝑎1
′
… 𝑎 𝑛−𝑑
′
)
.
В каждой подстроке вида 𝑎1
′
, … , 𝑎 𝑛−𝑑
′
ровно 𝑑′
элементов отличны от нуля. В каждом из первых 𝑑
столбцов ровно один ноль. Поэтому в рассмотренной матрице 𝑑( 𝑞 − 1) + 𝑞𝑑′
ненулевых элементов.
С другой стороны, каждая строка матрицы — ненулевой вектор кода 𝐶, значит, в матрице не менее
чем 𝑞𝑑 ненулевых элементов. Отсюда 𝑑( 𝑞 − 1) + 𝑞𝑑′
≥ 𝑞𝑑, и, следовательно 𝑑′
≥ 𝑑 𝑞⁄ .
Теорема доказана.
Теорема. (J.H. Griesmer, G. Solomon, J.J. Stiffler)
Для любого [ 𝑛, 𝑘, 𝑑] 𝑞-кода имеем
𝑛 ≥ ∑ ⌈
𝑑
𝑞 𝑖
⌉
𝑘−1
𝑖=0
.
Доказательство. Утверждение очевидно при 𝑘 = 1. Предположим, что оно выполнено для кодов
с размерностью ≤ 𝑘 − 1 и докажем его для [ 𝑛, 𝑘, 𝑑] 𝑞-кодов. Обозначим через 𝑁( 𝑘, 𝑑) минимальную
длину слов у кода с размерностью 𝑘 и расстоянием 𝑑. Пусть 𝐶 — какой-нибудь [ 𝑁( 𝑘, 𝑑), 𝑘, 𝑑] 𝑞-код.
Остаточный для 𝐶 код имеет параметры [ 𝑁( 𝑘, 𝑑) − 𝑑, 𝑘 − 1, 𝑑′] 𝑞, и, по предположению индукции,
для него справедливо неравенство
𝑁( 𝑘, 𝑑) − 𝑑 ≥ ∑ ⌈
𝑑′
𝑞 𝑖
⌉
𝑘−2
𝑖=0
.
Отсюда, с учётом предположения индукции и соотношения 𝑑′
≥ 𝑑 𝑞⁄ , получаем
𝑁( 𝑘, 𝑑) ≥ 𝑑 + ∑ ⌈
𝑑′
𝑞 𝑖
⌉
𝑘−2
𝑖=0
≥ 𝑑 + ∑ ⌈
𝑑
𝑞 𝑖+1
⌉
𝑘−2
𝑖=0
= ∑ ⌈
𝑑
𝑞 𝑖
⌉
𝑘−1
𝑖=0
.
Теорема доказана.
3.5. Графы-расширители и кодына их основе
3.5.1. Графы-расширители
Двудольный граф с долями 𝐿 и 𝑅 называется ( 𝑛, 𝑚, Δ, 𝛼, 𝑐)-расширителем, если
 | 𝐿| = 𝑛, | 𝑅| = 𝑚,
 deg 𝑢 = Δ для любого 𝑢 ∈ 𝐿,
 для любого 𝑆 ⊆ 𝐿 при | 𝑆| ≤ 𝛼𝑛 выполнено неравенство | 𝑁( 𝑆)| ≥ 𝑐 ⋅ | 𝑆|, где 𝑁( 𝑆) —
множество вершин в 𝑅, смежных с вершинами из 𝑆.
Графы-расширители также называются расширяющими, экспандерными графами или экспандерами
(от англ. expander). Начало применению расширительных свойств графов в кодировании положили
работы советских математиков М.С. Пинскера, Л.А. Бассалыго, Г.А. Маргулиса в 1970-х годах.
Теорема о существовании расширителей.
Пусть Δ ≥ 3, 𝑐 ≤ Δ − 2, 𝛼 < 1 и 𝑚 ≥ 4𝑛Δ2
√ 𝛼.
Тогда при всех натуральных 𝑛 существуют ( 𝑛, 𝑚, Δ, 𝛼, 𝑐)-расширители.
Доказательство. Построим случайный двудольный граф 𝐺 и докажем, что он с большой
вероятностью будет искомым. Зафиксируем множества 𝐿 и 𝑅 (| 𝐿| = 𝑛, | 𝑅| = 𝑚) и проведём по Δ
www.dainiak.com
рёбер из каждой вершины в 𝐿 в выбираемые равновероятно и независимо вершины в 𝑅 (в итоге
некоторые из этих Δ рёбер могут попасть в одни и те же вершины 𝑅).
Рёбра 𝐺 имеют естественную нумерацию, в том порядке, в котором мы определяли их концы в 𝑅
(сначала Δ рёбер из 1-й вершины 𝐿, затем Δ рёбер из 2-й вершины 𝐿 и т.д.).
Если 𝐺 не является расширителем, то найдётся такое 𝑆 ⊂ 𝐿, для которого | 𝑁( 𝑆)| < (Δ − 2) ⋅ | 𝑆|.
Оценим вероятность того, что фиксированное множество 𝑆 оказалось таким «плохим» при
случайном выборе концов рёбер из 𝑆 в 𝑅. А затем оценим вероятность того, что 𝐺 не расширитель,
по формуле
Pr[𝐺 плохой] = Pr[∃плохое 𝑆] ≤ ∑ Pr[𝑆 —плохое]
𝑆
.
Каждое ребро вида ( 𝑢, 𝑣), где 𝑢 ∈ 𝑆, 𝑣 ∈ 𝑁( 𝑆), отнесём к одному из двух типов. Если никакое ребро
из 𝑆 в 𝑁( 𝑆) с меньшим номером не ведёт в 𝑣, то ребро ( 𝑢, 𝑣) назовём «первопроходцем». В
противном случае назовём ( 𝑢, 𝑣) «дублем». Очевидно, всего будет 𝑁( 𝑆) «первопроходцев» и
(Δ ⋅ | 𝑆| − | 𝑁( 𝑆)|) «дублей».
Мы предполагаем, что | 𝑁( 𝑆)| < (Δ − 2) ⋅ | 𝑆|, а значит, «дублей» будет не менее 2 ⋅ | 𝑆|.
Вероятность того, что среди рёбер из 𝑆 в 𝑁( 𝑆) есть 2𝑠 дублей, не превосходит
(
Δ ⋅ | 𝑆|
2| 𝑆|
) (
Δ ⋅ | 𝑆|
𝑚
)
2| 𝑆|
.
Первый из сомножителей оценивает число способов выбрать рёбра-дубли, второй — вероятность
попадания конца «дубля» в одну из вершин в | 𝑁( 𝑆)|.
Значит,
Pr[𝐺 не расширитель] ≤ ∑ Pr[𝑆 «плохое»]
𝑆⊂𝐿
1≤| 𝑆|≤𝛼𝑛
≤ ∑ (
𝑛
𝑠
) (
Δ ⋅ 𝑠
2𝑠
) (
Δ ⋅ 𝑠
𝑚
)
2𝑠
1≤𝑠≤𝛼𝑛
.
С учётом оценки ( 𝑎
𝑏
) < (𝑒𝑎
𝑏
)
𝑏
и того, что при 𝑚 ≥ 4𝑛Δ2
√ 𝛼 выполняется неравенство
𝑒3
Δ4
𝛼𝑛2
4𝑚2 <
1
3
,
получаем
Pr[𝐺 не расширитель] ≤ ∑ (
𝑒𝑛
𝑠
)
𝑠
(
𝑒Δ𝑠
2𝑠
)
2𝑠
(
Δ𝑠
𝑚
)
2𝑠
1≤𝑠≤𝛼𝑛
= ∑ (
𝑒3
Δ4
𝑠𝑛
4𝑚2
)
𝑠
1≤𝑠≤ 𝛼𝑛
≤ ∑ (
𝑒3
Δ4
𝛼𝑛2
4𝑚2
)
𝑠
1≤𝑠≤𝛼𝑛
≤ ∑ (
1
3
)
𝑠
1≤𝑠≤𝛼𝑛
<
1
2
.
Итак, случайный двудольный мультиграф будет расширителем с вероятностью не менее 1
2
. Чтобы от
мультиграфа перейти к обычному графу, достаточно перенаправить концы рёбер-дублей в
произвольные вершины 𝑅. Свойства расширительности от этого могут только улучшиться.
Теорема доказана.
3.5.2. Коды на основе расширителей
Код на основе двудольного графа — это линейный двоичныйкод, строящийся следующим образом.
Вершинам из 𝐿 соответствуют переменные 𝑥1,… , 𝑥 𝑛. Вершинам из 𝑅 соответствуют уравнения: если
в вершину 𝑣 ∈ 𝑅 входят рёбра из вершин 𝑢 𝑖1
, …, 𝑢 𝑖 𝑙
, то уравнение будет 𝑥 𝑖1
+ ⋯+ 𝑥 𝑖 𝑙
= 0. Искомый
код состоит из всех слов ( 𝑥1 … 𝑥 𝑛), удовлетворяющих системе этих уравнений.
Например, для графа
www.dainiak.com
соответствующий код будет выглядеть так: {( 𝑥1 𝑥2 𝑥3 𝑥4) ∣ 𝑥1 + 𝑥2 + 𝑥4 = 0, 𝑥1 + 𝑥3 = 0}.
Коды на основе расширителей введены М. Сипсером и Д. Шпильманом, являются обобщением
низкоплотностных кодов (LDPC-codes) Р. Галлагера (R.G. Gallager).
Утверждение.
Код, построенный по двудольному графу, в котором | 𝐿| = 𝑛 и | 𝑅| = 𝑚, является двоичным
линейным [ 𝑛, 𝑘, 𝑑]-кодом, где 𝑘 ≥ 𝑛 − 𝑚.
Доказательство: код является множеством решений системы из 𝑚 уравнений с 𝑛 неизвестными, а
значит, он образует линейное пространство размерности не менее чем 𝑛 − 𝑚.
Теорема о кодовом расстоянии. (M. Sipser, D.A. Spielman)
Если 𝑐 > Δ
2
и 𝐶 — код, построенный на основе (𝑛, 𝑚, Δ, 𝛼, 𝑐)-расширителя, то 𝑑( 𝐶) > 𝛼𝑛.
Доказательство от противного. Допустим, что 𝑑( 𝐶) ≤ 𝛼𝑛. Тогда найдётся слово 𝒂 ∈ 𝐶, такое, что
𝒂 ≠ 𝟎 и ‖ 𝒂‖ ≤ 𝛼𝑛.
Пусть 𝐼 ≔ {𝑢1,… , 𝑢‖ 𝒂‖} — вершины из 𝐿, соответствующие единичным координатам 𝒂. Так как наш
граф — расширитель и ‖ 𝒂‖ ≤ 𝛼𝑛, то
| 𝑁( 𝐼)| ≥ 𝑐 ⋅ | 𝐼| >
Δ
2
⋅ | 𝐼|.
Всего из 𝐼 в 𝑁( 𝐼) ведёт ровно Δ ⋅ | 𝐼| рёбер. Поэтому среднее число рёбер, входящее в вершины 𝑁( 𝐼)
из 𝐼, равно
Δ ⋅ | 𝐼|
| 𝑁( 𝐼)|
<
Δ ⋅ | 𝐼|
Δ
2
⋅| 𝐼|
= 2.
Значит, в 𝑁( 𝐼) найдётся вершина, в которую входит ровно одно ребро из 𝐼. Получается, что среди
задающих код уравнений есть такое уравнение 𝑥 𝑖1
+ ⋯+ 𝑥 𝑖 𝑙
= 0, в котором ровно одна из
переменных на слове 𝒂 обращена в единицу. Но этого не может быть в предположении, что 𝒂
является решением этого уравнения. Противоречие.
Теорема доказана.
3.5.3. Алгоритм Сипсера—Шпильмана
3.5.3.1. Формулировка алгоритма декодирования
Пусть 𝑐 > 3Δ
4
, и 𝐶 — код, построенный на основе (𝑛, 𝑚, Δ, 𝛼, 𝑐)-расширителя. Пусть слово 𝒂′
получено
из некоторого кодового слова 𝒂 искажением не более чем
𝛼𝑛
4
битов. Тогда восстановить 𝒂, зная 𝒂′
,
можно с помощью следующего алгоритма (M. Sipser, D.A. Spielman):
1. Если 𝒂′
∈ 𝐶, то выводим 𝒂′
и завершаем работу.
2. Если 𝒂′
∉ 𝐶, то для 𝒂′
некоторые из уравнений (отвечающих вершинам в 𝑅) нарушены. Считаем
поочерёдно для каждого бита 𝒂′
число нарушенных уравнений, в которых он участвует. Если их >
Δ 2⁄ , инвертируем этот бит и идём на шаг 1.
3.5.3.2. Лемма о результативном бите
Чтобы доказать корректность алгоритма Сипсера—Шпильмана, нам потребуется следующая лемма.
Лемма о «результативном бите».
Пусть 𝑐 > 3Δ
4
, и 𝐶 — код, построенный на основе (𝑛, 𝑚, Δ, 𝛼, 𝑐)-расширителя. Пусть 𝒂′
∉ 𝐶, но при
этом 𝑑( 𝒂, 𝒂′) ≤ 𝛼𝑛 для некоторого 𝒂 ∈ 𝐶. Тогда в 𝒂′
найдётся бит, обращение которого на
www.dainiak.com
противоположный строго уменьшает число невыполненных для 𝒂′
уравнений. (Имеются в виду
уравнения, построенные по графу-расширителю.)
Доказательство. Пусть 𝒂′
— не кодовое слово, находящееся от ближайшего кодового на
расстоянии ≤ 𝛼𝑛. Пусть 𝐼 ⊂ 𝐿 — множество вершин, соответствующих координатам, в которых 𝒂′
отличается от ближайшего кодового слова.
Обозначим через 𝑁pass ( 𝐼)вершины из 𝑁( 𝐼), соответствующие уравнениям, выполненнымна слове
𝒂′
. Аналогично, пусть 𝑁fail( 𝐼)— вершины из 𝑁( 𝐼), отвечающие нарушенным уравнениям.
Так как наш граф расширитель, и | 𝐼| ≤ 𝛼𝑛, то
|𝑁pass( 𝐼)| + | 𝑁fail( 𝐼)| = | 𝑁( 𝐼)| ≥ 𝑐| 𝐼| >
3Δ
4
⋅ | 𝐼|.
Из каждой вершины 𝑁( 𝐼) в 𝐼 ведёт хотя бы одно ребро. При этом из каждой вершины 𝑁pass( 𝐼) в 𝐼
ведёт хотя бы два ребра: чтобы «обмануть» уравнение, нужно инвертировать в нём чётное
количество переменных. С другой стороны, число рёбер между 𝐼 и 𝑁( 𝐼) в точности равно Δ ⋅ | 𝐼|. Из
всего сказанного вытекает цепочка соотношений
Δ ⋅ | 𝐼| ≥ | 𝑁fail( 𝐼)| + 2 ⋅ |𝑁pass( 𝐼)| > | 𝑁fail( 𝐼)| + 2 ⋅ (
3Δ
4
⋅ | 𝐼| − | 𝑁fail( 𝐼)|).
Отсюда | 𝑁fail( 𝐼)| >
Δ
2
⋅ | 𝐼|. Значит, в 𝐼 найдётся вершина, для которой нарушены больше половины
тех уравнений, в которых она участвует. То есть даже не зная 𝐼, можно утверждать следующее: среди
координат 𝒂′
есть хотя бы одна такая, обратив значение которой мы уменьшим число нарушенных
уравнений.
Лемма доказана.
3.5.3.3. Завершение доказательства корректности алгоритма
Лемма о результативном бите говорит, что если к очередному шагу алгоритма мы пришли с
некодовым словом 𝒂′, находящимся от ближайшего кодового на расстоянии ≤ 𝛼𝑛, то очередной бит
для изменения мы найдём. Осталось доказать, что, начав со слова 𝒂′
на расстоянии ≤
𝛼𝑛
4
от
ближайшего кодового слова 𝒂, мы не «притянемся» случайно к какому-то другому кодовому слову
𝒃 ≠ 𝒂.
До начала работы алгоритма | 𝐼| ≤
𝛼𝑛
4
, и, значит, число нарушенных уравнений не превосходит Δ ⋅
| 𝐼| ≤
𝛼𝑛Δ
4
. В ходе работы алгоритма число нарушенных уравнений уменьшается.
Пусть на очередном шаге получено слово 𝒂′′
, и пусть 𝐼′′
— биты, в которых 𝒂′′
отличается от
ближайшего кодового слова. Имеем
𝛼𝑛Δ
4
≥ #наруш. ур. = 𝑁fail( 𝐼′′) >
Δ
2
⋅ | 𝐼′′|,
отсюда | 𝐼′′| < 𝛼𝑛
2
.
Итак, на каждом шаге алгоритма получаем слово, отличающееся от ближайшего кодового менее чем
в
𝛼𝑛
2
битах. Т.к. на каждом шаге в слове меняется только один бит и 𝑑( 𝐶) > 𝛼𝑛, то кодовое слово, к
которому мы стремимся, всё время одно и то же: если 𝑑( 𝒂, 𝒃) > 𝑡, то, находясь в шаре 𝑆𝑡 2⁄ ( 𝒂) и
смещаясь на один бит, мы не «вывалимся» в шар 𝑆𝑡 2⁄ ( 𝒃).
4. Коды Рида—Соломона и Рида—Маллера
4.1. Коды Рида—Соломона (I.S. Reed, G. Solomon)
4.1.1. Определение
Пусть 𝑘 ≤ 𝑛 ≤ 𝑞. Пусть 𝑡1, …, 𝑡 𝑛 ∈ 𝔽 𝑞 — фиксированные, попарно различные элементы. Рассмотрим
такое множество слов:
www.dainiak.com
𝐶 ≔ {(𝑃( 𝑡1),… , 𝑃( 𝑡 𝑛)) ∣ 𝑃 ∈ 𝔽 𝑞 [ 𝑥] ∧ deg 𝑃 < 𝑘}.
Непосредственно проверяется, что 𝐶 — линейное пространство:
𝛼 ⋅ (𝑃1( 𝑡1),…, 𝑃1( 𝑡 𝑛)) + 𝛽 ⋅ (𝑃2( 𝑡1),…, 𝑃2( 𝑡 𝑛)) = (( 𝛼𝑃1 + 𝛽𝑃2)( 𝑡1),… ,( 𝛼𝑃1 + 𝛽𝑃2)( 𝑡 𝑛))
У многочлена степени < 𝑘 может быть не более ( 𝑘 − 1) корней, поэтому если 𝑃≢0, то в векторе
( 𝑃( 𝑡1),… , 𝑃(𝑡 𝑛)) не более ( 𝑘 − 1) нулевых координат. Отсюда
𝑑( 𝐶) = min
𝒂∈𝐶
𝒂≠𝟎
‖ 𝒂‖ = min
𝑃≢0
#{𝑖 ∣ 𝑃( 𝑡𝑖) ≠ 0} = 𝑛 − ( 𝑘 − 1).
Векторы ( 𝑃( 𝑡1), …, 𝑃(𝑡 𝑛)) при разных 𝑃 различны: если выполнено ( 𝑃1( 𝑡1),…, 𝑃1(𝑡 𝑛)) =
( 𝑃2( 𝑡1),… , 𝑃2(𝑡 𝑛)),
то у многочлена ( 𝑃1 − 𝑃2) не менее 𝑛 корней, а т.к. deg( 𝑃1 − 𝑃2) < 𝑘 ≤ 𝑛, то ( 𝑃1 − 𝑃2) ≡ 0. Значит,
dim 𝐶 = 𝑘.
Итак, для любых 𝑘 ≤ 𝑛 ≤ 𝑞 множество 𝐶 является [ 𝑛, 𝑘, 𝑑] 𝑞-кодом, где 𝑑 = 𝑛 − 𝑘 + 1. Этот код
называется кодом Рида—Соломона или RS-кодом.
Вспомним границу Синглтона: для любого [ 𝑛, 𝑘, 𝑑] 𝑞-кода выполнено 𝑘 ≤ 𝑛 − 𝑑 + 1. То есть
построенный код достигает границы Синглтона и, стало быть, является MDS-кодом. Недостаток
кодов Рида—Соломона состоит в том, что кодовый алфавит нужно брать очень большим, т.к. 𝑞 ≥ 𝑛.
4.1.2. Декодирование RS-кодов
Т.к. 𝑑( 𝐶) = 𝑛 − 𝑘 + 1, то код может исправлять ⌊ 𝑛−𝑘
2
⌋ ошибок. В этом разделе мы покажем, как
можно эффективно исправлять ошибки в словах RS-кодов. Формально поставить задачу
декодирования можно следующим образом:
 Дано искажённое кодовое слово RS-кода ( 𝑝̂1, … , 𝑝̂ 𝑛) ∈ 𝔽 𝑞
𝑛
.
 Найти 𝑃 ∈ 𝔽 𝑞[ 𝑥], такой, что deg 𝑃 ≤ 𝑘 − 1 и #{𝑖 ∣ 𝑃( 𝑡𝑖) ≠ 𝑝̂ 𝑖} ≤ ⌊ 𝑛−𝑘
2
⌋ (нам гарантируется, что
такой 𝑃 существует).
Приводимая ниже техника называется алгоритмом Берлекэмпа—Велча (E.R. Berlekamp, L.R. Welch).
Рассмотрим многочлен ошибок
𝐸( 𝑥) ≔ ∏ ( 𝑥 − 𝑡𝑖)
𝑖: 𝑃( 𝑡 𝑖)≠𝑝̂𝑖
и вспомогательный многочлен 𝑈( 𝑥) ≔ 𝐸( 𝑥) ⋅ 𝑃( 𝑥).
Обозначим 𝑠 ≔ #{𝑖 ∣ 𝑃( 𝑡𝑖) ≠ 𝑝̂ 𝑖}. Заметим, что deg 𝐸 = 𝑠, coef 𝑥 𝑠 𝐸 = 1, deg 𝑈 ≤ deg 𝐸 + deg 𝑃 ≤ 𝑠 +
𝑘 − 1, и для любого 𝑖 ∈ {1, … , 𝑛} выполнено равенство 𝑈( 𝑡𝑖) = 𝐸( 𝑡𝑖) ⋅ 𝑝̂ 𝑖.
Идея: мы не знаем 𝑃, так что попытаемся найти какие-то многочлены 𝐸̃ и 𝑈̃, для которых
 deg 𝐸̃ = 𝑠̃ и coef 𝑥 𝑠 𝐸̃ = 1, где 𝑠̃ ≤ ( 𝑛 − 𝑘) 2⁄ ,
 deg 𝑈̃ ≤ 𝑠̃ + 𝑘 − 1,
 для любого 𝑖 ∈ {1, … , 𝑛} выполнено равенство 𝑈̃( 𝑡𝑖) = 𝐸̃( 𝑡𝑖)⋅ 𝑝̂ 𝑖.
Указанную тройку условий назовём условиями Берлекэмпа—Велча, или БВ-условиями. Мы знаем,
что многочлены 𝐸̃ и 𝑈̃, удовлетворяющие БВ-условиям, точно найдутся (например, такова пара
многочленов 𝐸, 𝑈, удовлетворяющая этой системе при 𝑠̃ = 𝑠). Остаётся вопрос: как эффективно
найти какие-нибудь 𝐸̃ и 𝑈̃ и что делать, если найденные 𝐸̃ и 𝑈̃ не совпадут с нужными нам 𝐸 и 𝑈?
Зафиксируем 𝑠̃ и положим 𝐸̃ = 𝑥 𝑠̃
+ ∑ 𝑒𝑗 𝑥 𝑗
𝑗 ≤𝑠̃−1 и 𝑈̃ = ∑ 𝑢𝑗 𝑥 𝑗
𝑗≤ 𝑠̃+ 𝑘−1 , где 𝑒0, …, 𝑒 𝑠̃−1, 𝑢0,… , 𝑢 𝑠̃+ 𝑘−1 —
неопределённые коэффициенты. Получим систему
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования

Contenu connexe

Tendances

каталог кондиционеров 2012 general
каталог кондиционеров 2012 generalкаталог кондиционеров 2012 general
каталог кондиционеров 2012 generalloaders2
 
Sbrf on-line manual
Sbrf on-line manualSbrf on-line manual
Sbrf on-line manualYuri Grin
 
C++ for real_programmers
C++ for real_programmersC++ for real_programmers
C++ for real_programmersdaemon025
 
каталог ежедневники еже 2017 новосибирск купить оптом с тиснением логотипа
каталог ежедневники еже 2017 новосибирск купить оптом с тиснением логотипакаталог ежедневники еже 2017 новосибирск купить оптом с тиснением логотипа
каталог ежедневники еже 2017 новосибирск купить оптом с тиснением логотипаМСрегион, рекламное агентство
 
Игрофикация. Конспект лекций Кевина Вербаха
Игрофикация. Конспект лекций Кевина ВербахаИгрофикация. Конспект лекций Кевина Вербаха
Игрофикация. Конспект лекций Кевина ВербахаIvan_Nefe
 
Итоговый отчет о работе Минсвязи 2008-2011 годы
Итоговый отчет о работе Минсвязи 2008-2011 годыИтоговый отчет о работе Минсвязи 2008-2011 годы
Итоговый отчет о работе Минсвязи 2008-2011 годыVictor Gridnev
 
Windows via C/C++. Программирование на языке Visual C++
Windows via C/C++. Программирование на языке Visual C++Windows via C/C++. Программирование на языке Visual C++
Windows via C/C++. Программирование на языке Visual C++StAlKeRoV
 
установка гаражных и промышленных ворот
установка гаражных и промышленных воротустановка гаражных и промышленных ворот
установка гаражных и промышленных воротVasiliy
 
E commerce e-mail маркетинг в россии декабрь 2012
E commerce e-mail маркетинг в россии декабрь 2012E commerce e-mail маркетинг в россии декабрь 2012
E commerce e-mail маркетинг в россии декабрь 2012Евгений Храмов
 
обзор российского рынка E mail маркетинга - ноябрь2012 fv
обзор российского рынка E mail маркетинга - ноябрь2012 fvобзор российского рынка E mail маркетинга - ноябрь2012 fv
обзор российского рынка E mail маркетинга - ноябрь2012 fvEfim Aldoukhov
 

Tendances (15)

каталог кондиционеров 2012 general
каталог кондиционеров 2012 generalкаталог кондиционеров 2012 general
каталог кондиционеров 2012 general
 
R004 2008 03396 Kp500 Cis Nov 06
R004 2008 03396 Kp500 Cis Nov 06R004 2008 03396 Kp500 Cis Nov 06
R004 2008 03396 Kp500 Cis Nov 06
 
Sbrf on-line manual
Sbrf on-line manualSbrf on-line manual
Sbrf on-line manual
 
Kings Bounty
Kings BountyKings Bounty
Kings Bounty
 
C++ for real_programmers
C++ for real_programmersC++ for real_programmers
C++ for real_programmers
 
каталог ежедневники еже 2017 новосибирск купить оптом с тиснением логотипа
каталог ежедневники еже 2017 новосибирск купить оптом с тиснением логотипакаталог ежедневники еже 2017 новосибирск купить оптом с тиснением логотипа
каталог ежедневники еже 2017 новосибирск купить оптом с тиснением логотипа
 
Nanotehnologii without secrets
Nanotehnologii without secretsNanotehnologii without secrets
Nanotehnologii without secrets
 
Игрофикация. Конспект лекций Кевина Вербаха
Игрофикация. Конспект лекций Кевина ВербахаИгрофикация. Конспект лекций Кевина Вербаха
Игрофикация. Конспект лекций Кевина Вербаха
 
Итоговый отчет о работе Минсвязи 2008-2011 годы
Итоговый отчет о работе Минсвязи 2008-2011 годыИтоговый отчет о работе Минсвязи 2008-2011 годы
Итоговый отчет о работе Минсвязи 2008-2011 годы
 
Kb Manual
Kb ManualKb Manual
Kb Manual
 
Windows via C/C++. Программирование на языке Visual C++
Windows via C/C++. Программирование на языке Visual C++Windows via C/C++. Программирование на языке Visual C++
Windows via C/C++. Программирование на языке Visual C++
 
установка гаражных и промышленных ворот
установка гаражных и промышленных воротустановка гаражных и промышленных ворот
установка гаражных и промышленных ворот
 
E commerce e-mail маркетинг в россии декабрь 2012
E commerce e-mail маркетинг в россии декабрь 2012E commerce e-mail маркетинг в россии декабрь 2012
E commerce e-mail маркетинг в россии декабрь 2012
 
обзор российского рынка E mail маркетинга - ноябрь2012 fv
обзор российского рынка E mail маркетинга - ноябрь2012 fvобзор российского рынка E mail маркетинга - ноябрь2012 fv
обзор российского рынка E mail маркетинга - ноябрь2012 fv
 
Moodle!7
Moodle!7Moodle!7
Moodle!7
 

Similaire à Конспект лекций по теории кодирования

Дэвид Флэнаган — Javascript (5 издание)
Дэвид Флэнаган — Javascript (5 издание)Дэвид Флэнаган — Javascript (5 издание)
Дэвид Флэнаган — Javascript (5 издание)mlatushko
 
Руководство QPF600 (полное)
Руководство QPF600 (полное) Руководство QPF600 (полное)
Руководство QPF600 (полное) QOMO
 
Отчет о работе Минкомсвязи 2009-2012 God otch 2012
Отчет о работе Минкомсвязи 2009-2012 God otch 2012Отчет о работе Минкомсвязи 2009-2012 God otch 2012
Отчет о работе Минкомсвязи 2009-2012 God otch 2012Victor Gridnev
 
Российская индустрия экспортной разработки программного обеспечения 2013
Российская индустрия экспортной разработки программного обеспечения 2013Российская индустрия экспортной разработки программного обеспечения 2013
Российская индустрия экспортной разработки программного обеспечения 2013Vera Leonik-Shilyaeva
 
Бизнес план частный детский сад
Бизнес план частный детский садБизнес план частный детский сад
Бизнес план частный детский садolegudobno
 
Бизнес план центра детского развития
Бизнес план центра детского развитияБизнес план центра детского развития
Бизнес план центра детского развитияolegudobno
 
Качество поиска и поисковые системы в Рунете 2012
Качество поиска и поисковые системы в Рунете 2012Качество поиска и поисковые системы в Рунете 2012
Качество поиска и поисковые системы в Рунете 2012Ashmanov and partners
 
Бизнес план строительство дома
Бизнес план строительство домаБизнес план строительство дома
Бизнес план строительство домаolegudobno
 
Acer iconia tab a100
Acer iconia tab a100Acer iconia tab a100
Acer iconia tab a100denisparkhoc
 
4.3.2 Преобразователь частоты Control H800 РЭ
4.3.2 Преобразователь частоты Control H800 РЭ4.3.2 Преобразователь частоты Control H800 РЭ
4.3.2 Преобразователь частоты Control H800 РЭIgor Golovin
 

Similaire à Конспект лекций по теории кодирования (20)

Дэвид Флэнаган — Javascript (5 издание)
Дэвид Флэнаган — Javascript (5 издание)Дэвид Флэнаган — Javascript (5 издание)
Дэвид Флэнаган — Javascript (5 издание)
 
Руководство QPF600 (полное)
Руководство QPF600 (полное) Руководство QPF600 (полное)
Руководство QPF600 (полное)
 
God otch 2012
God otch 2012God otch 2012
God otch 2012
 
Отчет о работе Минкомсвязи 2009-2012 God otch 2012
Отчет о работе Минкомсвязи 2009-2012 God otch 2012Отчет о работе Минкомсвязи 2009-2012 God otch 2012
Отчет о работе Минкомсвязи 2009-2012 God otch 2012
 
Итоговый отчет Минкомсвязи России за 2008-2011 годы
Итоговый отчет Минкомсвязи России за 2008-2011 годыИтоговый отчет Минкомсвязи России за 2008-2011 годы
Итоговый отчет Минкомсвязи России за 2008-2011 годы
 
Hp ts catalog 2015
Hp ts catalog 2015Hp ts catalog 2015
Hp ts catalog 2015
 
Toshiba 4
Toshiba 4Toshiba 4
Toshiba 4
 
Toshiba 7
Toshiba 7Toshiba 7
Toshiba 7
 
Toshiba 5
Toshiba 5Toshiba 5
Toshiba 5
 
Toshiba 10
Toshiba 10Toshiba 10
Toshiba 10
 
Российская индустрия экспортной разработки программного обеспечения 2013
Российская индустрия экспортной разработки программного обеспечения 2013Российская индустрия экспортной разработки программного обеспечения 2013
Российская индустрия экспортной разработки программного обеспечения 2013
 
Sim explorer ru
Sim explorer ruSim explorer ru
Sim explorer ru
 
Indexeventus
IndexeventusIndexeventus
Indexeventus
 
Бизнес план частный детский сад
Бизнес план частный детский садБизнес план частный детский сад
Бизнес план частный детский сад
 
Бизнес план центра детского развития
Бизнес план центра детского развитияБизнес план центра детского развития
Бизнес план центра детского развития
 
Качество поиска и поисковые системы в Рунете 2012
Качество поиска и поисковые системы в Рунете 2012Качество поиска и поисковые системы в Рунете 2012
Качество поиска и поисковые системы в Рунете 2012
 
Бизнес план строительство дома
Бизнес план строительство домаБизнес план строительство дома
Бизнес план строительство дома
 
Brandbook 26 07
Brandbook 26 07Brandbook 26 07
Brandbook 26 07
 
Acer iconia tab a100
Acer iconia tab a100Acer iconia tab a100
Acer iconia tab a100
 
4.3.2 Преобразователь частоты Control H800 РЭ
4.3.2 Преобразователь частоты Control H800 РЭ4.3.2 Преобразователь частоты Control H800 РЭ
4.3.2 Преобразователь частоты Control H800 РЭ
 

Plus de Alex Dainiak

Основы теории графов 11: гамильтоновы циклы
Основы теории графов 11: гамильтоновы циклыОсновы теории графов 11: гамильтоновы циклы
Основы теории графов 11: гамильтоновы циклыAlex Dainiak
 
Основы теории графов 10: экстремальная теория графов
Основы теории графов 10: экстремальная теория графовОсновы теории графов 10: экстремальная теория графов
Основы теории графов 10: экстремальная теория графовAlex Dainiak
 
Основы теории графов 09: раскраски планарных графов, совершенные графы
Основы теории графов 09: раскраски планарных графов, совершенные графыОсновы теории графов 09: раскраски планарных графов, совершенные графы
Основы теории графов 09: раскраски планарных графов, совершенные графыAlex Dainiak
 
Основы теории графов 08: раскраски и списочные раскраски
Основы теории графов 08: раскраски и списочные раскраскиОсновы теории графов 08: раскраски и списочные раскраски
Основы теории графов 08: раскраски и списочные раскраскиAlex Dainiak
 
Основы теории графов 07: сепараторы в планарных графах
Основы теории графов 07: сепараторы в планарных графахОсновы теории графов 07: сепараторы в планарных графах
Основы теории графов 07: сепараторы в планарных графахAlex Dainiak
 
Основы теории графов 06: триангуляции и трёхсвязные планарные графы
Основы теории графов 06: триангуляции и трёхсвязные планарные графыОсновы теории графов 06: триангуляции и трёхсвязные планарные графы
Основы теории графов 06: триангуляции и трёхсвязные планарные графыAlex Dainiak
 
Основы теории графов 05: критерии планарности графов
Основы теории графов 05: критерии планарности графовОсновы теории графов 05: критерии планарности графов
Основы теории графов 05: критерии планарности графовAlex Dainiak
 
Основы теории графов 04: метрики на деревьях
Основы теории графов 04: метрики на деревьяхОсновы теории графов 04: метрики на деревьях
Основы теории графов 04: метрики на деревьяхAlex Dainiak
 
Основы теории графов 03: связность
Основы теории графов 03: связностьОсновы теории графов 03: связность
Основы теории графов 03: связностьAlex Dainiak
 
Основы теории графов 01: напоминание определений, теорема Форда—Фалкерсона
Основы теории графов 01: напоминание определений, теорема Форда—ФалкерсонаОсновы теории графов 01: напоминание определений, теорема Форда—Фалкерсона
Основы теории графов 01: напоминание определений, теорема Форда—ФалкерсонаAlex Dainiak
 
Основы теории графов 02: факторизация графов (разложение на простые подграфы)
Основы теории графов 02: факторизация графов (разложение на простые подграфы)Основы теории графов 02: факторизация графов (разложение на простые подграфы)
Основы теории графов 02: факторизация графов (разложение на простые подграфы)Alex Dainiak
 
Графовая модель канала связи. Шенноновская ёмкость
Графовая модель канала связи. Шенноновская ёмкостьГрафовая модель канала связи. Шенноновская ёмкость
Графовая модель канала связи. Шенноновская ёмкостьAlex Dainiak
 
Приложения теории кодирования
Приложения теории кодированияПриложения теории кодирования
Приложения теории кодированияAlex Dainiak
 
Циклические коды БЧХ, Хемминга. Восстановление синхронизации
Циклические коды БЧХ, Хемминга. Восстановление синхронизацииЦиклические коды БЧХ, Хемминга. Восстановление синхронизации
Циклические коды БЧХ, Хемминга. Восстановление синхронизацииAlex Dainiak
 
Циклические коды. Граница БЧХ
Циклические коды. Граница БЧХЦиклические коды. Граница БЧХ
Циклические коды. Граница БЧХAlex Dainiak
 
Коды на основе многочленов и алгоритмы их декодирования
Коды на основе многочленов и алгоритмы их декодированияКоды на основе многочленов и алгоритмы их декодирования
Коды на основе многочленов и алгоритмы их декодированияAlex Dainiak
 
Задача о ближайшем кодовом слове. Коды Галлагера—Сипсера—Шпильмана
Задача о ближайшем кодовом слове. Коды Галлагера—Сипсера—ШпильманаЗадача о ближайшем кодовом слове. Коды Галлагера—Сипсера—Шпильмана
Задача о ближайшем кодовом слове. Коды Галлагера—Сипсера—ШпильманаAlex Dainiak
 
Линейные коды
Линейные кодыЛинейные коды
Линейные кодыAlex Dainiak
 
Границы Плоткина и Элайеса—Бассалыго
Границы Плоткина и Элайеса—БассалыгоГраницы Плоткина и Элайеса—Бассалыго
Границы Плоткина и Элайеса—БассалыгоAlex Dainiak
 
Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца.
Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца.Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца.
Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца.Alex Dainiak
 

Plus de Alex Dainiak (20)

Основы теории графов 11: гамильтоновы циклы
Основы теории графов 11: гамильтоновы циклыОсновы теории графов 11: гамильтоновы циклы
Основы теории графов 11: гамильтоновы циклы
 
Основы теории графов 10: экстремальная теория графов
Основы теории графов 10: экстремальная теория графовОсновы теории графов 10: экстремальная теория графов
Основы теории графов 10: экстремальная теория графов
 
Основы теории графов 09: раскраски планарных графов, совершенные графы
Основы теории графов 09: раскраски планарных графов, совершенные графыОсновы теории графов 09: раскраски планарных графов, совершенные графы
Основы теории графов 09: раскраски планарных графов, совершенные графы
 
Основы теории графов 08: раскраски и списочные раскраски
Основы теории графов 08: раскраски и списочные раскраскиОсновы теории графов 08: раскраски и списочные раскраски
Основы теории графов 08: раскраски и списочные раскраски
 
Основы теории графов 07: сепараторы в планарных графах
Основы теории графов 07: сепараторы в планарных графахОсновы теории графов 07: сепараторы в планарных графах
Основы теории графов 07: сепараторы в планарных графах
 
Основы теории графов 06: триангуляции и трёхсвязные планарные графы
Основы теории графов 06: триангуляции и трёхсвязные планарные графыОсновы теории графов 06: триангуляции и трёхсвязные планарные графы
Основы теории графов 06: триангуляции и трёхсвязные планарные графы
 
Основы теории графов 05: критерии планарности графов
Основы теории графов 05: критерии планарности графовОсновы теории графов 05: критерии планарности графов
Основы теории графов 05: критерии планарности графов
 
Основы теории графов 04: метрики на деревьях
Основы теории графов 04: метрики на деревьяхОсновы теории графов 04: метрики на деревьях
Основы теории графов 04: метрики на деревьях
 
Основы теории графов 03: связность
Основы теории графов 03: связностьОсновы теории графов 03: связность
Основы теории графов 03: связность
 
Основы теории графов 01: напоминание определений, теорема Форда—Фалкерсона
Основы теории графов 01: напоминание определений, теорема Форда—ФалкерсонаОсновы теории графов 01: напоминание определений, теорема Форда—Фалкерсона
Основы теории графов 01: напоминание определений, теорема Форда—Фалкерсона
 
Основы теории графов 02: факторизация графов (разложение на простые подграфы)
Основы теории графов 02: факторизация графов (разложение на простые подграфы)Основы теории графов 02: факторизация графов (разложение на простые подграфы)
Основы теории графов 02: факторизация графов (разложение на простые подграфы)
 
Графовая модель канала связи. Шенноновская ёмкость
Графовая модель канала связи. Шенноновская ёмкостьГрафовая модель канала связи. Шенноновская ёмкость
Графовая модель канала связи. Шенноновская ёмкость
 
Приложения теории кодирования
Приложения теории кодированияПриложения теории кодирования
Приложения теории кодирования
 
Циклические коды БЧХ, Хемминга. Восстановление синхронизации
Циклические коды БЧХ, Хемминга. Восстановление синхронизацииЦиклические коды БЧХ, Хемминга. Восстановление синхронизации
Циклические коды БЧХ, Хемминга. Восстановление синхронизации
 
Циклические коды. Граница БЧХ
Циклические коды. Граница БЧХЦиклические коды. Граница БЧХ
Циклические коды. Граница БЧХ
 
Коды на основе многочленов и алгоритмы их декодирования
Коды на основе многочленов и алгоритмы их декодированияКоды на основе многочленов и алгоритмы их декодирования
Коды на основе многочленов и алгоритмы их декодирования
 
Задача о ближайшем кодовом слове. Коды Галлагера—Сипсера—Шпильмана
Задача о ближайшем кодовом слове. Коды Галлагера—Сипсера—ШпильманаЗадача о ближайшем кодовом слове. Коды Галлагера—Сипсера—Шпильмана
Задача о ближайшем кодовом слове. Коды Галлагера—Сипсера—Шпильмана
 
Линейные коды
Линейные кодыЛинейные коды
Линейные коды
 
Границы Плоткина и Элайеса—Бассалыго
Границы Плоткина и Элайеса—БассалыгоГраницы Плоткина и Элайеса—Бассалыго
Границы Плоткина и Элайеса—Бассалыго
 
Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца.
Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца.Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца.
Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца.
 

Конспект лекций по теории кодирования

  • 1. Конспект лекций по теории кодирования Александр Дайняк Актуальная версия файла доступна на www.dainiak.com Распространяется на условиях лицензии Creative Commons «Attribution-NonCommercial-ShareAlike»
  • 2. www.dainiak.com Моим родителям, сумевшим передать мне то, что систематическому кодированию не поддаётся
  • 3. www.dainiak.com Оглавление Введение...........................................................................................................................................................5 1. Алфавитное кодирование ...........................................................................................................................5 1.1. Математическая постановка, однозначность кодов..........................................................................5 1.1.1. Критерий однозначности алфавитного кодирования.................................................................6 1.1.2. Оценка длины неоднозначно декодируемых слов.....................................................................7 1.2. Коды с минимальной избыточностью.................................................................................................7 1.2.1. Свойства оптимальных кодов........................................................................................................9 2. Коды, исправляющие ошибки ..................................................................................................................10 2.1. Модель канала с ошибками...............................................................................................................10 2.2. Основные определения и обозначения............................................................................................10 2.3. Границы мощностей кодов.................................................................................................................12 2.3.1. Граница Хемминга (граница сферической упаковки) ...............................................................12 2.3.2. Граница Синглтона........................................................................................................................12 2.3.3. Граница Плоткина.........................................................................................................................13 2.3.4. Граница Элайеса—Бассалыго......................................................................................................13 3. Линейные коды ..........................................................................................................................................15 3.1. Основные понятия...............................................................................................................................15 3.2. Теорема Варшамова—Гилберта ........................................................................................................17 3.3. Двоичный код Хемминга....................................................................................................................18 3.4. Границы мощностей для линейных кодов........................................................................................19 3.4.1. Граница Синглтона для линейных кодов....................................................................................19 3.4.2. Граница Грайсмера—Соломона—Штиффлера ..........................................................................19 3.5. Графы-расширители и коды на их основе ........................................................................................20 3.5.1. Графы-расширители .....................................................................................................................20 3.5.2. Коды на основе расширителей....................................................................................................21 3.5.3. Алгоритм Сипсера—Шпильмана.................................................................................................22 4. Коды Рида—Соломона и Рида—Маллера...............................................................................................23 4.1. Коды Рида—Соломона (I.S. Reed, G. Solomon) .................................................................................23 4.1.1. Определение.................................................................................................................................23 4.1.2. Декодирование RS-кодов.............................................................................................................24 4.2. Коды Рида—Маллера (I.S. Reed, D.E. Muller)....................................................................................25 4.2.1. Определение.................................................................................................................................25 4.2.2. Кодовое расстояние......................................................................................................................25 4.2.3. Декодирование RM-кодов ...........................................................................................................26 4.3. Понятие об алгеброгеометрических кодах (кодах В.Д. Гоппы) ......................................................28
  • 4. www.dainiak.com 5. Циклические коды......................................................................................................................................28 5.1. Определение........................................................................................................................................28 5.2. Порождающий многочлен..................................................................................................................29 5.3. Порождающая и проверочная матрицы...........................................................................................30 5.4. Граница БЧХ и коды БЧХ.....................................................................................................................32 5.4.1. Граница БЧХ...................................................................................................................................32 5.4.2. Коды БЧХ........................................................................................................................................33 5.5. Циклическое представление кодов Хемминга.................................................................................34 5.6. Восстановление синхронизации для смежных классов циклических кодов ................................34 5.6.1. Задача восстановления синхронизации.....................................................................................34 6. Совершенные коды....................................................................................................................................35 6.1. Совершенство кодов Голея и Хемминга ...........................................................................................36 6.2. Некоторые теоремы о совершенных кодах......................................................................................36 6.2.1. Доказательство теоремы Васильева при 𝑞 = 2.........................................................................37 7. Теоремы Шеннона о скорости кодирования...........................................................................................37 7.1. Шенноновская ёмкость графов..........................................................................................................37 7.2. Теоремы Шеннона для каналов с фиксированной вероятностью ошибок ...................................40 7.2.1. Теоремы Шеннона........................................................................................................................40 7.2.2. Доказательство теоремы о существовании хороших кодов.....................................................41 8. Некоторые специальные семейства кодов..............................................................................................42 8.1. Коды Варшамова—Тененгольца........................................................................................................42 8.1.1. Исправление одной ошибки выпадения в кодах Варшамова—Тененгольца ........................43 8.1.2. Исправление одной ошибки вставки в кодах Варшамова—Тененгольца ..............................43 8.2. Матрицы Адамара и коды Адамара..................................................................................................44 8.2.1. Матрицы Адамара ........................................................................................................................44 8.2.2. Конструкция Пэли на основе квадратичных вычетов................................................................45 8.2.3. Коды Адамара...............................................................................................................................46 8.3. Каскадные коды...................................................................................................................................47 8.3.1. Определение.................................................................................................................................47 8.3.2. Асимптотически хорошие коды с полиномиальным декодированием..................................47 9. О приложениях теории кодирования в информатике............................................................................48 9.1. Коммуникационная сложность..........................................................................................................48 9.2. Криптография с открытым ключом: криптосистема МакЭлиса (R. McEliece ’1978)......................49 9.3. 𝑙-однородные множества и дерандомизация .................................................................................49 9.4. Задача о разделении секрета.............................................................................................................51 Литература ......................................................................................................................................................52
  • 5. www.dainiak.com Введение Теория кодирования изучает модели хранения и передачи «дискретной» информации и предлагает способы оптимального её кодирования. Основные требования, которые предъявляются к способам кодирования, перечислены ниже.  Однозначность. По закодированному сообщению нужно уметь однозначно восстанавливать исходное. Это требование обязательно.  Минимальная избыточность. Закодированное сообщение должно при прочих равных условиях иметь как можно меньший объём для скорейшей передачи по каналам связи.  Устойчивость к ошибкам. Возможность расшифровать закодированное сообщение даже при возникновении ошибок при его передаче. Теории кодов, исправляющих ошибки, будет посвящено основное внимание, однако начнём мы с рассмотрения первых двух пунктов. 1. Алфавитное кодирование Чтобы хранить в компьютере тексты на естественном языке, нужно их кодировать. Простейший подход состоит в следующем: каждой букве языка и знаку препинания сопоставим по двоичному слову, и тогда текст закодируем, записав друг за другом коды отдельных букв. 1.1. Математическая постановка, однозначность кодов Даны алфавиты 𝔸 = { 𝑎1, … , 𝑎 𝑛} и 𝔹 = {𝑏1, …, 𝑏 𝑞 }. Алфавит 𝔸 — кодируемый, «естественный»; алфавит 𝔹 — кодовый (например, 𝔹 = {0,1}). Алфавитное кодирование — это отображение 𝜙: 𝔸∗ → 𝔹∗ , такое, что для любых 𝑎𝑖1 , …, 𝑎𝑖 𝑟 выполнено 𝜙(𝑎𝑖1 … 𝑎𝑖 𝑟 ) = 𝜙(𝑎𝑖1 ) … 𝜙(𝑎𝑖 𝑟 ). Видно, что достаточно определить 𝜙 на отдельных символах алфавита 𝔸: 𝜙( 𝑎1) = 𝐵1 ⋮ 𝜙( 𝑎 𝑛) = 𝐵 𝑛 Слова 𝐵1, …, 𝐵 𝑛 называются кодовыми, совокупность { 𝐵1,… , 𝐵 𝑛} называется кодом. Кодирование 𝜙 называется однозначным, если 𝜙( 𝑤′) ≠ 𝜙( 𝑤′′) при 𝑤′ ≠ 𝑤′′ . В противном случае кодирование почти бесполезно. Для однозначности необходимо, чтобы все 𝐵𝑖 были различны (и везде далее мы будем это предполагать), но этого недостаточно. Однозначность никак не зависит от алфавита 𝔸, а целиком определяется набором { 𝐵1,… , 𝐵 𝑛}.Кодирование однозначное т. и т.т., когда никакое слово 𝑏𝑖1 𝑏𝑖2 … 𝑏𝑖 𝑟 нельзя двумя разными способами разбить на кодовые слова: Каждое из перечисленных условий является достаточным для однозначности кода:  Равномерность: | 𝐵1| = | 𝐵2| = ⋯ = | 𝐵 𝑛|.  Свойство префикса: ∄𝑖, 𝑗 (𝑖 ≠ 𝑗 и 𝐵𝑖 = 𝐵𝑗 𝑤, где 𝑤 ∈ 𝔹∗ ).  Свойство суффикса: ∄𝑖, 𝑗(𝑖 ≠ 𝑗 и 𝐵𝑖 = 𝑤𝐵𝑗, где 𝑤 ∈ 𝔹∗ ). 𝑏𝑖1 ⬚ 𝑏𝑖2 ⬚⬚⬚⬚ … ⬚⬚⬚ 𝑏𝑖 𝑟 𝐵3 𝐵8 𝐵5 𝐵1 𝐵3 𝑎3 𝑎8 или 𝑎5 𝑎1 𝑎3 ?
  • 6. www.dainiak.com Префиксные коды называют ещё мгновенными, так как закодированные с их помощью сообщения можно декодировать по мере приёма, без задержек. Пример того, что равномерность, префиксность и суффиксность не являются необходимыми условиями для однозначности: 𝔸 = { 𝑎1, 𝑎2}, 𝔹 = {0,1}, 𝜙( 𝑎1) = 0, 𝜙( 𝑎2) = 010. 1.1.1. Критерий однозначности алфавитного кодирования В этом разделе мы выведем критерий, позволяющий по любому заданному кодированию (или, что то же, набору кодовых слов) определять, однозначно ли оно. Для этого подробнее рассмотрим свойства неоднозначных кодов. Код неоднозначен, если найдётся слово 𝐵 ∈ 𝔹∗ , которое не менее чем двумя разными способами можно разбить на кодовые слова. Рассмотрим самое короткое такое «неоднозначное» 𝐵 и два его различных разбиения на кодовые слова: Заметим, что точки «верхнего» и «нижнего» разбиений, кроме крайних, все различны, иначе слово 𝐵 можно было бы укоротить: Также, среди отрезков 𝐵, концы которых принадлежат разным разбиениям, нет кодовых слов, иначе 𝐵 также можно было бы укоротить: Минимальные отрезки слова 𝐵, концы которых принадлежат разным разбиениям, назовём промежуточными. Первый промежуточный отрезок (п.о.) получается, если из начала некоторого кодового слова «отнять» некоторую последовательность кодовых слов. Любой из остальных отрезков получается, если из некоторого кодового слова отнять предыдущий отрезок и последовательность (возможно, пустую) кодовых слов. Последний п.о. таков, что если его отнять из начала некоторого кодового слова, получится последовательность кодовых слов. Обозначим через 𝑤1, … , 𝑤 𝑘 все промежуточные отрезки. Через 𝛽 будем обозначать последовательность (возможно, пустую) кодовых слов. Имеем: ∃𝑖, 𝛽( 𝐵𝑖 = 𝛽𝑤1) ∃𝑖, 𝛽( 𝐵𝑖 = 𝑤1 𝛽𝑤2) ⋮ ∃𝑖, 𝛽( 𝐵𝑖 = 𝑤 𝑘−1 𝛽𝑤 𝑘) ∃𝑖, 𝛽( 𝐵𝑖 = 𝑤 𝑘 𝛽) Наоборот, пусть нашлись непустые слова 𝑤1, …, 𝑤 𝑘 ∈ 𝔹∗ , кодовые слова 𝐵𝑖1 , …, 𝐵𝑖 𝑘+1 и последовательности кодовых слов 𝛽1, …, 𝛽 𝑘+1, такие, что выполнены соотношения 𝐵𝑖1 = 𝛽1 𝑤1 𝐵𝑖2 = 𝑤1 𝛽2 𝑤2 ⋮ 𝐵𝑖 𝑘+1 = 𝑤 𝑘 𝛽 𝑘+1
  • 7. www.dainiak.com Тогда слово 𝛽1 𝑤1 𝛽2 𝑤2 … 𝑤 𝑘−1 𝛽 𝑘 𝑤 𝑘 𝛽 𝑘+1 можно разбить на кодовые слова двумя способами. 𝐵𝑖1 = 𝜀𝛽1 𝑤1 𝐵𝑖2 = 𝑤1 𝛽2 𝑤2 ⋮ 𝐵𝑖 𝑘+1 = 𝑤 𝑘 𝛽 𝑘+1 𝜀 Пример: Сказанное выше позволяет нам теперь сформулировать следующее утверждение. Критерий однозначности алфавитного кодирования (Ал. А. Марков ’1963) Код 𝐶 = { 𝐵1, …, 𝐵 𝑛} не однозначный т. и т.т., когда найдутся непустые слова 𝑤1, … , 𝑤 𝑘 ∈ 𝔹∗ ∖ 𝐶, кодовые слова 𝐵𝑖1 , … , 𝐵𝑖 𝑘+1 и последовательности кодовых слов 𝛽1,… , 𝛽 𝑘+1, такие, что 𝑘 ≥ 1 и выполнены соотношения 𝐵𝑖1 = 𝛽1 𝑤1 𝐵𝑖2 = 𝑤1 𝛽2 𝑤2 ⋮ 𝐵𝑖 𝑘+1 = 𝑤 𝑘 𝛽 𝑘+1 (или 𝑘 = 0 и 𝐵𝑖1 = 𝛽1, где 𝛽1 составлено не менее чем из двух кодовых слов). 1.1.2. Оценка длины неоднозначно декодируемых слов Через 𝜀 будем обозначать пустое слово. Пусть 𝐶 = { 𝐵1, … , 𝐵 𝑛} — код, который нужно проверить на однозначность. Построим орграф 𝐺𝐶 = ( 𝑉, 𝐸), где 𝑉 ≔ {𝜀, а также все слова из 𝔹∗ ∖ 𝐶, являющиеся началами и концами кодовых слов}, 𝐸 ≔ {( 𝛼′ , 𝛼′′) ∣ ∃𝛽 ∈ 𝐶∗ (( 𝛼′ 𝛽𝛼′′ ∈ 𝐶)∧ (( 𝛽 ≠ 𝜀) ∨ (( 𝛼′ ≠ 𝜀) ∧ ( 𝛼′′ ≠ 𝜀))))}. Доказанный нами критерий однозначности можно переформулировать так: код 𝐶 однозначный т. и т.т., когда в орграфе 𝐺𝐶 нет (ориентированного) цикла, проходящего через вершину 𝜀. Имеем | 𝑉| ≤ 1 + ∑(| 𝐵| − 1) 𝐵∈𝐶 ≤ | 𝐶| ⋅ max 𝐵∈𝐶 | 𝐵|. Получим отсюда оценку длины минимального неоднозначно декодируемого слова. Если в 𝐺𝐶 есть цикл через 𝜀, то есть и цикл, число вершин в котором не больше, чем | 𝐶| ⋅ max 𝐵∈𝐶 | 𝐵|. Рассмотрим соответствующее этому циклу неоднозначно декодируемое слово 𝑊неодн. = 𝛽1 𝑤1 𝛽2 𝑤2 … 𝑤 𝑘−1 𝛽 𝑘 𝑤 𝑘 𝛽 𝑘+1. Каждая пара 𝛽𝑖 𝑤𝑖 умещается в некотором кодовом слове, поэтому |𝑊неодн.| ≤ ( 𝑘 + 1) ⋅ max 𝐵∈𝐶 | 𝐵| ≤ | 𝐶| ⋅ (max 𝐵∈𝐶 | 𝐵|) 2 . Из предыдущих рассуждений вытекает следующая оценка на длину неоднозначно декодируемого слова. Теорема. (А.А. Марков) Если 𝐶 — неоднозначный код, длина слов которого не превосходит 𝑙, то найдётся слово длины не более | 𝐶| ⋅ 𝑙2 , декодируемое неоднозначно. 1.2. Коды с минимальной избыточностью Обычно, кодируемые символы 𝑎1,… , 𝑎 𝑛 встречаются в кодируемых сообщениях не одинаково часто, а с разными частотами. Например, в английском языке буква e встречается примерно в 180 раз чаще, 𝛽4 (пустая)𝛽2 𝐵𝑖2 𝐵𝑖4 𝐵𝑖5 𝐵𝑖1 𝛽3 (пустая) 𝐵𝑖3 𝛽5 𝑤1 𝑤2 𝑤3 𝑤4 𝛽1
  • 8. www.dainiak.com чем z. Естественно при построении кодирования 𝜙 кодировать более частые буквы более короткими словами. Поставим задачу математически. Пусть в кодируемых сообщениях символы 𝑎1, …, 𝑎 𝑛 встречаются с частотами 𝑝1, …, 𝑝 𝑛 соответственно. Считаем, что ∑𝑝𝑖 = 1 и ∀𝑖 𝑝𝑖 > 0. Пусть символ 𝑎𝑖 кодируется словом 𝐵𝑖. Рассмотрим сообщение 𝐴 ∈ 𝔸∗ . Каждый из символов 𝑎𝑖 встретится в | 𝐴| примерно | 𝐴| ⋅ 𝑝𝑖 раз. Отсюда | 𝜙( 𝐴)| ≈ ∑| 𝐴| ⋅ 𝑝𝑖 ⋅ | 𝐵𝑖| 𝑖 = | 𝐴| ⋅ ∑ 𝑝𝑖 ⋅ | 𝐵𝑖| 𝑖 . То есть «среднестатистическое» сообщение 𝐴 при кодировании «разбухает» примерно в ∑ 𝑝𝑖| 𝐵𝑖|𝑖 раз. Величина ∑ 𝑝𝑖| 𝐵𝑖|𝑖 называется коэффициентом избыточности (к.и.) кода. Задача построения кода с минимальной избыточностью: по заданным 𝑝1, … , 𝑝 𝑛 построить однозначно декодируемый код 𝐵1,… . , 𝐵 𝑛 ∈ 𝔹∗ , для которого коэффициент избыточности минимален. Такой код называется кодом с минимальной избыточностью (к.м.и.) для набора частот 𝑝1, … , 𝑝 𝑛. Все слова кода не получится взять слишком короткими, иначе код не будет однозначным. Количественно это выражает следующая теорема. Теорема. (L.G. Kraft, B. McMillan) Пусть 𝑙1,… , 𝑙 𝑛 — длины слов однозначного кода в алфавите 𝔹, где | 𝔹| = 𝑞. Тогда выполнено неравенство ∑ 𝑞−𝑙 𝑖 𝑛 𝑖=1 ≤ 1. Доказательство. Пусть 𝐵1, … , 𝐵 𝑛 — однозначный код в 𝑞-значном алфавите, и пусть | 𝐵𝑖| = 𝑙 𝑖. Пусть 𝑡 ∈ ℕ. Положим 𝐿 ≔ 𝑡 ⋅ max 𝑖 𝑙 𝑖. Рассмотрим выражение (∑ 𝑞−𝑙 𝑖 𝑛 𝑖=1 ) 𝑡 = ∑ 𝑞−( 𝑙 𝑖1 +⋯+𝑙 𝑖 𝑡 ) 1≤𝑖1,…,𝑖 𝑡≤𝑛 = ∑ 𝑠𝑙 𝑞−𝑙 𝐿 𝑙=1 , где 𝑠𝑙 — количество наборов ( 𝑖1,… , 𝑖 𝑡), таких, что 𝑙 𝑖1 + ⋯ + 𝑙 𝑖 𝑡 = 𝑙. Каждому набору ( 𝑖1,… , 𝑖 𝑡) ∈ 𝑆𝑙 поставим в соответствие слово 𝐵𝑖1 … 𝐵𝑖 𝑡 ∈ 𝔹∗ . Тогда разным наборам из 𝑆𝑙 соответствуют разные слова (т.к. код однозначный). Отсюда 𝑠𝑙 ≤ 𝑞 𝑙 и следовательно (∑ 𝑞−𝑙 𝑖 𝑛 𝑖=1 ) 𝑡 = ∑ 𝑠𝑙 𝑞−𝑙 𝐿 𝑙=1 ≤ ∑ 1 𝐿 𝑙=1 = 𝐿. Получили, что для любого 𝑡 ∈ ℕ выполнено ∑ 𝑞−𝑙 𝑖𝑛 𝑖=1 ≤ (𝑡 ⋅ max 𝑖 𝑙 𝑖) 1 𝑡⁄ . Устремляя 𝑡 к бесконечности, получаем ∑ 𝑞−𝑙 𝑖𝑛 𝑖=1 ≤ 1. Теорема доказана. Докажем обратное утверждение: Теорема. Пусть натуральные числа 𝑙1,…, 𝑙 𝑛 и 𝑞 таковы, что ∑ 𝑞−𝑙 𝑖𝑛 𝑖=1 ≤ 1. Тогда существует префиксный код 𝐵1, …, 𝐵 𝑛 в 𝑞-значном алфавите, такой, что | 𝐵𝑖| = 𝑙 𝑖. Доказательство. Будем считать, что среди 𝑙1,… , 𝑙 𝑛 всего 𝑚 различных, и при этом 𝑙1 < ⋯ < 𝑙 𝑚. Для каждого 𝑗 ∈ [1, 𝑚] положим 𝑛𝑗 ≔ |{𝑖 ∈ [1, 𝑛] ∣ 𝑙 𝑖 = 𝑙 𝑗}|. Тогда из условия теоремы следует неравенство ∑ 𝑛𝑗 𝑞−𝑙 𝑗𝑚 𝑗=1 ≤ 1. Отсюда
  • 9. www.dainiak.com ∑ 𝑛𝑗 𝑞−𝑙 𝑗 𝑘 𝑗 =1 ≤ 1 для любого 𝑘 ∈ [1, 𝑚]. Домножив обе части последнего неравенства на 𝑞 𝑙 𝑘, получим 𝑞 𝑙 𝑘 ≥ ∑ 𝑛𝑗 𝑞 𝑙 𝑘−𝑙 𝑗 𝑘 𝑗=1 = 𝑛 𝑘 + ∑ 𝑛𝑗 𝑞 𝑙 𝑘−𝑙 𝑗 𝑘−1 𝑗=1 . Следовательно, для любого 𝑘 ∈ [1, 𝑚] имеем 𝑛 𝑘 ≤ 𝑞 𝑙 𝑘 − ∑ 𝑛𝑗 𝑞 𝑙 𝑘−𝑙 𝑗𝑘−1 𝑗=1 . Будем строить префиксный код, сначала выбирая 𝑛1 слов длины 𝑙1, затем 𝑛2 слов длины 𝑙2, и т.д. Пусть уже набраны все кодовые слова с длинами 𝑙1,…, 𝑙 𝑘−1. Слов длины 𝑙 𝑘, для которых выбранные кодовые слова являются префиксами, не более 𝑛1 𝑞 𝑙 𝑘−𝑙1 + ⋯ + 𝑛 𝑘−1 𝑞 𝑙 𝑘−𝑙 𝑘−1 , то есть «пригодных для выбора» слов длины 𝑙 𝑘 не меньше, чем 𝑞 𝑙 𝑘 − ( 𝑛1 𝑞 𝑙 𝑘−𝑙1 + ⋯+ 𝑛 𝑘−1 𝑞 𝑙 𝑘−𝑙 𝑘−1 ). Из неравенства 𝑛 𝑘 ≤ 𝑞 𝑙 𝑘 − ∑ 𝑛𝑗 𝑞 𝑙 𝑘−𝑙 𝑗𝑘−1 𝑗=1 вытекает, что мы сможем выбрать 𝑛 𝑘 слов длины 𝑙 𝑘, так, чтобы никакие из ранее выбранных слов не были их префиксами. По индукции получаем утверждение теоремы. Теорема доказана. Следствие из двух доказанных теорем. Для любого однозначного кода существует префиксный код в том же алфавите и с теми же длинами кодовых слов. Значит, к.м.и. можно искать только среди префиксных кодов. 1.2.1. Свойства оптимальных кодов Лемма о монотонности длин слов к.м.и. Если 𝐵1, …, 𝐵 𝑛 — к.м.и. для набора частот 𝑝1, …, 𝑝 𝑛, то ∀𝑖, 𝑗 (𝑝𝑖 > 𝑝𝑗 ⇒ | 𝐵𝑖| ≤ |𝐵𝑗|). Доказательство. В противном случае, поменяв 𝐵𝑖 и 𝐵𝑗 местами, получили бы код с коэффициентом избыточности ∑ 𝑝𝑖| 𝐵𝑖| 𝑛 𝑖=1 − (𝑝𝑖 − 𝑝𝑗)(| 𝐵𝑖| − |𝐵𝑗|) < ∑ 𝑝𝑖| 𝐵𝑖| 𝑛 𝑖=1 . Лемма доказана. Теорема «о редукции». (D.A. Huffman) Пусть 𝑝1 ≥ ⋯ ≥ 𝑝 𝑛−1 ≥ 𝑝 𝑛 и 𝑝 ≔ 𝑝 𝑛−1 + 𝑝 𝑛 . Если 𝐵1, … , 𝐵 𝑛−2, 𝐵 ∈ {0,1}∗ — префиксный к.м.и. для частот 𝑝1, …, 𝑝 𝑛−2, 𝑝, то 𝐵1,… , 𝐵 𝑛−2, 𝐵0, 𝐵1 — префиксный к.м.и. для частот 𝑝1, …, 𝑝 𝑛. Доказательство. Пусть к.и. кода 𝐵1, …, 𝐵 𝑛−2, 𝐵 для частот 𝑝1, …, 𝑝 𝑛−2, 𝑝 равен 𝑘. К.и. кода 𝐵1, …, 𝐵 𝑛−2, 𝐵0, 𝐵1 для частот 𝑝1, … , 𝑝 𝑛 равен ∑ 𝑝𝑖| 𝐵𝑖| 𝑛−2 𝑖=1 + ( 𝑝 𝑛−1 + 𝑝 𝑛 )(| 𝐵| + 1) = ∑ 𝑝𝑖| 𝐵𝑖| 𝑛−2 𝑖=1 + 𝑝| 𝐵| + 𝑝 = 𝑘 + 𝑝. Допустим, что нашёлся код 𝐵1 ′ , … , 𝐵 𝑛 ′ , к.и. которого для набора частот 𝑝1, … , 𝑝 𝑛 равен 𝑘′ < 𝑘 + 𝑝, и придём к противоречию. Б.о.о. будем считать код { 𝐵𝑖 ′}𝑖=1 𝑛 префиксным к.м.и. для набора 𝑝1, … , 𝑝 𝑛. Т.к. 𝑝1 ≥ ⋯ ≥ 𝑝 𝑛, то | 𝐵1 ′ | ≤ ⋯ ≤ |𝐵 𝑛 ′ |. Пусть 𝐵 𝑛 ′ = 𝐵′ 0, где 𝐵′ — некоторое слово. Заметим, что 𝐵′ ∉ { 𝐵𝑖 ′}𝑖=1 𝑛 и 𝐵′ является префиксом одного из слов 𝐵1 ′ ,… , 𝐵 𝑛−1 ′ . Б.о.о. будем считать, что 𝐵 𝑛−1 ′ = 𝐵′ 1. Тогда код 𝐵1 ′ ,… , 𝐵 𝑛−2 ′ , 𝐵′ префиксный. К.и. кода 𝐵1 ′ , …, 𝐵 𝑛−2 ′ , 𝐵′ для набора частот 𝑝1, … , 𝑝 𝑛−2, 𝑝 равен ( 𝑝 𝑛−1 + 𝑝 𝑛 )| 𝐵′| + ∑ 𝑝𝑖|𝐵𝑖 ′ | 𝑛−2 𝑖=1 = ∑ 𝑝𝑖|𝐵𝑖 ′ | 𝑛 𝑖=1 − ( 𝑝 𝑛−1 + 𝑝 𝑛) = 𝑘′ − 𝑝 < 𝑘, — противоречие с тем, что код 𝐵1, … , 𝐵 𝑛−2, 𝐵 является к.м.и. для частот 𝑝1, …, 𝑝 𝑛−2, 𝑝.
  • 10. www.dainiak.com Теорема доказана. 2. Коды, исправляющие ошибки 2.1. Модель канала с ошибками Основная модель канала связи: Чаще всего рассматривают следующие типы ошибок:  Ошибки замещения: муха → мука o Симметричные (если символ 𝑥 может замениться на 𝑦, то возможно и обратное) o Несимметричные  Ошибки стирания: муха → му?а  Ошибки выпадения: муха → уха  Ошибки вставки: мука → мурка  Комбинации перечисленных типов Всегда задаются ограничения на «ненадёжность» канала. Ограничения можно разделить на два типа:  вероятностные (например, вероятность возникновения ошибки в одном символе сообщения),  детерминированные (например, верхняя оценка числа ошибок на одно сообщение). Естественный язык весьма устойчив к ошибкам: «веть ву мжте прчтттть эт ткст п поняц го!». Причины этой устойчивости: избыточность (например, наличие «малоинформативных» гласных) и разреженность («вблизи» слов обычно нет других слов). Если эти свойства где-то нарушаются, то ошибки исправлять тяжело: сравните чемодан зарыт и чемодан закрыт. 2.2. Основные определения и обозначения Пусть 𝔸 𝑞 — кодовый алфавит, алфавит канала, и пусть |𝔸 𝑞 | = 𝑞. Будем называть 𝑞-ичным кодом любое подмножество 𝐶 ⊆ 𝔸 𝑞 𝑛 , где 𝑛 — длина кода (длина кодовых слов), | 𝐶| — мощность кода (число кодовых слов). Чаще всего рассматривают двоичные коды, т.е. когда 𝑞 = 2 и 𝔸 𝑞 = {0,1}. Таким же важным является случай, когда 𝔸 𝑞 является полем. В этих случаях для произвольного слова 𝒂 будем через ‖ 𝒂‖ обозначать вес этого слова, то есть величину #{𝑖 ∣ 𝑎𝑖 ≠ 0}. Пусть 𝒂 и 𝒃 — слова в алфавите канала. Обозначимчерез 𝑑̃( 𝒂, 𝒃) минимальное число ошибок, в результате которых 𝒂 может перейти в 𝒃. Способ кодирования позволяет обнаруживать 𝑘 ошибок, если для любых различных кодовых сообщений 𝒂′ и 𝒂′′ при передаче в канал 𝒂′ на выходе из канала не может получиться 𝒂′′ (если в канале произошло не более 𝑘 ошибок). Иначе говоря, 𝑑̃( 𝒂′ , 𝒂′′) > 𝑘. Способ кодирования позволяет исправлять 𝑘 ошибок, если при передаче в канал различных кодовых сообщений 𝒂′ и 𝒂′′ на выходе из канала будут получаться различные сообщения (при условии, что с каждым отдельным сообщением в канале происходит не более 𝑘 ошибок). Формально: Канал связи (в котором могут происходить ошибки) Кодер Декод ер Исходное сообщение Закодированное сообщение Принятое сообщение (возможно, с ошибками) Декодированное сообщение (после исправления ошибок); должно совпасть с исходным
  • 11. www.dainiak.com ∄𝒂′ , 𝒂′′ ∈ 𝐶, 𝒂: 𝒂′ ≠ 𝒂′′ ∧ 𝑑̃( 𝒂′ , 𝒂) ≤ 𝑘 ∧ 𝑑̃( 𝒂′′ , 𝒂) ≤ 𝑘. Особенно удобно, когда 𝑑̃ является метрикой:  ∀𝒂, 𝒃 𝑑̃( 𝒂,𝒃) = 𝑑̃( 𝒃, 𝒂) — симметричность  ∀𝒂 ≠ 𝒃 𝑑̃( 𝒂, 𝒃) > 0  ∀𝒂 𝑑̃( 𝒂, 𝒂) = 0  ∀𝒂, 𝒃, 𝒄 𝑑̃( 𝒂, 𝒃) ≤ 𝑑̃( 𝒂, 𝒄) + 𝑑̃( 𝒄, 𝒃) — неравенство треугольника Так бывает не всегда. Например, если в канале могут происходить лишь ошибки вставки, то при 𝒂 ≠ 𝒃 по крайней мере одна из двух величин 𝑑̃( 𝒂, 𝒃), 𝑑̃( 𝒃, 𝒂) вовсе не определена. Пусть 𝑑̃(…, … ) — метрика и 𝐶 — код. Положим 𝑑̃( 𝐶) ≔ min 𝒂≠𝒃 𝒂,𝒃∈𝐶 𝑑̃( 𝒂, 𝒃). Величина 𝑑̃( 𝐶)называется кодовым расстоянием кода 𝐶. Утверждение (о связи кодового расстояния с устойчивостью к ошибкам).  Код 𝐶 обнаруживает 𝑡 ошибок ⇔ 𝑑̃( 𝐶) > 𝑡.  Код 𝐶 исправляет 𝑡 ошибок ⇐ 𝑑̃( 𝐶) > 2𝑡. Для метрик Хемминга и Левенштейна можно «⇐» заменить на «⇔». Докажем только первую часть. ⇐ Пусть в канал передавалось сообщение 𝒂. Если в канале происходит не более 𝑡 ошибок, то даже если при передаче возникли ошибки и получилось слово 𝒂′ ≠ 𝒂, то нам гарантирована оценка 𝑑̃( 𝒂, 𝒂′) ≤ 𝑡. Но тогда 𝒂′ ∉ 𝐶, а значит, мы увидим, что при передаче произошли ошибки. ⇒ С другой стороны, если бы в коде была пара слов 𝒂, 𝒃, таких, что 𝑑̃( 𝒂, 𝒃) ≤ 𝑡, то при неудачной ситуации, когда в канал передавалось слово 𝒂, ошибки могли распределиться таким образом, что получилось бы в точности слово 𝒃. Но тогда, приняв слово 𝒃, мы наивно полагали бы, что «само слово 𝒃 и передавалось изначально, причём при передаче не было ошибок». Доказательство второй части утверждения — упражнение (придётся использовать и симметричность метрики, и неравенство треугольника). Утверждение доказано. Если рассматриваются слова одной и той же длины, а в канале возможны только ошибки типа замещения (любые), то 𝑑̃( 𝒂, 𝒃) = 𝑑( 𝒂, 𝒃), где 𝑑( 𝒂, 𝒃) ≔ #{𝑖 ∣ 𝑎𝑖 ≠ 𝑏𝑖}. Функционал 𝑑 называется метрикой Хемминга, а величина 𝑑( 𝒂, 𝒃) — расстоянием Хемминга между 𝒂 и 𝒃. Везде далее по умолчанию будем считать, что в канале возможны произвольные ошибки типа замещения, т.е. в качестве метрики на словах везде далее используется метрика Хемминга. Обозначим 𝑑( 𝐶) ≔ min 𝒂≠𝒃 𝒂,𝒃∈𝐶 𝑑( 𝒂, 𝒃). Шар радиуса 𝑟 с центром в 𝒂 — это множество 𝑆 𝑟( 𝒂) ≔ { 𝒃 ∣ 𝑑( 𝒂, 𝒃) ≤ 𝑟}. Если в канал передавалось 𝒂, то на выходе из канала может быть любое слово 𝒃 ∈ 𝑆𝑡( 𝒂). Значит, код обнаруживает 𝑡 ошибок т. и т.т., когда никакое кодовое слово не попадает в шар радиуса 𝑡 с центром в другом кодовом слове. Аналогично, код исправляет 𝑡 ошибок т. и т.т., когда при передаче в канал различных кодовых слов на выходе получаются различные слова, то есть когда шары радиуса 𝑡 с центрами в кодовых словах не пересекаются. Основная задача теории кодов, исправляющих ошибки: строить коды, для которых число кодовых слов как можно больше, кодовое расстояние как можно больше, а длина кодовых слов как можно
  • 12. www.dainiak.com меньше. Также можно рассматривать задачи, связанные с ресурсами: процессы кодирования и декодирования (исправление ошибок) должны быть возможно менее трудоёмкими по количеству операций и по памяти. Геометрически основная задача — это задача об упаковке возможно большего числа шаров, возможно большего радиуса, в пространстве возможно меньшей размерности. Обозначение кода с заданными параметрами Если 𝐶 — 𝑞-ичный код с длиной слов 𝑛, числом слов 𝑀 и кодовым расстоянием 𝑑, то пишут: «𝐶 является ( 𝑛, 𝑀, 𝑑) 𝑞-кодом». Если код двоичный, то символ 𝑞 не указывают. 2.3. Границымощностей кодов Полезно знать границы своих возможностей при построении кодов. С несколькими такими границами мы познакомимся в этом разделе. 2.3.1. Граница Хемминга (граница сферической упаковки) Теорема. (R.W. Hamming) Для любого ( 𝑛, 𝑀, 𝑑) 𝑞-кода имеем 𝑀 ≤ 𝑞 𝑛 |𝑆⌊( 𝑑−1) 2⁄ ⌋( 𝟎)| В двоичном случае 𝑀 ≤ 2 𝑛 ∑ ( 𝑛 𝑘 ) ⌊( 𝑑−1) 2⁄ ⌋ 𝑘=0 Доказательство. Пусть 𝐶 = { 𝒂1, 𝒂2, … , 𝒂 𝑀} — ( 𝑛, 𝑀, 𝑑) 𝑞-код. Так как 𝑑( 𝐶) = 𝑑, то шары радиуса ⌊( 𝑑 − 1) 2⁄ ⌋ с центрами в кодовых словах не пересекаются. Отсюда 𝑞 𝑛 ≥ ∑ |𝑆⌊( 𝑑−1) 2⁄ ⌋(𝒂𝑗)|𝑀 𝑗=1 = 𝑀 ⋅ |𝑆⌊( 𝑑−1) 2⁄ ⌋( 𝟎)|. Теорема. (В некотором смысле, обратная границе Хемминга) Пусть числа 𝑞, 𝑛, 𝑀, 𝑑 ∈ ℕ таковы, что 𝑀 ≤ 𝑞 𝑛 | 𝑆 𝑑 ( 𝟎)| . Тогда существует ( 𝑛, 𝑀, 𝑑) 𝑞-код. Доказательство. Пусть 𝐶 = {𝒂1, … , 𝒂| 𝐶|} — код максимальной мощности с кодовым расстоянием 𝑑 и длиной слов 𝑛. Тогда шары радиуса 𝑑 с центрами в кодовых словах покрывают целиком множество 𝔸 𝑞 𝑛 (иначе код 𝐶 можно было пополнить любым из слов, не лежащих ни в одном из этих шаров). Отсюда ∑ |𝑆 𝑑(𝒂𝑗)| | 𝐶| 𝑗=1 ≥ 𝑞 𝑛 , следовательно, | 𝐶| ≥ 𝑀. Коды, достигающие границу Хемминга, называются совершенными или плотно упакованными. 2.3.2. Граница Синглтона Теорема. (R.C. Singleton) Для любого ( 𝑛, 𝑀, 𝑑) 𝑞-кода имеем 𝑀 ≤ 𝑞 𝑛−𝑑+1 . Доказательство. Пусть 𝐶 = { 𝒂1, … , 𝒂 𝑀} — ( 𝑛, 𝑀, 𝑑) 𝑞-код. Рассмотрим слова { 𝒂𝑖 ′}𝑖=1 𝑀 , где 𝒂𝑖 ′ получено из 𝒂𝑖 отбрасыванием ( 𝑑 − 1) последних координат. Так как 𝑑(𝒂𝑖, 𝒂𝑗) ≥ 𝑑 для любых 𝑖, 𝑗, то все слова 𝒂𝑖 ′ различны. Их количество не превосходит числа всех 𝑞-ичных слов длины ( 𝑛 − 𝑑 + 1). Поэтому 𝑀 ≤ 𝑞 𝑛−𝑑+1 . Теорема доказана. Коды, на которых достигается граница Синглтона, называются MDS-кодами (maximum distance separable codes).
  • 13. www.dainiak.com 2.3.3. Граница Плоткина Теорема. (M. Plotkin) Пусть 𝑛𝑟 < 𝑑, где 𝑟 ≔ 1 − 1 𝑞 . Тогда для любого ( 𝑛, 𝑀, 𝑑) 𝑞-кода имеем 𝑀 ≤ ⌊ 𝑑 𝑑−𝑛𝑟 ⌋. Доказательство. Рассмотрим матрицу, в которой по строкам выписаны все кодовые слова: ( 𝒂1 ⋮ 𝒂 𝑀 ). Элементы этой матрицы будем обозначать 𝑎𝑖𝑗. Оценим снизу и сверху следующую сумму: 𝑇 ≔ ∑ 𝟙 𝑎 𝑖𝑘≠𝑎 𝑗𝑘 1≤ 𝑘≤𝑛 1≤𝑖<𝑗≤𝑀 (через 𝟙… обозначен индикатор того, что условие … выполняется). Имеем 𝑇 = ∑ ∑ 𝟙 𝑎 𝑖𝑘≠𝑎 𝑗𝑘 1≤𝑘≤𝑛1≤𝑖<𝑗≤𝑀 = ∑ 𝑑(𝒂𝑖, 𝒂𝑗) 1≤𝑖<𝑗≤𝑀 ≥ 𝑀 ⋅ ( 𝑀 − 1) 2 ⋅ 𝑑. С другой стороны, 𝑇 = ∑ ∑ 𝟙 𝑎 𝑖𝑘≠𝑎 𝑗𝑘 1≤𝑖<𝑗≤𝑀1≤𝑘≤𝑛 . Зафиксируем произвольное 𝑘. Пусть среди кодовых слов ровно 𝑥 𝑠 слов имеют 𝑘-ю координату, равную 𝑠. Тогда ∑ 𝟙 𝑎 𝑖𝑘≠𝑎 𝑗𝑘 1≤𝑖<𝑗≤𝑀 = ∑ 𝑥 𝑠′ ⋅ 𝑥 𝑠′′ 𝑠′ ≠𝑠′′ . Имеем ∑ 𝑥 𝑠′ ⋅ 𝑥 𝑠′′ 𝑠′ ≠𝑠′′ = 1 2 ⋅ ((∑ 𝑥 𝑠 𝑠 ) 2 − ∑ 𝑥 𝑠 2 𝑠 ) = 1 2 ⋅ (𝑀2 − ∑ 𝑥 𝑠 2 𝑠 ) ≤ 1 2 ⋅ (𝑀2 − 𝑞 ⋅ 𝑀2 𝑞2 ) = 𝑀2 2 (1 − 1 𝑞 ). (Выше мы учли, что минимум выражения ∑ 𝑥 𝑠 2 𝑠 достигается, когда все 𝑥 𝑠 равны 𝑀 𝑞⁄ , — это неравенство Коши—Буняковского.) Из выведенных неравенств мы получаем оценку 𝑇 = ∑ ∑ 𝟙 𝑎 𝑖𝑘≠𝑎 𝑗𝑘 1≤𝑖<𝑗≤ 𝑀1≤𝑘≤𝑛 ≤ 𝑛𝑀2 2 (1 − 1 𝑞 ). Сопоставим верхнюю и нижнюю оценки для 𝑇: 𝑀 ⋅ ( 𝑀 − 1) 2 ⋅ 𝑑 ≤ 𝑇 ≤ 𝑛𝑀2 2 (1 − 1 𝑞 ). Отсюда ( 𝑀 − 1) ⋅ 𝑑 ≤ 𝑛𝑟𝑀, и, стало быть, 𝑀( 𝑑 − 𝑛𝑟) ≤ 𝑑. Так как 𝑑 − 𝑛𝑟 > 0 по условию и 𝑀 ∈ ℤ, то 𝑀 ≤ ⌊ 𝑑 𝑑−𝑟𝑛 ⌋. Теорема доказана. 2.3.4. Граница Элайеса—Бассалыго 2.3.4.1. Вложения метрических пространств Метрическое пространство — это множество с заданной на нём метрикой. Примеры:  ({0,1} 𝑛 , 𝑑( 𝒂, 𝒃)) — метрическое пространство Хемминга (здесь 𝑑 — метрика Хемминга).
  • 14. www.dainiak.com  (ℝ 𝑛 , 𝑑̃( 𝒂, 𝒃)) — евклидово метрическое пространство (здесь 𝑑̃( 𝒂, 𝒃) ≔ √∑ ( 𝑎𝑖 − 𝑏𝑖)2 𝑖 — обычная евклидова метрика). Вложение метрического пространства 𝑈 в метрическое пространство 𝑉 — это отображение 𝜙: 𝑈 → 𝑉, сохраняющее метрику: dist 𝑈 ( 𝑥, 𝑦) = dist 𝑉 (𝜙( 𝑥), 𝜙( 𝑦)). Вложение 𝑛-мерного хеммингова пространства в евклидово 𝑛-мерное пространство при 𝑛 > 1 сделать не получится, но можно выполнить отображение, сохраняющее определённую информацию о метрике. Сопоставим каждому вектору 𝒂 ∈ {0,1} 𝑛 вектор 𝒙 𝒂 ∈ ℝ 𝑛 по правилу: 𝑥 𝑖 𝒂 = { 1, если 𝑎𝑖 = 1 −1, если 𝑎𝑖 = 0 . При этом  𝑑̃(𝒙 𝒂 , 𝒙 𝒃 ) = 2 ⋅ √𝑑( 𝒂, 𝒃),  ⟨𝒙 𝒂 , 𝒙 𝒃 ⟩ = 𝑛 − 2 ⋅ 𝑑( 𝒂, 𝒃),  ‖ 𝒙 𝒂‖ = √ 𝑛 (здесь ‖⋅‖ — евклидова норма). 2.3.4.2. Системы векторов в евклидовом пространстве Лемма (о тупоугольной системе векторов). Пусть 𝒚, 𝒙1, … , 𝒙 𝑚 ∈ ℝ 𝑛 таковы, что выполнено  ⟨ 𝒙𝑖, 𝒚⟩ > 0 для 𝑖 = 1, … , 𝑚,  ⟨𝒙𝑖, 𝒙𝑗⟩ ≤ 0 при 𝑖 ≠ 𝑗. Тогда 𝒙1, … , 𝒙 𝑚 линейно независимыи, в частности, 𝑚 ≤ 𝑛. Доказательство. Рассмотрим произвольную нулевую линейную комбинацию: 𝑐1 𝒙1 + ⋯ + 𝑐 𝑚 𝒙 𝑚 = 𝟎. Положим Pos ≔ { 𝑖 ∣∣ 𝑐𝑖 > 0 }, Neg ≔ { 𝑖 ∣∣ 𝑐𝑖 < 0}. Нам нужно доказать, что Pos = Neg = ∅. Допустим, что это не так, и придём к противоречию. Пусть, например, Pos ≠ ∅ (быть может, при этом Neg = ∅). Положим 𝒛 ≔ ∑ 𝑐𝑖 𝒙𝑖 𝑖∈Pos = ∑ (−𝑐𝑗)𝒙𝑗 𝑗∈Neg . Имеем ⟨ 𝒛, 𝒚⟩ = ∑ 𝑐𝑖⟨ 𝒙𝑖, 𝒚⟩ 𝑖∈Pos > 0. Отсюда следует, что 𝒛 ≠ 𝟎. Имеем 𝒛 ≔ ∑ 𝑐𝑖 𝒙𝑖 𝑖∈Pos = ∑ (−𝑐𝑗)𝒙𝑗 𝑗∈Neg ≠ 𝟎. Рассмотрим теперь соотношения 0 < ⟨ 𝒛, 𝒛⟩ = ⟨ ∑ 𝑐𝑖 𝒙𝑖 𝑖∈Pos , ∑ (−𝑐𝑗)𝒙𝑗 𝑗∈Neg ⟩ = ∑ 𝑐𝑖(−𝑐𝑗) ⋅ ⟨𝒙𝑖, 𝒙𝑗⟩ 𝑖∈Pos 𝑗∈Neg ≤ 0 — противоречие! Лемма доказана.
  • 15. www.dainiak.com 2.3.4.3. Доказательство теоремы Элайеса—Бассалыго Теорема. (P. Elias, Л.А. Бассалыго) Для любого ( 𝑛, 𝑀, 𝑑)2-кода, где 𝑑 ≤ 𝑛 2⁄ , выполнено неравенство 𝑀 ≤ 𝑛2 𝑛 |𝑆⌊ 𝜏𝑛−1⌋ | , где 𝜏 = 1−√1−2𝛿 2 , 𝛿 = 𝑑 𝑛 . Через 𝑆⌊ 𝜏𝑛−1⌋ мы сокращённо обозначаем шар 𝑆⌊ 𝜏𝑛−1⌋ ( 𝟎). Доказательство. Положим 𝛿 ≔ 𝑑 𝑛 , 𝜏 ≔ 1−√1−2𝛿 2 и 𝑡 ≔ ⌊ 𝜏𝑛 − 1⌋. Пусть 𝐶 — ( 𝑛, 𝑀, 𝑑)-код. Положим deg 𝑡 𝐶 ≔ max 𝒃∈{0,1} 𝑛 | 𝐶 ∩ 𝑆𝑡( 𝒃)|. Имеем | 𝐶| ⋅ | 𝑆𝑡| = ∑ ∑ 𝟙 𝑑( 𝒂,𝒃)≤𝑡 𝒃∈{0,1} 𝑛 𝒂∈𝐶 = ∑ ∑ 𝟙 𝑑( 𝒂,𝒃)≤𝑡 𝒂∈𝐶𝒃∈{0,1} 𝑛 ≤ 2 𝑛 ⋅ deg 𝑡 𝐶. Отсюда 𝑀 ≤ 2 𝑛 ⋅deg 𝑡 𝐶 | 𝑆 𝑡| . Осталось доказать, что при выбранном 𝑡 выполнено неравенство deg 𝑡 𝐶 ≤ 𝑛. Пусть 𝒃 ∈ {0,1} 𝑛 , и 𝒂1, … , 𝒂 𝑚 ∈ 𝐶 ∩ 𝑆𝑡( 𝒃) (𝒂𝑖 ≠ 𝒂𝑗 при 𝑖 ≠ 𝑗). Нам нужно доказать, что 𝑚 ≤ 𝑛. Сопоставим словам 𝒃, 𝒂1, …, 𝒂 𝑚 векторы 𝒚, 𝒙1, … , 𝒙 𝑚 ∈ ℝ 𝑛 так (на примере 𝒃): 𝑦𝑖 = { 1 √ 𝑛⁄ , если 𝑏𝑖 = 1, −1 √ 𝑛⁄ , если 𝑏𝑖 = 0. При этом ⟨ 𝒙𝑖, 𝒚⟩ = 1 𝑛 (𝑛 − 2𝑑( 𝒂𝑖, 𝒃)) ≥ 1 𝑛 ( 𝑛 − 2𝑡) > 1 − 2𝜏 и ⟨𝒙𝑖, 𝒙𝑗 ⟩ = 1 𝑛 (𝑛 − 2𝑑(𝒂𝑖, 𝒂𝑗)) ≤ 1 𝑛 ( 𝑛 − 2𝑑) = 1 − 2𝛿. Похоже, можно применить лемму о векторах в ℝ 𝑛 , но для этого придётся «подправить» векторы 𝒚 и 𝒙1, … 𝒙 𝑚. Для этого перейдём к векторам 2𝜏𝒚, ( 𝒙1 − (1 − 2𝜏) 𝒚),… , ( 𝒙 𝑚 − (1 − 2𝜏) 𝒚). Для этих векторов получаем ⟨( 𝒙𝑖 − (1 − 2𝜏) 𝒚),2𝜏𝒚⟩ = 2𝜏⟨ 𝒙𝑖, 𝒚⟩− 2𝜏(1 − 2𝜏)⟨ 𝒚, 𝒚⟩ = 2𝜏⟨ 𝒙𝑖, 𝒚⟩ − 2𝜏(1 − 2𝜏) > 0 и ⟨( 𝒙𝑖 − (1 − 2𝜏) 𝒚),(𝒙𝑗 − (1 − 2𝜏) 𝒚)⟩ = ⟨𝒙𝑖, 𝒙𝑗⟩ + (1 − 2𝜏)2⟨ 𝒚, 𝒚⟩ − (1 − 2𝜏)(⟨ 𝒙𝑖, 𝒚⟩ + ⟨𝒙𝑗, 𝒚⟩) ≤ 1 − 2𝛿 + (1 − 2𝜏)2 − 2(1 − 2𝜏)2 = −2(2𝜏2 − 2𝜏 + 𝛿) = 0. Отсюда, по лемме о тупоугольной системе векторов, следует, что 𝑚 ≤ 𝑛. Теорема доказана. 3. Линейные коды 3.1. Основные понятия Пусть 𝑞 — степень простого числа и символы кодовых слов — элементы конечного поля 𝔽 𝑞. ( 𝑛, 𝑀, 𝑑) 𝑞-код 𝐶 называется линейным, если он является линейным подпространством пространства 𝔽 𝑞 𝑛 , то есть линейная комбинация кодовых слов также является кодовым словом. Если dim 𝐶 = 𝑘, то говорят, что задан линейный [ 𝑛, 𝑘, 𝑑] 𝑞-код. Пример линейного двоичного кода — код с проверкой чётности: 𝐶 ≔ {( 𝑎1,… , 𝑎 𝑛) ∈ 𝔽2 𝑛 ∣ ∑𝑎𝑖 = 0} Один из базисов этого кода: (1,0,0, … ,0,1) (0,1,0, … ,0,1) (0,0,1, … ,0,1)
  • 16. www.dainiak.com ⋮ (0,0,0, … ,1,1) Если выписать базис линейного [ 𝑛, 𝑘, 𝑑] 𝑞-кода построчно в виде матрицы размера 𝑘 × 𝑛, получим порождающую матрицу кода. Итак, для задания [ 𝑛, 𝑘, 𝑑] 𝑞-кода достаточно указать его порождающую матрицу 𝐺 ∈ 𝔽 𝑞 𝑘×𝑛 . Число линейных комбинаций 𝑘 базисных векторов с коэффициентами из 𝔽 𝑞 равно 𝑞 𝑘 , поэтому каждый [ 𝑛, 𝑘, 𝑑] 𝑞-код является ( 𝑛, 𝑞 𝑘 , 𝑑) 𝑞-кодом. Если линейный [ 𝑛, 𝑘, 𝑑] 𝑞-кода задан порождающей матрицей 𝐺, а исходное сообщение представлено как вектор 𝒙 ∈ 𝔽 𝑞 𝑘 , то закодировать его можно быстро и просто: 𝒙 кодирование → 𝒙 𝑇 𝐺 ∈ 𝔽 𝑞 𝑛 . Обратно, если закодированное сообщение 𝒂 ∈ 𝔽 𝑞 𝑛 было принято без ошибок, декодируем его, решая, например, методом Гаусса систему 𝒙 𝑇 𝐺 = 𝒂. Порождающую матрицу 𝐺 ∈ 𝔽 𝑞 𝑘×𝑛 линейными преобразованиями и перестановками строк и столбцов можно привести к каноническому виду: ( 1 0 ⋯ 0 0 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 1 ∣ ∣ ∣ ∣ ∣ ∣ 𝐺̃ ), где 𝐺̃ ∈ 𝔽 𝑞 𝑘×( 𝑛−𝑘) . Тогда кодирование будет систематическим: ( 𝑥1,… , 𝑥 𝑘) кодирование → (𝑥1,… , 𝑥 𝑘 ∣ 𝒙𝐺̃). Если порождающая матрица кода задана в каноническом виде, то кодирование будет систематическим и слово ( 𝑥1, …, 𝑥 𝑘) переходит в (𝑥1, …, 𝑥 𝑘 ∣ 𝒙𝐺̃) = ( 𝑥1,… , 𝑥 𝑘, 𝑥̃1,… , 𝑥̃ 𝑛−𝑘). Разряды 𝑥1,… , 𝑥 𝑘 называются информационными, а 𝑥̃1,… , 𝑥̃ 𝑛−𝑘 — проверочными. Если матрица 𝐺 исходно задана не в каноническом виде, а мы приводим её к каноническому виду, то получается в общем случае не тот же код, а эквивалентный ему. Формально, коды 𝐶1 и 𝐶2 эквивалентны, если существует перестановка 𝜋 и константы 𝑟1, …, 𝑟𝑛 ∈ 𝔽 𝑞 ∖ {0}, такие, что ( 𝑎1, …, 𝑎 𝑛 ) ∈ 𝐶1 ⇔ (𝑟1 𝑎 𝜋(1),… , 𝑟𝑛 𝑎 𝜋( 𝑛)) ∈ 𝐶2. Для эквивалентных кодов 𝑑( 𝐶1) = 𝑑( 𝐶2). Утверждение (о кодовом расстоянии линейных кодов). Для любого линейного кода 𝐶 имеем 𝑑( 𝐶) = min 𝒂∈𝐶 𝒂≠𝟎 ‖ 𝒂‖. Доказательство. Поскольку 𝟎 ∈ 𝐶, то 𝑑( 𝐶) ≝ min 𝒂,𝒃∈𝐶 𝒂≠𝒃 𝑑( 𝒂, 𝒃) ≤ min 𝒂∈𝐶 𝒂≠𝟎 𝑑( 𝒂, 𝟎) = min 𝒂∈𝐶 𝒂≠𝟎 ‖ 𝒂‖. В обратную сторону. Пусть кодовое расстояние достигается на паре слов 𝒂∗ , 𝒃∗ . Тогда так как ( 𝒂∗ − 𝒃∗) ∈ 𝐶, получаем 𝑑( 𝐶) = 𝑑( 𝒂∗ , 𝒃∗) = ‖ 𝒂∗ − 𝒃∗‖ ≥ min 𝒂∈ 𝐶 𝒂≠𝟎 ‖ 𝒂‖. Утверждение доказано. Проверочная матрица 𝐻 линейного кода — это матрица однородной системы линейных уравнений, которым удовлетворяет код. Например, для кода с проверкой чётности 𝐻 = (11…1). Для любого
  • 17. www.dainiak.com кодового слова 𝒂, по определению матрицы 𝐻, выполнено равенство 𝐻𝒂 𝑇 = 𝟎. Для [ 𝑛, 𝑘, 𝑑] 𝑞-кода 𝐻 ∈ 𝔽 𝑞 ( 𝑛−𝑘)×𝑛 . Утверждение. Если 𝐺 и 𝐻 — порождающая и проверочная матрицы линейного [ 𝑛, 𝑘, 𝑑] 𝑞-кода, то 𝐻𝐺 𝑇 = 𝟎( 𝑛−𝑘)×𝑘 . Доказательство: достаточно заметить, что каждая строка матрицы 𝐺 — это кодовое слово, а значит, она удовлетворяет системе, задаваемой 𝐻. Если коды 𝐶1 и 𝐶2 таковы, что проверочная матрица 𝐶1 является порождающей матрицей для 𝐶2, то эти коды называют двойственными. Коды 𝐶1 и 𝐶2 двойственныт. и т.т., когда ⟨ 𝒂1, 𝒂2⟩ = 0 для любых слов 𝒂1 ∈ 𝐶1, 𝒂2 ∈ 𝐶2. Поэтому двойственные коды называются также ортогональными. Пусть 𝐻 — проверочная матрица кода 𝐶, и пусть 𝒂 ∈ 𝐶. Если при передаче 𝒂 по каналу произошло 𝑡 ошибок, на выходе из канала имеем слово 𝒃. Вектор 𝒆 ≔ 𝒃 − 𝒂 называется вектором ошибок. Очевидно, ‖ 𝒆‖ = 𝑡. Исправить ошибки в 𝒃 — то же самое, что найти вектор 𝒆. Используем равенство 𝐻𝒃 𝑇 = 𝐻𝒂 𝑇 + 𝐻𝒆 𝑇 = 𝐻𝒆 𝑇 . Получаем задачу: найти вектор 𝒆, такой, что { ‖ 𝒆‖ < 𝑑( 𝐶) 2 , 𝐻𝒆 𝑇 = 𝐻𝒃 𝑇 . Утверждение. Если решение этой системы существует, то оно единственное. Доказательство. Пусть нашлись разные решения 𝒆1 ≠ 𝒆2. Тогда ‖ 𝒆1 − 𝒆2‖ ≤ ‖ 𝒆1‖ + ‖ 𝒆2‖ < 𝑑( 𝐶)и 𝐻( 𝒆1 − 𝒆2) 𝑇 = 0 — противоречие. Можно составить таблицу решений системы { ‖ 𝒆‖ < 𝑑( 𝐶) 2 , 𝐻𝒆 𝑇 = 𝒔. для всевозможных 𝒔. При получении из канала слова 𝒃 мы вычисляем 𝒔 ≔ 𝐻𝒃 𝑇 (синдром слова 𝒃), и для этого 𝒔 смотрим в таблице соответствующий вектор 𝒆. Декодированное сообщение — решение системы 𝒙 𝑇 𝐺 = ( 𝒃 − 𝒆). 3.2. Теорема Варшамова—Гилберта Утверждение. (О связи кодового расстояния и проверочной матрицы) Линейный код, определяемый проверочной матрицей 𝐻, имеет расстояние 𝑑 т. и т.т., когда любые ( 𝑑 − 1) столбцов 𝐻 линейно независимы, и найдутся 𝑑 линейно зависимыхстолбцов в 𝐻. Доказательство. Пусть 𝒂 = ( 𝑎1,… , 𝑎 𝑛) ≠ 𝟎 — произвольное кодовое слово кода с проверочной матрицей 𝐻. Пусть 𝐻1,… , 𝐻 𝑛 — столбцы 𝐻. Имеем 𝐻𝒂 𝑇 = 𝑎1 ⋅ 𝐻1 + ⋯+ 𝑎 𝑛 ⋅ 𝐻 𝑛. Если 𝑖1,… , 𝑖 𝑡 — все ненулевые координаты 𝒂, то 𝑎1 𝐻1 + ⋯+ 𝑎 𝑛 𝐻 𝑛 = 𝑎𝑖1 𝐻𝑖1 + ⋯+ 𝑎𝑖 𝑡 𝐻𝑖 𝑡 . Так как 𝒂 — кодовое слово, то 𝐻𝒂 𝑇 = 𝟎, то есть 𝑎𝑖1 𝐻𝑖1 + ⋯+ 𝑎𝑖 𝑡 𝐻𝑖 𝑡 = 𝟎. Мы получили, что в коде есть слово веса не более 𝑡 т. и т.т., когда некоторые 𝑡 столбцов матрицы 𝐻 линейно зависимы. Осталось воспользоваться формулой, справедливой для любых линейных кодов: 𝑑( 𝐶) = min 𝒂∈𝐶 𝒂≠𝟎 ‖ 𝒂‖. Утверждение доказано.
  • 18. www.dainiak.com Одним из важнейший достаточных условий существования линейныхкодов является следующая теорема. Теорема. (Р.Р. Варшамов, E.N. Gilbert) Пусть натуральные числа 𝑛, 𝑘, 𝑑′ таковы, что ∑ ( 𝑛 − 1 𝑗 ) 𝑑′ −1 𝑗=0 < 2 𝑛−𝑘 . Тогда существует [ 𝑛, 𝑘, 𝑑]-код, где 𝑑 > 𝑑′ . Доказательство. Покажем, что в условиях теоремы можно построить матрицу 𝐻 ∈ 𝔽2 ( 𝑛−𝑘)×𝑛 , у которой любые 𝑑′ столбцов линейно независимы. Будем строить матрицу по столбцам. Пусть уже выбраны 𝑚 столбцов (где 𝑚 < 𝑛) и требуется выбрать ( 𝑚 + 1)-й столбец. Этот новый столбец не должен образовывать нулевую линейную комбинацию с ( 𝑑′ − 1) или менее из уже выбранных столбцов. Так как мы работаем в 𝔽2, то это равносильно тому, что выбираемый столбец не равен сумме ( 𝑑′ − 1) или менее уже выбранных столбцов. Количество таких сумм равно ∑ ( 𝑚 𝑗 ) 𝑑′ −1 𝑗=0 ≤ ∑ ( 𝑛 − 1 𝑗 ) 𝑑′ −1 𝑗=0 < 2 𝑛−𝑘 . Итак, запрещённых для выбора столбцов у нас оказывается строго меньше 2 𝑛−𝑘 , а всего векторов длины ( 𝑛 − 𝑘) ровно 2 𝑛−𝑘 . Значит, найдётся вектор из 𝔽2 𝑛−𝑘 , который можно добавить в качестве очередного столбца. Теорема доказана. 3.3. Двоичный кодХемминга В этом разделе мы введём коды Хемминга, пожалуй, самые простые нетривиальные линейные коды. Рассмотренный нами ранее простейший двоичный код с проверкой чётности {( 𝑎1,… , 𝑎 𝑛) ∈ 𝔽2 𝑛 ∣ ∑𝑎𝑖 = 0} может обнаруживать одну ошибку, т.к. если один разряд 𝑎𝑖 заменить на противоположный, соотношение ∑𝑎𝑖 = 0 нарушится. Но исправить ошибку не удастся. Хочется построить двоичный код, исправляющий хотя бы одну ошибку. Для этого вместо «глобального» контроля чётности применим несколько «дихотомических» проверок на чётность. Пример для 𝑛 = 7. Рассмотрим код, удовлетворяющий соотношениям 𝑎4 + 𝑎5 + 𝑎6 + 𝑎7 = 0, 𝑎2 + 𝑎3 + 𝑎6 + 𝑎7 = 0, 𝑎1 + 𝑎3 + 𝑎5 + 𝑎7 = 0. Проверочная матрица этого кода: ( 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1 ). Столбцы матрицы — всевозможные ненулевые векторы высоты 3: 𝑗-й столбец суть двоичная запись числа 𝑗. Любая пара столбцов л.н.з., значит 𝑑( 𝐶) ≥ 3, значит, этот код исправляет одну ошибку и обнаруживает две. Если ошибка случается в 𝑎𝑗, то можно вычислить левые части проверочных соотношений, и они дадут двоичную запись 𝑗, например: 𝑎4 + 𝑎5̅̅̅ + 𝑎6 + 𝑎7 = 1 𝑎2 + 𝑎3 + 𝑎6 + 𝑎7 = 0 𝑎1 + 𝑎3 + 𝑎5̅̅̅ + 𝑎7 = 1
  • 19. www.dainiak.com Общий случай: 𝑛 ≔ 2 𝑚 − 1 для некоторого 𝑚. Двоичный код Хемминга длины 𝑛 с параметрами [2 𝑚 − 1, 2 𝑚 − 𝑚 − 1, 3] определяется проверочной матрицей 𝐻 ∈ 𝔽2 𝑚×𝑛 , столбцы которой — всевозможные двоичные векторы высоты 𝑚: ( 1 0 1 ⋯ 1 0 1 1 ⋯ 1 ⋮ ⋮ ⋮ ⋯ ⋮ 0 0 0 ⋯ 1 ). Теорема Хемминга утверждает, что для любого ( 𝑛, 𝑀, 𝑑)-кода выполнено неравенство 𝑀 ≤ 2 𝑛 ∑ ( 𝑛 𝑘 ) ⌊( 𝑑−1) 2⁄ ⌋ 𝑘=0 . Напомним, что коды, на которых достигается граница Хемминга, называются совершенными или плотно упакованными. Нетрудно показать, что код Хемминга совершенен. Действительно, для кода Хемминга имеем 𝑛 = 2 𝑚 − 1, 𝑀 = 22 𝑚 −𝑚−1 и 𝑑 = 3. Отсюда ∑ ( 𝑛 𝑘 ) ⌊( 𝑑−1) 2⁄ ⌋ 𝑘=0 = 𝑛 + 1 = 2 𝑚 = 2 𝑛 𝑀⁄ . 3.4. Границымощностей для линейных кодов 3.4.1. Граница Синглтона для линейных кодов Утверждение. (Граница Синглтона для линейных кодов) Для любого [ 𝑛, 𝑘, 𝑑] 𝑞-кода выполнено неравенство 𝑘 ≤ 𝑛 − 𝑑 + 1. Доказательство. По теореме Синглтона, для любого ( 𝑛, 𝑀, 𝑑) 𝑞-кода выполнено 𝑀 ≤ 𝑞 𝑛−𝑑+1 . С другой стороны, для линейного кода 𝑀 = 𝑞 𝑘 . 3.4.2. Граница Грайсмера—Соломона—Штиффлера Теорема об остаточном коде. (G. Solomon, J.J. Stiffler) Если существует [ 𝑛, 𝑘, 𝑑] 𝑞-код, то существует и [ 𝑛 − 𝑑, 𝑘 − 1, 𝑑′] 𝑞-код, где 𝑑′ ≥ 𝑑 𝑞⁄ . Доказательство. Пусть 𝐺 — порождающая матрица некоторого [ 𝑛, 𝑘, 𝑑] 𝑞-кода 𝐶. Б.о.о. будем считать, что первая строка 𝐺 содержит ровно 𝑑 ненулевых элементов и имеет вид ( 𝑟1 … 𝑟 𝑑0… 0). Порождающая матрица кода 𝐶: 𝐺 = ( 𝑟1 … 𝑟 𝑑 0… 0 ⋯ 𝐺′ ). Имеем 𝐺′ ∈ 𝔽 𝑞 ( 𝑘−1)×( 𝑛−𝑑) . Покажем, что rk 𝐺′ = 𝑘 − 1. Допустим противное: некоторая нетривиальная линейная комбинация строк 𝐺′ равняется 𝟎. Тогда линейная комбинация соответствующих строк 𝐺 равна ( 𝑡1 … 𝑡 𝑑0 … 0), где ∀𝑖 ( 𝑡𝑖 ≠ 0). Линейная комбинация 𝑈 некоторых строк 𝐺 равна ( 𝑡1 … 𝑡 𝑑0 …0), где ∀𝑖 ( 𝑡𝑖 ≠ 0). Т.к. 𝔽 𝑞 — поле, то ∃𝑠 ∈ 𝔽 𝑞, такой, что 𝑠𝑡 𝑑 = −𝑟 𝑑. Тогда 𝑠 ⋅ 𝑈 + ( 𝑟1 … 𝑟𝑑0… 0) — линейная комбинация строк 𝐺, равная (( 𝑠𝑡1 + 𝑟1)… ( 𝑠𝑡 𝑑−1 + 𝑟𝑑−1) 00… 0). Это противоречит условию 𝑑( 𝐶) = 𝑑. Итак, 𝐺′ ∈ 𝔽 𝑞 ( 𝑘−1)×( 𝑛−𝑑) и rk 𝐺′ = 𝑘 − 1. Значит, 𝐺′ является порождающей матрицей некоторого [ 𝑛 − 𝑑, 𝑘 − 1, 𝑑′] 𝑞-кода 𝐶′ (этот код называется остаточным для исходного кода 𝐶). Рассмотрим любой ненулевой вектор кода 𝐶′ : 𝒂′ ≔ ( 𝑎1 ′ ,… , 𝑎 𝑛−𝑑 ′ ) ≠ 𝟎, такой, что ‖ 𝒂′‖ = 𝑑′ . В коде 𝐶 есть вектор вида ( 𝑎1, …, 𝑎 𝑑, 𝑎1 ′ , … , 𝑎 𝑛−𝑑 ′ ). Пусть 𝑓1, … , 𝑓𝑞 — все элементы поля 𝔽 𝑞. Коду 𝐶 принадлежат все векторы вида
  • 20. www.dainiak.com (( 𝑎1 − 𝑓𝑖 𝑟1), … ,( 𝑎 𝑑 − 𝑓𝑖 𝑟 𝑑), 𝑎1 ′ , … , 𝑎 𝑛−𝑑 ′ ). Запишем эти 𝑞 векторов построчно в виде матрицы и оценим количество ненулевых элементов в ней: ( ( 𝑎1 − 𝑓1 𝑟1) … ( 𝑎 𝑑 − 𝑓1 𝑟 𝑑) 𝑎1 ′ … 𝑎 𝑛−𝑑 ′ ( 𝑎1 − 𝑓2 𝑟1) … ( 𝑎 𝑑 − 𝑓2 𝑟 𝑑) 𝑎1 ′ … 𝑎 𝑛−𝑑 ′ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ (𝑎1 − 𝑓𝑞 𝑟1) … (𝑎 𝑑 − 𝑓𝑞 𝑟𝑑) 𝑎1 ′ … 𝑎 𝑛−𝑑 ′ ) . В каждой подстроке вида 𝑎1 ′ , … , 𝑎 𝑛−𝑑 ′ ровно 𝑑′ элементов отличны от нуля. В каждом из первых 𝑑 столбцов ровно один ноль. Поэтому в рассмотренной матрице 𝑑( 𝑞 − 1) + 𝑞𝑑′ ненулевых элементов. С другой стороны, каждая строка матрицы — ненулевой вектор кода 𝐶, значит, в матрице не менее чем 𝑞𝑑 ненулевых элементов. Отсюда 𝑑( 𝑞 − 1) + 𝑞𝑑′ ≥ 𝑞𝑑, и, следовательно 𝑑′ ≥ 𝑑 𝑞⁄ . Теорема доказана. Теорема. (J.H. Griesmer, G. Solomon, J.J. Stiffler) Для любого [ 𝑛, 𝑘, 𝑑] 𝑞-кода имеем 𝑛 ≥ ∑ ⌈ 𝑑 𝑞 𝑖 ⌉ 𝑘−1 𝑖=0 . Доказательство. Утверждение очевидно при 𝑘 = 1. Предположим, что оно выполнено для кодов с размерностью ≤ 𝑘 − 1 и докажем его для [ 𝑛, 𝑘, 𝑑] 𝑞-кодов. Обозначим через 𝑁( 𝑘, 𝑑) минимальную длину слов у кода с размерностью 𝑘 и расстоянием 𝑑. Пусть 𝐶 — какой-нибудь [ 𝑁( 𝑘, 𝑑), 𝑘, 𝑑] 𝑞-код. Остаточный для 𝐶 код имеет параметры [ 𝑁( 𝑘, 𝑑) − 𝑑, 𝑘 − 1, 𝑑′] 𝑞, и, по предположению индукции, для него справедливо неравенство 𝑁( 𝑘, 𝑑) − 𝑑 ≥ ∑ ⌈ 𝑑′ 𝑞 𝑖 ⌉ 𝑘−2 𝑖=0 . Отсюда, с учётом предположения индукции и соотношения 𝑑′ ≥ 𝑑 𝑞⁄ , получаем 𝑁( 𝑘, 𝑑) ≥ 𝑑 + ∑ ⌈ 𝑑′ 𝑞 𝑖 ⌉ 𝑘−2 𝑖=0 ≥ 𝑑 + ∑ ⌈ 𝑑 𝑞 𝑖+1 ⌉ 𝑘−2 𝑖=0 = ∑ ⌈ 𝑑 𝑞 𝑖 ⌉ 𝑘−1 𝑖=0 . Теорема доказана. 3.5. Графы-расширители и кодына их основе 3.5.1. Графы-расширители Двудольный граф с долями 𝐿 и 𝑅 называется ( 𝑛, 𝑚, Δ, 𝛼, 𝑐)-расширителем, если  | 𝐿| = 𝑛, | 𝑅| = 𝑚,  deg 𝑢 = Δ для любого 𝑢 ∈ 𝐿,  для любого 𝑆 ⊆ 𝐿 при | 𝑆| ≤ 𝛼𝑛 выполнено неравенство | 𝑁( 𝑆)| ≥ 𝑐 ⋅ | 𝑆|, где 𝑁( 𝑆) — множество вершин в 𝑅, смежных с вершинами из 𝑆. Графы-расширители также называются расширяющими, экспандерными графами или экспандерами (от англ. expander). Начало применению расширительных свойств графов в кодировании положили работы советских математиков М.С. Пинскера, Л.А. Бассалыго, Г.А. Маргулиса в 1970-х годах. Теорема о существовании расширителей. Пусть Δ ≥ 3, 𝑐 ≤ Δ − 2, 𝛼 < 1 и 𝑚 ≥ 4𝑛Δ2 √ 𝛼. Тогда при всех натуральных 𝑛 существуют ( 𝑛, 𝑚, Δ, 𝛼, 𝑐)-расширители. Доказательство. Построим случайный двудольный граф 𝐺 и докажем, что он с большой вероятностью будет искомым. Зафиксируем множества 𝐿 и 𝑅 (| 𝐿| = 𝑛, | 𝑅| = 𝑚) и проведём по Δ
  • 21. www.dainiak.com рёбер из каждой вершины в 𝐿 в выбираемые равновероятно и независимо вершины в 𝑅 (в итоге некоторые из этих Δ рёбер могут попасть в одни и те же вершины 𝑅). Рёбра 𝐺 имеют естественную нумерацию, в том порядке, в котором мы определяли их концы в 𝑅 (сначала Δ рёбер из 1-й вершины 𝐿, затем Δ рёбер из 2-й вершины 𝐿 и т.д.). Если 𝐺 не является расширителем, то найдётся такое 𝑆 ⊂ 𝐿, для которого | 𝑁( 𝑆)| < (Δ − 2) ⋅ | 𝑆|. Оценим вероятность того, что фиксированное множество 𝑆 оказалось таким «плохим» при случайном выборе концов рёбер из 𝑆 в 𝑅. А затем оценим вероятность того, что 𝐺 не расширитель, по формуле Pr[𝐺 плохой] = Pr[∃плохое 𝑆] ≤ ∑ Pr[𝑆 —плохое] 𝑆 . Каждое ребро вида ( 𝑢, 𝑣), где 𝑢 ∈ 𝑆, 𝑣 ∈ 𝑁( 𝑆), отнесём к одному из двух типов. Если никакое ребро из 𝑆 в 𝑁( 𝑆) с меньшим номером не ведёт в 𝑣, то ребро ( 𝑢, 𝑣) назовём «первопроходцем». В противном случае назовём ( 𝑢, 𝑣) «дублем». Очевидно, всего будет 𝑁( 𝑆) «первопроходцев» и (Δ ⋅ | 𝑆| − | 𝑁( 𝑆)|) «дублей». Мы предполагаем, что | 𝑁( 𝑆)| < (Δ − 2) ⋅ | 𝑆|, а значит, «дублей» будет не менее 2 ⋅ | 𝑆|. Вероятность того, что среди рёбер из 𝑆 в 𝑁( 𝑆) есть 2𝑠 дублей, не превосходит ( Δ ⋅ | 𝑆| 2| 𝑆| ) ( Δ ⋅ | 𝑆| 𝑚 ) 2| 𝑆| . Первый из сомножителей оценивает число способов выбрать рёбра-дубли, второй — вероятность попадания конца «дубля» в одну из вершин в | 𝑁( 𝑆)|. Значит, Pr[𝐺 не расширитель] ≤ ∑ Pr[𝑆 «плохое»] 𝑆⊂𝐿 1≤| 𝑆|≤𝛼𝑛 ≤ ∑ ( 𝑛 𝑠 ) ( Δ ⋅ 𝑠 2𝑠 ) ( Δ ⋅ 𝑠 𝑚 ) 2𝑠 1≤𝑠≤𝛼𝑛 . С учётом оценки ( 𝑎 𝑏 ) < (𝑒𝑎 𝑏 ) 𝑏 и того, что при 𝑚 ≥ 4𝑛Δ2 √ 𝛼 выполняется неравенство 𝑒3 Δ4 𝛼𝑛2 4𝑚2 < 1 3 , получаем Pr[𝐺 не расширитель] ≤ ∑ ( 𝑒𝑛 𝑠 ) 𝑠 ( 𝑒Δ𝑠 2𝑠 ) 2𝑠 ( Δ𝑠 𝑚 ) 2𝑠 1≤𝑠≤𝛼𝑛 = ∑ ( 𝑒3 Δ4 𝑠𝑛 4𝑚2 ) 𝑠 1≤𝑠≤ 𝛼𝑛 ≤ ∑ ( 𝑒3 Δ4 𝛼𝑛2 4𝑚2 ) 𝑠 1≤𝑠≤𝛼𝑛 ≤ ∑ ( 1 3 ) 𝑠 1≤𝑠≤𝛼𝑛 < 1 2 . Итак, случайный двудольный мультиграф будет расширителем с вероятностью не менее 1 2 . Чтобы от мультиграфа перейти к обычному графу, достаточно перенаправить концы рёбер-дублей в произвольные вершины 𝑅. Свойства расширительности от этого могут только улучшиться. Теорема доказана. 3.5.2. Коды на основе расширителей Код на основе двудольного графа — это линейный двоичныйкод, строящийся следующим образом. Вершинам из 𝐿 соответствуют переменные 𝑥1,… , 𝑥 𝑛. Вершинам из 𝑅 соответствуют уравнения: если в вершину 𝑣 ∈ 𝑅 входят рёбра из вершин 𝑢 𝑖1 , …, 𝑢 𝑖 𝑙 , то уравнение будет 𝑥 𝑖1 + ⋯+ 𝑥 𝑖 𝑙 = 0. Искомый код состоит из всех слов ( 𝑥1 … 𝑥 𝑛), удовлетворяющих системе этих уравнений. Например, для графа
  • 22. www.dainiak.com соответствующий код будет выглядеть так: {( 𝑥1 𝑥2 𝑥3 𝑥4) ∣ 𝑥1 + 𝑥2 + 𝑥4 = 0, 𝑥1 + 𝑥3 = 0}. Коды на основе расширителей введены М. Сипсером и Д. Шпильманом, являются обобщением низкоплотностных кодов (LDPC-codes) Р. Галлагера (R.G. Gallager). Утверждение. Код, построенный по двудольному графу, в котором | 𝐿| = 𝑛 и | 𝑅| = 𝑚, является двоичным линейным [ 𝑛, 𝑘, 𝑑]-кодом, где 𝑘 ≥ 𝑛 − 𝑚. Доказательство: код является множеством решений системы из 𝑚 уравнений с 𝑛 неизвестными, а значит, он образует линейное пространство размерности не менее чем 𝑛 − 𝑚. Теорема о кодовом расстоянии. (M. Sipser, D.A. Spielman) Если 𝑐 > Δ 2 и 𝐶 — код, построенный на основе (𝑛, 𝑚, Δ, 𝛼, 𝑐)-расширителя, то 𝑑( 𝐶) > 𝛼𝑛. Доказательство от противного. Допустим, что 𝑑( 𝐶) ≤ 𝛼𝑛. Тогда найдётся слово 𝒂 ∈ 𝐶, такое, что 𝒂 ≠ 𝟎 и ‖ 𝒂‖ ≤ 𝛼𝑛. Пусть 𝐼 ≔ {𝑢1,… , 𝑢‖ 𝒂‖} — вершины из 𝐿, соответствующие единичным координатам 𝒂. Так как наш граф — расширитель и ‖ 𝒂‖ ≤ 𝛼𝑛, то | 𝑁( 𝐼)| ≥ 𝑐 ⋅ | 𝐼| > Δ 2 ⋅ | 𝐼|. Всего из 𝐼 в 𝑁( 𝐼) ведёт ровно Δ ⋅ | 𝐼| рёбер. Поэтому среднее число рёбер, входящее в вершины 𝑁( 𝐼) из 𝐼, равно Δ ⋅ | 𝐼| | 𝑁( 𝐼)| < Δ ⋅ | 𝐼| Δ 2 ⋅| 𝐼| = 2. Значит, в 𝑁( 𝐼) найдётся вершина, в которую входит ровно одно ребро из 𝐼. Получается, что среди задающих код уравнений есть такое уравнение 𝑥 𝑖1 + ⋯+ 𝑥 𝑖 𝑙 = 0, в котором ровно одна из переменных на слове 𝒂 обращена в единицу. Но этого не может быть в предположении, что 𝒂 является решением этого уравнения. Противоречие. Теорема доказана. 3.5.3. Алгоритм Сипсера—Шпильмана 3.5.3.1. Формулировка алгоритма декодирования Пусть 𝑐 > 3Δ 4 , и 𝐶 — код, построенный на основе (𝑛, 𝑚, Δ, 𝛼, 𝑐)-расширителя. Пусть слово 𝒂′ получено из некоторого кодового слова 𝒂 искажением не более чем 𝛼𝑛 4 битов. Тогда восстановить 𝒂, зная 𝒂′ , можно с помощью следующего алгоритма (M. Sipser, D.A. Spielman): 1. Если 𝒂′ ∈ 𝐶, то выводим 𝒂′ и завершаем работу. 2. Если 𝒂′ ∉ 𝐶, то для 𝒂′ некоторые из уравнений (отвечающих вершинам в 𝑅) нарушены. Считаем поочерёдно для каждого бита 𝒂′ число нарушенных уравнений, в которых он участвует. Если их > Δ 2⁄ , инвертируем этот бит и идём на шаг 1. 3.5.3.2. Лемма о результативном бите Чтобы доказать корректность алгоритма Сипсера—Шпильмана, нам потребуется следующая лемма. Лемма о «результативном бите». Пусть 𝑐 > 3Δ 4 , и 𝐶 — код, построенный на основе (𝑛, 𝑚, Δ, 𝛼, 𝑐)-расширителя. Пусть 𝒂′ ∉ 𝐶, но при этом 𝑑( 𝒂, 𝒂′) ≤ 𝛼𝑛 для некоторого 𝒂 ∈ 𝐶. Тогда в 𝒂′ найдётся бит, обращение которого на
  • 23. www.dainiak.com противоположный строго уменьшает число невыполненных для 𝒂′ уравнений. (Имеются в виду уравнения, построенные по графу-расширителю.) Доказательство. Пусть 𝒂′ — не кодовое слово, находящееся от ближайшего кодового на расстоянии ≤ 𝛼𝑛. Пусть 𝐼 ⊂ 𝐿 — множество вершин, соответствующих координатам, в которых 𝒂′ отличается от ближайшего кодового слова. Обозначим через 𝑁pass ( 𝐼)вершины из 𝑁( 𝐼), соответствующие уравнениям, выполненнымна слове 𝒂′ . Аналогично, пусть 𝑁fail( 𝐼)— вершины из 𝑁( 𝐼), отвечающие нарушенным уравнениям. Так как наш граф расширитель, и | 𝐼| ≤ 𝛼𝑛, то |𝑁pass( 𝐼)| + | 𝑁fail( 𝐼)| = | 𝑁( 𝐼)| ≥ 𝑐| 𝐼| > 3Δ 4 ⋅ | 𝐼|. Из каждой вершины 𝑁( 𝐼) в 𝐼 ведёт хотя бы одно ребро. При этом из каждой вершины 𝑁pass( 𝐼) в 𝐼 ведёт хотя бы два ребра: чтобы «обмануть» уравнение, нужно инвертировать в нём чётное количество переменных. С другой стороны, число рёбер между 𝐼 и 𝑁( 𝐼) в точности равно Δ ⋅ | 𝐼|. Из всего сказанного вытекает цепочка соотношений Δ ⋅ | 𝐼| ≥ | 𝑁fail( 𝐼)| + 2 ⋅ |𝑁pass( 𝐼)| > | 𝑁fail( 𝐼)| + 2 ⋅ ( 3Δ 4 ⋅ | 𝐼| − | 𝑁fail( 𝐼)|). Отсюда | 𝑁fail( 𝐼)| > Δ 2 ⋅ | 𝐼|. Значит, в 𝐼 найдётся вершина, для которой нарушены больше половины тех уравнений, в которых она участвует. То есть даже не зная 𝐼, можно утверждать следующее: среди координат 𝒂′ есть хотя бы одна такая, обратив значение которой мы уменьшим число нарушенных уравнений. Лемма доказана. 3.5.3.3. Завершение доказательства корректности алгоритма Лемма о результативном бите говорит, что если к очередному шагу алгоритма мы пришли с некодовым словом 𝒂′, находящимся от ближайшего кодового на расстоянии ≤ 𝛼𝑛, то очередной бит для изменения мы найдём. Осталось доказать, что, начав со слова 𝒂′ на расстоянии ≤ 𝛼𝑛 4 от ближайшего кодового слова 𝒂, мы не «притянемся» случайно к какому-то другому кодовому слову 𝒃 ≠ 𝒂. До начала работы алгоритма | 𝐼| ≤ 𝛼𝑛 4 , и, значит, число нарушенных уравнений не превосходит Δ ⋅ | 𝐼| ≤ 𝛼𝑛Δ 4 . В ходе работы алгоритма число нарушенных уравнений уменьшается. Пусть на очередном шаге получено слово 𝒂′′ , и пусть 𝐼′′ — биты, в которых 𝒂′′ отличается от ближайшего кодового слова. Имеем 𝛼𝑛Δ 4 ≥ #наруш. ур. = 𝑁fail( 𝐼′′) > Δ 2 ⋅ | 𝐼′′|, отсюда | 𝐼′′| < 𝛼𝑛 2 . Итак, на каждом шаге алгоритма получаем слово, отличающееся от ближайшего кодового менее чем в 𝛼𝑛 2 битах. Т.к. на каждом шаге в слове меняется только один бит и 𝑑( 𝐶) > 𝛼𝑛, то кодовое слово, к которому мы стремимся, всё время одно и то же: если 𝑑( 𝒂, 𝒃) > 𝑡, то, находясь в шаре 𝑆𝑡 2⁄ ( 𝒂) и смещаясь на один бит, мы не «вывалимся» в шар 𝑆𝑡 2⁄ ( 𝒃). 4. Коды Рида—Соломона и Рида—Маллера 4.1. Коды Рида—Соломона (I.S. Reed, G. Solomon) 4.1.1. Определение Пусть 𝑘 ≤ 𝑛 ≤ 𝑞. Пусть 𝑡1, …, 𝑡 𝑛 ∈ 𝔽 𝑞 — фиксированные, попарно различные элементы. Рассмотрим такое множество слов:
  • 24. www.dainiak.com 𝐶 ≔ {(𝑃( 𝑡1),… , 𝑃( 𝑡 𝑛)) ∣ 𝑃 ∈ 𝔽 𝑞 [ 𝑥] ∧ deg 𝑃 < 𝑘}. Непосредственно проверяется, что 𝐶 — линейное пространство: 𝛼 ⋅ (𝑃1( 𝑡1),…, 𝑃1( 𝑡 𝑛)) + 𝛽 ⋅ (𝑃2( 𝑡1),…, 𝑃2( 𝑡 𝑛)) = (( 𝛼𝑃1 + 𝛽𝑃2)( 𝑡1),… ,( 𝛼𝑃1 + 𝛽𝑃2)( 𝑡 𝑛)) У многочлена степени < 𝑘 может быть не более ( 𝑘 − 1) корней, поэтому если 𝑃≢0, то в векторе ( 𝑃( 𝑡1),… , 𝑃(𝑡 𝑛)) не более ( 𝑘 − 1) нулевых координат. Отсюда 𝑑( 𝐶) = min 𝒂∈𝐶 𝒂≠𝟎 ‖ 𝒂‖ = min 𝑃≢0 #{𝑖 ∣ 𝑃( 𝑡𝑖) ≠ 0} = 𝑛 − ( 𝑘 − 1). Векторы ( 𝑃( 𝑡1), …, 𝑃(𝑡 𝑛)) при разных 𝑃 различны: если выполнено ( 𝑃1( 𝑡1),…, 𝑃1(𝑡 𝑛)) = ( 𝑃2( 𝑡1),… , 𝑃2(𝑡 𝑛)), то у многочлена ( 𝑃1 − 𝑃2) не менее 𝑛 корней, а т.к. deg( 𝑃1 − 𝑃2) < 𝑘 ≤ 𝑛, то ( 𝑃1 − 𝑃2) ≡ 0. Значит, dim 𝐶 = 𝑘. Итак, для любых 𝑘 ≤ 𝑛 ≤ 𝑞 множество 𝐶 является [ 𝑛, 𝑘, 𝑑] 𝑞-кодом, где 𝑑 = 𝑛 − 𝑘 + 1. Этот код называется кодом Рида—Соломона или RS-кодом. Вспомним границу Синглтона: для любого [ 𝑛, 𝑘, 𝑑] 𝑞-кода выполнено 𝑘 ≤ 𝑛 − 𝑑 + 1. То есть построенный код достигает границы Синглтона и, стало быть, является MDS-кодом. Недостаток кодов Рида—Соломона состоит в том, что кодовый алфавит нужно брать очень большим, т.к. 𝑞 ≥ 𝑛. 4.1.2. Декодирование RS-кодов Т.к. 𝑑( 𝐶) = 𝑛 − 𝑘 + 1, то код может исправлять ⌊ 𝑛−𝑘 2 ⌋ ошибок. В этом разделе мы покажем, как можно эффективно исправлять ошибки в словах RS-кодов. Формально поставить задачу декодирования можно следующим образом:  Дано искажённое кодовое слово RS-кода ( 𝑝̂1, … , 𝑝̂ 𝑛) ∈ 𝔽 𝑞 𝑛 .  Найти 𝑃 ∈ 𝔽 𝑞[ 𝑥], такой, что deg 𝑃 ≤ 𝑘 − 1 и #{𝑖 ∣ 𝑃( 𝑡𝑖) ≠ 𝑝̂ 𝑖} ≤ ⌊ 𝑛−𝑘 2 ⌋ (нам гарантируется, что такой 𝑃 существует). Приводимая ниже техника называется алгоритмом Берлекэмпа—Велча (E.R. Berlekamp, L.R. Welch). Рассмотрим многочлен ошибок 𝐸( 𝑥) ≔ ∏ ( 𝑥 − 𝑡𝑖) 𝑖: 𝑃( 𝑡 𝑖)≠𝑝̂𝑖 и вспомогательный многочлен 𝑈( 𝑥) ≔ 𝐸( 𝑥) ⋅ 𝑃( 𝑥). Обозначим 𝑠 ≔ #{𝑖 ∣ 𝑃( 𝑡𝑖) ≠ 𝑝̂ 𝑖}. Заметим, что deg 𝐸 = 𝑠, coef 𝑥 𝑠 𝐸 = 1, deg 𝑈 ≤ deg 𝐸 + deg 𝑃 ≤ 𝑠 + 𝑘 − 1, и для любого 𝑖 ∈ {1, … , 𝑛} выполнено равенство 𝑈( 𝑡𝑖) = 𝐸( 𝑡𝑖) ⋅ 𝑝̂ 𝑖. Идея: мы не знаем 𝑃, так что попытаемся найти какие-то многочлены 𝐸̃ и 𝑈̃, для которых  deg 𝐸̃ = 𝑠̃ и coef 𝑥 𝑠 𝐸̃ = 1, где 𝑠̃ ≤ ( 𝑛 − 𝑘) 2⁄ ,  deg 𝑈̃ ≤ 𝑠̃ + 𝑘 − 1,  для любого 𝑖 ∈ {1, … , 𝑛} выполнено равенство 𝑈̃( 𝑡𝑖) = 𝐸̃( 𝑡𝑖)⋅ 𝑝̂ 𝑖. Указанную тройку условий назовём условиями Берлекэмпа—Велча, или БВ-условиями. Мы знаем, что многочлены 𝐸̃ и 𝑈̃, удовлетворяющие БВ-условиям, точно найдутся (например, такова пара многочленов 𝐸, 𝑈, удовлетворяющая этой системе при 𝑠̃ = 𝑠). Остаётся вопрос: как эффективно найти какие-нибудь 𝐸̃ и 𝑈̃ и что делать, если найденные 𝐸̃ и 𝑈̃ не совпадут с нужными нам 𝐸 и 𝑈? Зафиксируем 𝑠̃ и положим 𝐸̃ = 𝑥 𝑠̃ + ∑ 𝑒𝑗 𝑥 𝑗 𝑗 ≤𝑠̃−1 и 𝑈̃ = ∑ 𝑢𝑗 𝑥 𝑗 𝑗≤ 𝑠̃+ 𝑘−1 , где 𝑒0, …, 𝑒 𝑠̃−1, 𝑢0,… , 𝑢 𝑠̃+ 𝑘−1 — неопределённые коэффициенты. Получим систему