38
Теория кодирования МФТИ , осень 2013 Александр Дайняк www.dainiak.com

Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Embed Size (px)

DESCRIPTION

Задача исправления и обнаружения ошибок. Геометрическая интерпретация. Типы ошибок. Метрики Хемминга и Левенштейна. Кодовое расстояние. Основные задачи теории кодов, исправляющих ошибки. Коды Варшамова—Тененгольца, алгоритмы исправления одиночных ошибок выпадения и вставки символов. Простейшие границы для параметров кодов, исправляющих ошибки замещения: границы сферической упаковки, Синглтона.

Citation preview

Page 1: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Теория кодированияМФТИ, осень 2013

Александр Дайняк

www.dainiak.com

Page 2: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды, исправляющие ошибки

Основная модель канала связи:

Канал связи(в котором могут

происходить ошибки)

Кодер Декодер

Исходное сообщение

Закодированное сообщение(записанное в алфавите канала)

Принятое сообщение(возможно, с ошибками)

Декодированное сообщение(после исправления ошибок);должно совпасть с исходным

Page 3: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Типы ошибок

• Ошибки замещения: муха → мука• Симметричные

• Несимметричные

• Ошибки стирания: муха → му?а

• Ошибки выпадения: муха → уха

• Ошибки вставки: мука → мурка

• Комбинации перечисленных типов

Page 4: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Типы ошибок

Всегда задаются ограничения на «ненадёжность» канала, например:

• верхняя оценка числа ошибок на одно сообщение(детерминированные ограничения)

• вероятность возникновения ошибки на один символ сообщения(вероятностные ограничения)

Чаще всего алфавит канала двоичный: 0,1

Page 5: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды

Пусть 𝔸𝑞 — алфавит канала, 𝔸𝑞 = 𝑞.

𝑞-ичным кодом называется любое подмножество 𝐶 ⊆ 𝔸𝑞

𝑛

𝑛 — длина кода (длина кодовых слов)

𝐶 — мощность кода (число кодовых слов)

Чаще всего рассматривают двоичные коды, т.е. когда 𝑞 = 2 и 𝔸𝑞 = 0,1 .

Для произвольного двоичного слова 𝒂 будем через 𝒂 обозначать вес слова, т.е. величину

# 𝑖 ∣ 𝑎𝑖 ≠ 0

Page 6: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Обнаружение/исправление ошибок

Пусть 𝒂 и 𝒃 — слова в алфавите канала.

Обозначим через 𝑑 𝒂, 𝒃 минимальное число ошибок, в результате которых 𝒂 может перейти в 𝒃.

Способ кодирования позволяет обнаруживать 𝑘 ошибок, если для любых различных кодовых сообщений 𝒂′ и 𝒂′′

при передаче в канал 𝒂′ на выходе не может получиться 𝒂′′

(если в канале произошло не более 𝑘 ошибок).

Иначе говоря, 𝑑 𝒂′, 𝒂′′ > 𝑘.

Page 7: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Обнаружение/исправление ошибок

Способ кодирования позволяет исправлять 𝑘 ошибок, если при передаче в канал различных кодовых сообщений 𝒂′ и 𝒂′′

на выходе из канала будут получаться различные сообщения (при условии, что с каждым отдельным сообщением в канале происходит не более 𝑘 ошибок).

Формально:∄𝒂′, 𝒂′′ ∈ 𝐶, 𝒂: 𝒂′ ≠ 𝒂′′ ∧ 𝑑 𝒂′, 𝒂 ≤ 𝑘 ∧ 𝑑 𝒂′′, 𝒂 ≤ 𝑘

Page 8: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Метрика

Особенно удобно, когда 𝑑 является метрикой:

• ∀𝒂, 𝒃 𝑑 𝒂, 𝒃 = 𝑑 𝒃, 𝒂

• ∀𝒂 ≠ 𝒃 𝑑 𝒂, 𝒃 > 0

• ∀𝒂 𝑑 𝒂, 𝒂 = 0

• ∀𝒂, 𝒃, 𝒄 𝑑 𝒂, 𝒃 ≤ 𝑑 𝒂, 𝒄 + 𝑑 𝒄, 𝒃

Так бывает не всегда. Например, если в канале есть только ошибки вставки и никаких других, то при 𝒂 ≠ 𝒃 по крайней мере одна из двух величин 𝑑 𝒂, 𝒃 , 𝑑 𝒃, 𝒂 вовсе не определена.

