Конспект лекций
по теории кодирования
Александр Дайняк
Актуальная версия файла доступна на www.dainiak.com
Распространяетс...
www.dainiak.com
Моим родителям, сумевшим передать мне то,
что систематическому кодированию не поддаётся
www.dainiak.com
Оглавление
Введение..........................................................................................
www.dainiak.com
5. Циклические коды..........................................................................................
www.dainiak.com
Введение
Теория кодирования изучает модели хранения и передачи «дискретной» информации и предлагает
способ...
www.dainiak.com
Префиксные коды называют ещё мгновенными, так как закодированные с их помощью сообщения
можно декодировать...
www.dainiak.com
Тогда слово 𝛽1 𝑤1 𝛽2 𝑤2 … 𝑤 𝑘−1 𝛽 𝑘 𝑤 𝑘 𝛽 𝑘+1 можно разбить на кодовые слова двумя способами.
𝐵𝑖1
= 𝜀𝛽1 𝑤1...
www.dainiak.com
чем z. Естественно при построении кодирования 𝜙 кодировать более частые буквы более короткими
словами.
Пос...
www.dainiak.com
∑ 𝑛𝑗 𝑞−𝑙 𝑗
𝑘
𝑗 =1
≤ 1
для любого 𝑘 ∈ [1, 𝑚]. Домножив обе части последнего неравенства на 𝑞 𝑙 𝑘, получим
𝑞...
www.dainiak.com
Теорема доказана.
2. Коды, исправляющие ошибки
2.1. Модель канала с ошибками
Основная модель канала связи:...
www.dainiak.com
∄𝒂′
, 𝒂′′
∈ 𝐶, 𝒂: 𝒂′
≠ 𝒂′′
∧ 𝑑̃( 𝒂′
, 𝒂) ≤ 𝑘 ∧ 𝑑̃( 𝒂′′
, 𝒂) ≤ 𝑘.
Особенно удобно, когда 𝑑̃ является метрик...
www.dainiak.com
меньше. Также можно рассматривать задачи, связанные с ресурсами: процессы кодирования и
декодирования (исп...
www.dainiak.com
2.3.3. Граница Плоткина
Теорема. (M. Plotkin)
Пусть 𝑛𝑟 < 𝑑, где 𝑟 ≔ 1 − 1
𝑞
. Тогда для любого ( 𝑛, 𝑀, 𝑑) ...
www.dainiak.com
 (ℝ 𝑛
, 𝑑̃( 𝒂, 𝒃)) — евклидово метрическое пространство (здесь 𝑑̃( 𝒂, 𝒃) ≔ √∑ ( 𝑎𝑖 − 𝑏𝑖)2
𝑖 —
обычная евк...
www.dainiak.com
2.3.4.3. Доказательство теоремы Элайеса—Бассалыго
Теорема. (P. Elias, Л.А. Бассалыго)
Для любого ( 𝑛, 𝑀, 𝑑...
www.dainiak.com
⋮
(0,0,0, … ,1,1)
Если выписать базис линейного [ 𝑛, 𝑘, 𝑑] 𝑞-кода построчно в виде матрицы размера 𝑘 × 𝑛, ...
www.dainiak.com
кодового слова 𝒂, по определению матрицы 𝐻, выполнено равенство 𝐻𝒂 𝑇
= 𝟎. Для [ 𝑛, 𝑘, 𝑑] 𝑞-кода
𝐻 ∈ 𝔽 𝑞
( ...
www.dainiak.com
Одним из важнейший достаточных условий существования линейныхкодов является следующая
теорема.
Теорема. (Р...
www.dainiak.com
Общий случай: 𝑛 ≔ 2 𝑚
− 1 для некоторого 𝑚. Двоичный код Хемминга длины 𝑛 с параметрами
[2 𝑚
− 1, 2 𝑚
− 𝑚 ...
www.dainiak.com
(( 𝑎1 − 𝑓𝑖 𝑟1), … ,( 𝑎 𝑑 − 𝑓𝑖 𝑟 𝑑), 𝑎1
′
, … , 𝑎 𝑛−𝑑
′
).
Запишем эти 𝑞 векторов построчно в виде матрицы ...
www.dainiak.com
рёбер из каждой вершины в 𝐿 в выбираемые равновероятно и независимо вершины в 𝑅 (в итоге
некоторые из этих...
www.dainiak.com
соответствующий код будет выглядеть так: {( 𝑥1 𝑥2 𝑥3 𝑥4) ∣ 𝑥1 + 𝑥2 + 𝑥4 = 0, 𝑥1 + 𝑥3 = 0}.
Коды на основе ...
www.dainiak.com
противоположный строго уменьшает число невыполненных для 𝒂′
уравнений. (Имеются в виду
уравнения, построен...
www.dainiak.com
𝐶 ≔ {(𝑃( 𝑡1),… , 𝑃( 𝑡 𝑛)) ∣ 𝑃 ∈ 𝔽 𝑞 [ 𝑥] ∧ deg 𝑃 < 𝑘}.
Непосредственно проверяется, что 𝐶 — линейное прост...
www.dainiak.com
{
𝑝̂1 𝑡1
𝑠̃
+ ∑ 𝑝̂1 𝑒𝑗 𝑡1
𝑗
0≤𝑗≤𝑠̃−1
= ∑ 𝑢𝑗 𝑡1
𝑗
0≤𝑗≤𝑘+𝑠̃−1
,
⋮
𝑝̂ 𝑛 𝑡 𝑛
𝑠̃
+ ∑ 𝑝̂ 𝑛 𝑒𝑗 𝑡 𝑛
𝑗
0≤𝑗≤𝑠̃−1
= ∑...
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Конспект лекций по теории кодирования
Upcoming SlideShare
Loading in...5
×

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

671

Published on

Собранные в один файл конспекты лекций по теории кодов, исправляющих ошибки. Лекции читаются на факультете ФИВТ МФТИ.
Последняя версия этого файла всегда доступна на www.dainiak.com

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
671
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Конспект лекций по теории кодирования Александр Дайняк Актуальная версия файла доступна на www.dainiak.com Распространяется на условиях лицензии Creative Commons «Attribution-NonCommercial-ShareAlike»
  2. 2. www.dainiak.com Моим родителям, сумевшим передать мне то, что систематическому кодированию не поддаётся
  3. 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. 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. 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. 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. 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. 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. 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. 10. www.dainiak.com Теорема доказана. 2. Коды, исправляющие ошибки 2.1. Модель канала с ошибками Основная модель канала связи: Чаще всего рассматривают следующие типы ошибок:  Ошибки замещения: муха → мука o Симметричные (если символ 𝑥 может замениться на 𝑦, то возможно и обратное) o Несимметричные  Ошибки стирания: муха → му?а  Ошибки выпадения: муха → уха  Ошибки вставки: мука → мурка  Комбинации перечисленных типов Всегда задаются ограничения на «ненадёжность» канала. Ограничения можно разделить на два типа:  вероятностные (например, вероятность возникновения ошибки в одном символе сообщения),  детерминированные (например, верхняя оценка числа ошибок на одно сообщение). Естественный язык весьма устойчив к ошибкам: «веть ву мжте прчтттть эт ткст п поняц го!». Причины этой устойчивости: избыточность (например, наличие «малоинформативных» гласных) и разреженность («вблизи» слов обычно нет других слов). Если эти свойства где-то нарушаются, то ошибки исправлять тяжело: сравните чемодан зарыт и чемодан закрыт. 2.2. Основные определения и обозначения Пусть 𝔸 𝑞 — кодовый алфавит, алфавит канала, и пусть |𝔸 𝑞 | = 𝑞. Будем называть 𝑞-ичным кодом любое подмножество 𝐶 ⊆ 𝔸 𝑞 𝑛 , где 𝑛 — длина кода (длина кодовых слов), | 𝐶| — мощность кода (число кодовых слов). Чаще всего рассматривают двоичные коды, т.е. когда 𝑞 = 2 и 𝔸 𝑞 = {0,1}. Таким же важным является случай, когда 𝔸 𝑞 является полем. В этих случаях для произвольного слова 𝒂 будем через ‖ 𝒂‖ обозначать вес этого слова, то есть величину #{𝑖 ∣ 𝑎𝑖 ≠ 0}. Пусть 𝒂 и 𝒃 — слова в алфавите канала. Обозначимчерез 𝑑̃( 𝒂, 𝒃) минимальное число ошибок, в результате которых 𝒂 может перейти в 𝒃. Способ кодирования позволяет обнаруживать 𝑘 ошибок, если для любых различных кодовых сообщений 𝒂′ и 𝒂′′ при передаче в канал 𝒂′ на выходе из канала не может получиться 𝒂′′ (если в канале произошло не более 𝑘 ошибок). Иначе говоря, 𝑑̃( 𝒂′ , 𝒂′′) > 𝑘. Способ кодирования позволяет исправлять 𝑘 ошибок, если при передаче в канал различных кодовых сообщений 𝒂′ и 𝒂′′ на выходе из канала будут получаться различные сообщения (при условии, что с каждым отдельным сообщением в канале происходит не более 𝑘 ошибок). Формально: Канал связи (в котором могут происходить ошибки) Кодер Декод ер Исходное сообщение Закодированное сообщение Принятое сообщение (возможно, с ошибками) Декодированное сообщение (после исправления ошибок); должно совпасть с исходным
  11. 11. www.dainiak.com ∄𝒂′ , 𝒂′′ ∈ 𝐶, 𝒂: 𝒂′ ≠ 𝒂′′ ∧ 𝑑̃( 𝒂′ , 𝒂) ≤ 𝑘 ∧ 𝑑̃( 𝒂′′ , 𝒂) ≤ 𝑘. Особенно удобно, когда 𝑑̃ является метрикой:  ∀𝒂, 𝒃 𝑑̃( 𝒂,𝒃) = 𝑑̃( 𝒃, 𝒂) — симметричность  ∀𝒂 ≠ 𝒃 𝑑̃( 𝒂, 𝒃) > 0  ∀𝒂 𝑑̃( 𝒂, 𝒂) = 0  ∀𝒂, 𝒃, 𝒄 𝑑̃( 𝒂, 𝒃) ≤ 𝑑̃( 𝒂, 𝒄) + 𝑑̃( 𝒄, 𝒃) — неравенство треугольника Так бывает не всегда. Например, если в канале могут происходить лишь ошибки вставки, то при 𝒂 ≠ 𝒃 по крайней мере одна из двух величин 𝑑̃( 𝒂, 𝒃), 𝑑̃( 𝒃, 𝒂) вовсе не определена. Пусть 𝑑̃(…, … ) — метрика и 𝐶 — код. Положим 𝑑̃( 𝐶) ≔ min 𝒂≠𝒃 𝒂,𝒃∈𝐶 𝑑̃( 𝒂, 𝒃). Величина 𝑑̃( 𝐶)называется кодовым расстоянием кода 𝐶. Утверждение (о связи кодового расстояния с устойчивостью к ошибкам).  Код 𝐶 обнаруживает 𝑡 ошибок ⇔ 𝑑̃( 𝐶) > 𝑡.  Код 𝐶 исправляет 𝑡 ошибок ⇐ 𝑑̃( 𝐶) > 2𝑡. Для метрик Хемминга и Левенштейна можно «⇐» заменить на «⇔». Докажем только первую часть. ⇐ Пусть в канал передавалось сообщение 𝒂. Если в канале происходит не более 𝑡 ошибок, то даже если при передаче возникли ошибки и получилось слово 𝒂′ ≠ 𝒂, то нам гарантирована оценка 𝑑̃( 𝒂, 𝒂′) ≤ 𝑡. Но тогда 𝒂′ ∉ 𝐶, а значит, мы увидим, что при передаче произошли ошибки. ⇒ С другой стороны, если бы в коде была пара слов 𝒂, 𝒃, таких, что 𝑑̃( 𝒂, 𝒃) ≤ 𝑡, то при неудачной ситуации, когда в канал передавалось слово 𝒂, ошибки могли распределиться таким образом, что получилось бы в точности слово 𝒃. Но тогда, приняв слово 𝒃, мы наивно полагали бы, что «само слово 𝒃 и передавалось изначально, причём при передаче не было ошибок». Доказательство второй части утверждения — упражнение (придётся использовать и симметричность метрики, и неравенство треугольника). Утверждение доказано. Если рассматриваются слова одной и той же длины, а в канале возможны только ошибки типа замещения (любые), то 𝑑̃( 𝒂, 𝒃) = 𝑑( 𝒂, 𝒃), где 𝑑( 𝒂, 𝒃) ≔ #{𝑖 ∣ 𝑎𝑖 ≠ 𝑏𝑖}. Функционал 𝑑 называется метрикой Хемминга, а величина 𝑑( 𝒂, 𝒃) — расстоянием Хемминга между 𝒂 и 𝒃. Везде далее по умолчанию будем считать, что в канале возможны произвольные ошибки типа замещения, т.е. в качестве метрики на словах везде далее используется метрика Хемминга. Обозначим 𝑑( 𝐶) ≔ min 𝒂≠𝒃 𝒂,𝒃∈𝐶 𝑑( 𝒂, 𝒃). Шар радиуса 𝑟 с центром в 𝒂 — это множество 𝑆 𝑟( 𝒂) ≔ { 𝒃 ∣ 𝑑( 𝒂, 𝒃) ≤ 𝑟}. Если в канал передавалось 𝒂, то на выходе из канала может быть любое слово 𝒃 ∈ 𝑆𝑡( 𝒂). Значит, код обнаруживает 𝑡 ошибок т. и т.т., когда никакое кодовое слово не попадает в шар радиуса 𝑡 с центром в другом кодовом слове. Аналогично, код исправляет 𝑡 ошибок т. и т.т., когда при передаче в канал различных кодовых слов на выходе получаются различные слова, то есть когда шары радиуса 𝑡 с центрами в кодовых словах не пересекаются. Основная задача теории кодов, исправляющих ошибки: строить коды, для которых число кодовых слов как можно больше, кодовое расстояние как можно больше, а длина кодовых слов как можно
  12. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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 — неопределённые коэффициенты. Получим систему
  25. 25. www.dainiak.com { 𝑝̂1 𝑡1 𝑠̃ + ∑ 𝑝̂1 𝑒𝑗 𝑡1 𝑗 0≤𝑗≤𝑠̃−1 = ∑ 𝑢𝑗 𝑡1 𝑗 0≤𝑗≤𝑘+𝑠̃−1 , ⋮ 𝑝̂ 𝑛 𝑡 𝑛 𝑠̃ + ∑ 𝑝̂ 𝑛 𝑒𝑗 𝑡 𝑛 𝑗 0≤𝑗≤𝑠̃−1 = ∑ 𝑢𝑗 𝑡 𝑛 𝑗 0≤𝑗≤𝑘+𝑠̃−1 . При любом фиксированном 𝑠̃ ≤ ( 𝑛 − 𝑘) 2⁄ эта система линейная относительно 𝑒0, … , 𝑒 𝑠̃−1, 𝑢0,… , 𝑢 𝑠+𝑘−1. Перебирая 𝑠̃ = 0,1, …, найдём то 𝑠̃, при котором решение системы есть (такое 𝑠̃ найдётся, хотя бы, при 𝑠̃ = 𝑠). Тем самым найдём пару 𝐸̃ и 𝑈̃, удовлетворяющую БВ-условиям. Мы нашли какие-то 𝐸̃ и 𝑈̃. Если бы это были те самые 𝐸 и 𝑈, то можно было бы выразить 𝑃( 𝑥) = 𝑈( 𝑥) 𝐸( 𝑥). Оказывается, и в ином случае 𝑃 будет выражаться так же, как утверждает следующая лемма. Лемма. Если пары ( 𝐸1, 𝑈1) и ( 𝐸2, 𝑈2) удовлетворяют БВ-условиям, то 𝑈1 𝐸1 ≡ 𝑈2 𝐸2 . Доказательство. Пусть ( 𝐸1, 𝑈1) и ( 𝐸2, 𝑈2) удовлетворяют БВ-условиям. Имеем deg 𝑈1 𝐸2 ≤ deg 𝑈1 + deg 𝐸2 ≤ ( 𝑛−𝑘 2 + 𝑘 − 1) + 𝑛−𝑘 2 ≤ 𝑛 − 1. Аналогично deg 𝐸1 𝑈2 ≤ 𝑛 − 1. Отсюда следует, что deg( 𝑈1 𝐸2 − 𝐸1 𝑈2) ≤ 𝑛 − 1. Далее, для любого 𝑖 имеем 𝑈1( 𝑡𝑖) 𝐸2( 𝑡𝑖) = (𝑝̂ 𝑖 𝐸1( 𝑡𝑖))𝐸2( 𝑡𝑖) = 𝐸1( 𝑡𝑖)(𝑝̂ 𝑖 𝐸2( 𝑡𝑖)) = 𝐸1( 𝑡𝑖) 𝑈2( 𝑡𝑖). То есть для 𝑖 = 1, …, 𝑛 выполнено 𝑈1( 𝑡𝑖) 𝐸2( 𝑡𝑖)− 𝐸1( 𝑡𝑖) 𝑈2( 𝑡𝑖) = 0. Отсюда следует, что многочлен (𝑈1( 𝑥) 𝐸2( 𝑥) − 𝐸1( 𝑥) 𝑈2( 𝑥)) тождественный ноль, а это эквивалентно тождеству 𝑈1 𝐸1 ≡ 𝑈2 𝐸2 . Лемма доказана. 4.2. Коды Рида—Маллера (I.S. Reed, D.E. Muller) Можно представить два пути обобщения конструкции Рида и Соломона:  рассматривать многочлены не от одной, а от многих переменных,  рассматривать не все возможные многочлены, а специально выбранное их подмножество. Идя по первому пути, мы получаем коды Рида—Маллера, а идя по второму — коды Гоппы. 4.2.1. Определение Зафиксируем параметры ( 𝑟, 𝑚), где 𝑟 ≤ 𝑚. Положим 𝑞 ≔ 2 и рассмотрим многочлены от 𝑚 переменных степени ≤ 𝑟. Базис в пространстве { 𝑃 ∈ 𝔽2[ 𝑥1,… , 𝑥 𝑚], deg 𝑃 ≤ 𝑟}: {1} ∪ { 𝑥1., 𝑥2,… , 𝑥 𝑚} ∪ { 𝑥1 𝑥2, 𝑥1 𝑥3, …, 𝑥 𝑚−1 𝑥 𝑚} ∪ {𝑥 𝑖1 𝑥 𝑖2 ⋯ 𝑥 𝑖 𝑟 ∣ 1 ≤ 𝑖1,… , 𝑖 𝑟 ≤ 𝑚}. Размерность этого прорA

×