Page 9: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Метрика Хемминга

Если рассматриваются слова одной и той же длины, а в каналевозможны только ошибки типа замещения (любые), то 𝑑 𝒂, 𝒃 =𝑑Х 𝒂, 𝒃 , где

𝑑Х 𝒂, 𝒃 ≔ # 𝑖 ∣ 𝑎𝑖 ≠ 𝑏𝑖

Функционал 𝑑Х — метрика Хемминга,

𝑑Х 𝒂, 𝒃 — расстояние Хемминга между 𝒂 и 𝒃

Page 10: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Метрика Левенштейна

Если в канале происходят ошибки выпадения/вставки, то канал описывается метрикой Левенштейна:

𝑑Л 𝒂, 𝒃 ≔ min # выпадений и вставок, переводящих 𝒂 в 𝒃

Например:

• 𝑑Л «𝑎𝑏𝑎», «𝑎𝑎» = 1

• 𝑑Л «𝑎𝑏𝑏𝑎𝑏𝑎», «𝑎𝑏𝑎𝑎𝑏» = 3

Page 11: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Кодовое расстояние

Пусть 𝑑 ⋅,⋅ — метрика и 𝐶 — код.

Кодовым расстоянием кода 𝐶 называется величина 𝑑 𝐶 ≔ min

𝒂≠𝒃𝒂,𝒃∈𝐶

𝑑 𝒂, 𝒃

Кодовое расстояние определяет устойчивость к ошибкам:

• 𝐶 обнаруживает 𝑡 ошибок ⇔ 𝑑 𝐶 > 𝑡

• 𝐶 исправляет 𝑡 ошибок ⇔ 𝑑 𝐶 > 2𝑡

Page 12: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Геометрическая интерпретация

Шар радиуса 𝑟 с центром в 𝒂 — это множество𝑆𝑟 𝒂 ≔ 𝒃 ∣ 𝑑 𝒂, 𝒃 ≤ 𝑟

Если в канал передавалось 𝒂, то на выходе из канала может быть любое слово 𝒃 ∈ 𝑆𝑡 𝒂 .

Значит, код обнаруживает 𝑡 ошибок т. и т.т., когда никакое кодовое слово не попадает в шар радиуса 𝑡 с центром в другом кодовом слове:

𝒂

𝑡

𝒃

Page 13: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Геометрическая интерпретация

Код исправляет 𝑡 ошибок т. и т.т., когда при передаче в канал различных кодовых слов на выходе получаются различные слова,

то есть когда шары радиуса 𝑡 с центрами в кодовых словах не пересекаются:

𝒂 𝒃

Page 14: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Основные задачи теории кодов, исправляющих ошибкиОсновная задача: строить коды, для которых

• число кодовых слов как можно больше,

• кодовое расстояние как можно больше,

• длина кодовых слов как можно меньше.

Задачи, связанные с ресурсами:

• Процессы кодирования и декодирования (исправление ошибок) должны быть возможно менее трудоёмкими по количеству операций и по памяти

Page 15: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Основные задачи теории кодов, исправляющих ошибкиОсновная задача: строить коды, для которых

• число кодовых слов как можно больше,

• кодовое расстояние как можно больше,

• длина кодовых слов как можно меньше.

Геометрически, это задача об упаковке

• возможно большего числа шаров,

• возможно большего радиуса,

• в пространстве возможно меньшей размерности.

Page 16: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца

• Пример кодов, исправляющих ошибки выпадения/вставки

• Простой алгоритм исправления ошибок

Page 17: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца

Код Варшамова—Тененгольца длины 𝑛:

𝐶 ≔ 𝑎1𝑎2 … 𝑎𝑛 ∣

𝑖=1

𝑛

𝑖𝑎𝑖 ≡ 0 mod 𝑛 + 1

Для мощности кода справедлива формула (без доказательства)

𝐶 = 12 𝑛+1

𝑑| 𝑛+1𝑑 нечётно

𝜙 𝑑 2 𝑛+1 𝑑

Асимптотически это максимально возможная мощность кода, исправляющего одну ошибку выпадения/вставки символа.

Page 18: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца: исправление одной ошибки выпадения

Пусть 𝐶 — код В.—Т. длины 𝑛, и пусть 𝒂 ∈ 𝐶.

Пусть в канал передали 𝒂 = 𝑎1 … 𝑎𝑛, и на выходе получили слово 𝒂′ ≔ 𝑎1

′ … 𝑎𝑛−1′ = 𝑎1 … 𝑎𝑘−1𝑎𝑘+1 … 𝑎𝑛

(символ 𝑎𝑘 выпал).

Наша задача: по 𝒂′ восстановить 𝒂.

Page 19: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца: исправление одной ошибки выпадения

Восстановить 𝒂 — не то же самое, что восстановить пару 𝑘, 𝑎𝑘 .

Например, если 𝒂′ = 1001, то 𝒂 = 10001, но мы не узнаем, какой именно из нулей выпал.

Положим𝑛0 ≔ # 𝑖 > 𝑘 𝑎𝑖 = 0𝑛1 ≔ # 𝑖 > 𝑘 𝑎𝑖 = 1

Заметим, что если 𝑎𝑘 = 0, то 𝒂 можно восстановить по 𝒂′, если известно 𝑛1.

Аналогично, если 𝑎𝑘 = 1, то 𝒂 можно восстановить по 𝒂′, если известно 𝑛0.

Page 20: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца: исправление одной ошибки выпадения

Рассмотрим суммы

𝑆 ≔

𝑖=1

𝑛

𝑖𝑎𝑖 и 𝑆′ ≔

𝑖=1

𝑛−1

𝑖𝑎𝑖′

Заметим, что

𝑆 − 𝑆′ =

𝑖=1

𝑛

𝑖𝑎𝑖 −

𝑖=1

𝑘−1

𝑖𝑎𝑖 +

𝑖=𝑘

𝑛−1

𝑖𝑎𝑖+1 =

𝑖=𝑘

𝑛

𝑖𝑎𝑖 −

𝑖=𝑘+1

𝑛

𝑖 − 1 𝑎𝑖

= 𝑘𝑎𝑘 +

𝑖=𝑘+1

𝑛

𝑎𝑖

Page 21: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца: исправление одной ошибки выпадения

Получаем

𝑆′ = 𝑆 − 𝑘𝑎𝑘 +

𝑖=𝑘+1

𝑛

𝑎𝑖 = 𝑆 − 𝑘𝑎𝑘 − 𝑛1

Так как 𝑆 ≡ 0 mod 𝑛 + 1 , то 𝑆′ ≡ −𝑛1 − 𝑘𝑎𝑘 mod 𝑛 + 1

Если 𝑎𝑘 = 0, то −𝑆′ ≡ 𝑛1.

Если 𝑎𝑘 = 1, то −𝑆′ ≡ 𝑛1 + 𝑘 = 𝑛 − 𝑘 − 𝑛0 + 𝑘 = 𝑛 − 𝑛0

Page 22: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца: исправление одной ошибки выпадения

Итак,

• если 𝑎𝑘 = 0, то −𝑆′ mod 𝑛 + 1 = 𝑛1,

• если 𝑎𝑘 = 1, то −𝑆′ mod 𝑛 + 1 = 𝑛 − 𝑛0.

Осталось определить, чему равно 𝑎𝑘.

Заметим, что 𝒂′ ≥ 𝑛1,𝒂′ ≤ 𝑛 − 1 − 𝑛0

Отсюда 𝑛1 ≤ 𝒂′ < 𝑛 − 𝑛0.

То есть, если −𝑆′ mod 𝑛 + 1 ≤ 𝒂′ , то это 𝑛1, а в противном случае это 𝑛 − 𝑛0.

Page 23: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца: исправление одной ошибки выпадения

Итоговый алгоритм восстановления 𝒂 по 𝒂′:

• Вычисляем величину

𝑇 ≔ −

𝑖=1

𝑛−1

𝑖𝑎𝑖′ mod 𝑛 + 1

• Если 𝑇 ≤ 𝒂′ , то в слово 𝒂′ вставляем перед 𝑇-й с конца единицей символ 0.

• Если 𝑇 > 𝒂′ , то в слово 𝒂′ вставляем перед 𝑛 − 𝑇 -м с конца нулём символ 1.

Page 24: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца: исправление одной ошибки вставки

Теперь рассмотрим задачу, когда 𝒂′ получено из 𝒂 вставкой символа:

𝒂′ = … 𝑎𝑘 𝑥𝑎𝑘+1 …

(Если 𝑘 = 0, то 𝒂′ = 𝑥𝒂; если 𝑘 = 𝑛, то 𝒂′ = 𝒂𝑥)

Тогда 𝑆′ = 𝑆 + 𝑘 + 1 𝑥 + 𝑖>𝑘 𝑎𝑖, и значит

𝑆′ ≡ 𝑘 + 1 𝑥 +

𝑖>𝑘

𝑎𝑖 = 𝑘 + 1 𝑥 + 𝑛1

Положим 𝑇 ≔ 𝑆′ mod 𝑛 + 1 .

Page 25: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца: исправление одной ошибки вставки

𝒂′ = … 𝑎𝑘 𝑥𝑎𝑘+1 …𝑆′ ≡ 𝑘 + 1 𝑥 + 𝑛1

Положим 𝑇 ≔ 𝑆′ mod 𝑛 + 1 .

Есть два случая, когда 𝑇 = 0:

• 𝑘 + 1 𝑥 + 𝑛1 = 0. Тогда 𝑥 = 0 и 𝑎𝑘+1 = ⋯ = 𝑎𝑛 = 0.

• 𝑘 + 1 𝑥 + 𝑛1 = 𝑛 + 1. Тогда 𝑥 = 1 и 𝑎𝑘+1 = ⋯ = 𝑎𝑛 = 1.

В обоих случаях 𝒂 получается из 𝒂′ удалением последнего символа.

Page 26: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца: исправление одной ошибки вставки

𝒂′ = … 𝑎𝑘 𝑥𝑎𝑘+1 …𝑇 ≡ 𝑘 + 1 𝑥 + 𝑛1

Теперь рассмотрим случай, когда 𝑇 = 𝒂′ > 0.

Это возможно только в одном из двух случаев:

• 𝑎1 = ⋯ = 𝑎𝑘 = 𝑥 = 0

• 𝑎1 = ⋯ = 𝑎𝑘 = 𝑥 = 1

В любом случае, если 𝑇 = 𝒂′ , то 𝒂 получается из 𝒂′ удалением первого символа.

Page 27: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца: исправление одной ошибки вставки

𝒂′ = … 𝑎𝑘 𝑥𝑎𝑘+1 …𝑇 ≡ 𝑘 + 1 𝑥 + 𝑛1

Остался случай 0 < 𝑇 ≠ 𝒂′ .

• Если 𝑥 = 0, то 𝑇 = 𝑛1 < 𝒂′ .

• Если 𝑥 = 1, то 𝑇 = 𝑘 + 1 + 𝑛1 > 𝒂′ . При этом оказывается, что

𝑇 = 𝑘 + 1 + 𝑛 − 𝑘 − 𝑛0 = 𝑛 + 1 − 𝑛0.

В обоих случаях нужная для восстановления 𝒂 информация у нас есть.

Page 28: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Коды Варшамова—Тененгольца

Возможные обобщения кодов В.—Т.:

• Произвольный фиксированный модуль 𝑙 > 𝑛:

𝑎1𝑎2 …𝑎𝑛 ∣ 𝑖=1𝑛 𝑖𝑎𝑖 ≡ 0 mod 𝑙

• Дополнительные соотношения, например:

𝑎1𝑎2 …𝑎𝑛 ∣ 𝑖=1𝑛 𝑖𝑎𝑖 ≡ 𝑖=1

𝑛 𝑖2𝑎𝑖 ≡ 0 mod 𝑙

Page 29: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Ошибки замещения

• Односторонние ошибки. Например, если в двоичном канале возможны только замещения вида 0 → 1 или только 1 → 0.Канал связи в этом случае называется несимметричным.

• Двусторонние (симметричные) ошибки. Если возможно замещение символов 𝑏1 → 𝑏2, то возможно и замещение 𝑏2 → 𝑏1.

• Канал связи, в котором ошибки только симметричные, называется симметричным.

Page 30: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Ошибки замещения

Коды Варшамова—Тененгольца могут исправлять единичные односторонние ошибки замещения:

• Если 𝒂′ получается из 𝒂 замещением 𝑖-го символа с 0 на 1, то 𝑆′ ≡ 𝑖 mod 𝑛 + 1

• Если 𝒂′ получается из 𝒂 замещением 𝑖-го символа с 1 на 0, то 𝑆′ ≡ −𝑖 mod 𝑛 + 1

(Исправлять оба типа ошибок одновременно коды Варшамова—Тененгольца не могут.)

Page 31: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Обозначение кодов

Далее будем изучать коды, исправляющие ошибки замещения, значит, метрика по умолчанию — метрика Хемминга.

Обозначение кода с заданными параметрами

Если 𝐶 — 𝑞-ичный код с длиной слов 𝑛, числом слов 𝑀 и кодовым расстоянием 𝑑, то пишут:

«𝐶 является 𝑛, 𝑀, 𝑑 𝑞-кодом»

Если код двоичный, то символ 𝑞 не указывают.

Page 32: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Граница сферической упаковки

Теорема. (Граница Хемминга (R.W. Hamming), граница сферической упаковки)Для любого 𝑛, 𝑀, 𝑑 𝑞-кода имеем

𝑀 ≤𝑞𝑛

𝑆 𝑑−1 2 𝟎

В двоичном случае

𝑀 ≤2𝑛

𝑘=0

𝑑−1 2 𝑛𝑘

Коды, достигающие эту границу, называются совершенными или плотно упакованными.

Page 33: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Граница сферической упаковки

Доказательство теоремы:Пусть 𝐶 = 𝒂1, 𝒂2, … , 𝒂𝑀 — 𝑛, 𝑀, 𝑑 𝑞-код.

Так как 𝑑 𝐶 = 𝑑, то шары радиуса 𝑑 − 1 2 с центрами в кодовых словах не пересекаются:

𝔸𝑞𝑛𝒂1

𝒂2

𝒂𝑀⋯

Отсюда 𝑞𝑛 ≥ 𝑗=1𝑀 𝑆 𝑑−1 2 𝒂𝑗 = 𝑀 ⋅ 𝑆 𝑑−1 2 𝟎

Page 34: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

«Анти-Хемминг»

Теорема. (В некотором смысле, обратная границе Хемминга)Пусть числа 𝑞, 𝑛, 𝑀, 𝑑 ∈ ℕ таковы, что

𝑀 ≤𝑞𝑛

𝑆𝑑 𝟎.

Тогда существует 𝑛, 𝑀, 𝑑 𝑞-код.

Page 35: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

«Анти-Хемминг»

Доказательство теоремы:Пусть 𝐶 = 𝒂1, … , 𝒂 𝐶 — код максимальной мощности с кодовым расстоянием 𝑑 и длиной слов 𝑛.

Тогда шары радиуса 𝑑 с центрами в кодовых словах покрывают целиком множество 𝔸𝑞

𝑛 (иначе код 𝐶 можно было пополнить любым из слов, не лежащих ни в одном из этих шаров).

Отсюда 𝑗=1𝐶 𝑆𝑑 𝒂𝑗 ≥ 𝑞𝑛,

следовательно 𝐶 ≥ 𝑀.𝒂1

𝒂2

𝒂 𝐶

⋯𝒂3

Page 36: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Граница Синглтона

Теорема. (R.C. Singleton)Для любого 𝑛, 𝑀, 𝑑 𝑞-кода имеем

𝐶 ≤ 𝑞𝑛−𝑑+1

Коды, на которых достигается граница Синглтона, называются MDS-кодами (maximum distance separable codes).

Page 37: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

Граница Синглтона

Доказательство:

Пусть 𝐶 = 𝒂1, … , 𝒂𝑀 — 𝑛, 𝑀, 𝑑 𝑞-код.

Рассмотрим слова 𝒂𝑖′

𝑖=1𝑀 , где 𝒂𝑖

′ получено из 𝒂𝑖 отбрасыванием𝑑 − 1 последних координат.

Так как 𝑑 𝒂𝑖 , 𝒂𝑗 ≥ 𝑑 для любых 𝑖, 𝑗, то все слова 𝒂𝑖′ различны. Их

количество не превосходит числа всех 𝑞-ичных слов длины 𝑛 − 𝑑 + 1 .

Поэтому и 𝑀 ≤ 𝑞𝑛−𝑑+1.

Page 38: Коды, исправляющие ошибки. Простейшие границы. Коды Варшамова—Тененгольца

На лекции мы рассмотрели:

• Исправление ошибок, кодовое расстояние

• Коды Варшамова—Тененгольца

• Простые границы мощностей кодов