Участник:Feorge — различия между версиями
Feorge (обсуждение | вклад) м (Начало правок) |
Feorge (обсуждение | вклад) (Все правки сделаны) |
||
Строка 1: | Строка 1: | ||
== Определение и устранение ошибок в общем случае == | == Определение и устранение ошибок в общем случае == | ||
− | Пусть <tex>B = \{0, 1\}</tex> — булевое множество. | + | Пусть <tex>B = \{0, 1\}</tex> — булевое множество. Рассмотрим <tex>B^n</tex> и [[Расстояние Хэмминга#def1|расстояние Хемминга]] <tex>H(x,y)</tex>. Пусть <tex>c:\Sigma \to B^n</tex> {{---}} разделяемый код постоянной длины. Обозначим <tex>\min\limits_{x,y\in \Sigma}H(c(x), c(y)) = d(c)</tex>. |
− | Рассмотрим <tex>B^n</tex> и расстояние | + | |
− | Пусть <tex>c:\Sigma to B^n</tex> {{---}} разделяемый код постоянной длины. | ||
− | Обозначим <tex>\ | ||
{{Определение | {{Определение | ||
|neat = 1 | |neat = 1 | ||
|definition= | |definition= | ||
− | Код <tex>c</tex> обнаруживает <tex>k</tex> ошибок, если <tex>d(c) > k</tex>. | + | Код <tex>c</tex> ''обнаруживает'' <tex>k</tex> ошибок, если <tex>d(c) > k</tex>. |
− | }} | + | }} <br /> |
− | |||
{{Определение | {{Определение | ||
|neat = 1 | |neat = 1 | ||
|definition= | |definition= | ||
− | Код <tex>c</tex> исправляет <tex>k</tex> ошибок, если <tex>d(c) > 2k</tex>. | + | Код <tex>c</tex> ''исправляет'' <tex>k</tex> ошибок, если <tex>d(c) > 2k</tex>. |
− | }} | + | }} <br /> |
− | |||
{{Утверждение | {{Утверждение | ||
|statement= Код, исправляющий <tex>k</tex> ошибок, обнаруживает <tex>2k</tex> ошибок. | |statement= Код, исправляющий <tex>k</tex> ошибок, обнаруживает <tex>2k</tex> ошибок. | ||
Строка 24: | Строка 20: | ||
|neat = 1 | |neat = 1 | ||
|definition= | |definition= | ||
− | Булев шар {{---}} подмножество <tex>B^n</tex> вида <tex> \{ y : H(x,y) \leqslant r\}</tex> | + | Булев шар {{---}} подмножество <tex>B^n</tex> вида <tex> \{ y : H(x,y) \leqslant r\}</tex>. <tex>x</tex> называется его центром, <tex>r</tex> {{---}} радиусом. Булев шар с центром <tex>x</tex> и радиусом <tex>r</tex> обознчается <tex>S(x,r)</tex>. |
− | <tex>x</tex> называется его центром, <tex>r</tex> | + | }} <br /> |
− | Булев шар с центром <tex>x</tex> и радиусом <tex>r</tex> обознчается <tex>S(x,r)</tex>. | ||
− | }} | ||
− | |||
{{Определение | {{Определение | ||
− | |neat = 1 | + | |neat= 1 |
|definition= | |definition= | ||
Обьёмом шара <tex>S(x,r)</tex> в <tex>B^n</tex> называется величина <tex>|S(x,r)|</tex>. | Обьёмом шара <tex>S(x,r)</tex> в <tex>B^n</tex> называется величина <tex>|S(x,r)|</tex>. | ||
Обьём шара радиуса <tex>r</tex> в <tex>B^n</tex> обозначается <tex>V(n,r)</tex>. | Обьём шара радиуса <tex>r</tex> в <tex>B^n</tex> обозначается <tex>V(n,r)</tex>. | ||
− | }} | + | }} <br /> |
− | |||
− | |||
{{Утверждение | {{Утверждение | ||
|statement= Обьём шара не зависит от его центра. | |statement= Обьём шара не зависит от его центра. | ||
− | |proof= | + | |proof=Заметим, что шар <tex>S(x,r)</tex> всегда можно получить из другого шара <tex>S(y,r)</tex> с помощью "параллельного переноса" на вектор <tex>x\oplus y</tex> (здесь <tex>\oplus</tex> обозначает побитовый <tex>XOR</tex>), т.е. |
− | Заметим, что шар <tex>S(x,r)</tex> всегда можно получить из другого шара <tex>S(y,r)</tex> с помощью "параллельного переноса" на вектор <tex>x\oplus y</tex>, т.е. | + | <tex> S(x, r) = \{z : z = t \oplus x \oplus y, t \in S(y,r) \} </tex>. Покажем это. Необходимо доказать, что <tex>H(x,z) = H(y,t)</tex> при <tex>t = z \oplus (x \oplus y)</tex> и <tex>y = x \oplus (x \oplus y)</tex>. |
− | <tex> S(x, r) = \{z : z = t \oplus x \oplus y, t \in S(y,r) \} </tex>. | + | <tex>H(y,t) = |\{i : y[i] \neq t[i]\}| = |\{i : x[i] \oplus (x[i] \oplus y[i]) \neq z[i] + (x[i] + y[i])\}| |
− | Покажем это. | + | = |\{i : x[i] \neq z[i]\}| = H(z,t) </tex>. |
− | Необходимо доказать, что | ||
− | <tex>H(y,t) = |\{i : y[i] \neq t[i]\}| = |\{i : x[i] \oplus (x[i] \oplus y[i]) \neq z[i] + (x[i] + y[i]) \}| | ||
− | = |\{ i : x[i] \neq z[i]\}| = H(z,t) </tex>. | ||
}} | }} | ||
− | Можно сформулировать | + | Можно сформулировать свойство кодов, исправляющих <tex>k</tex> ошибок, в терминах булевых шаров. |
− | |||
− | |||
− | |||
− | |||
− | |||
{{Лемма | {{Лемма | ||
− | |id= | + | |id=boolean_balls_coding |
− | |statement= | + | |statement=Пусть <tex>c:\Sigma \to B^n</tex> {{---}} код, исправляющий <tex>k</tex> ошибок. |
− | + | Тогда для любых неравных <tex>x,y\in \Sigma</tex> выполнено <tex>S(c(x), k) \cap S(c(y), k) = \emptyset</tex>. | |
− | Тогда <tex>c</tex> | + | |proof=Т.к код <tex>c</tex> исправляет <tex>k</tex> ошибок, по определению <tex>d(c)>2k</tex>. |
+ | Допустим, <tex>x, y</tex> такие, что <tex>x \neq y</tex> и <tex>S(c(x), k) \cap S(c(y), k)\neq \emptyset</tex>, т.е существует <tex>z</tex>, такой что <tex>H(c(x), z) \leqslant k</tex> и <tex>H(c(y), z) \leqslant k</tex>. Тогда по неравенству треугольника <tex>H(c(x), c(y)) \leqslant 2k</tex>. Это противоречит тому, что <tex>d(c)>2k</tex>. | ||
}} | }} | ||
− | + | == Граница Хэмминга, граница Гильберта == | |
− | == Граница | ||
{{Теорема | {{Теорема | ||
− | |about=Граница | + | |about=Граница Хэмминга |
− | |statement= Пусть <tex>c: \Sigma \to B^n</tex> | + | |statement= Пусть <tex>c: \Sigma \to B^n</tex> {{---}} код для <tex>m</tex>-символьного алфавита, исправляющий <tex>k</tex> ошибок. |
Тогда выполнено неравенство <tex>mV(n,k) \leqslant 2^n</tex>. | Тогда выполнено неравенство <tex>mV(n,k) \leqslant 2^n</tex>. | ||
− | |proof= Это прямое следствие [[#boolean_balls_coding|предыдущей]] леммы. | + | |proof=Это прямое следствие [[#boolean_balls_coding|предыдущей]] леммы. |
Всего есть <tex>m = |\Sigma|</tex> попарно непересекающихся шаров. | Всего есть <tex>m = |\Sigma|</tex> попарно непересекающихся шаров. | ||
Их суммарный обьём равен <tex>mV(n,k)</tex>, и он не может превосходить общее число возможных веткоров <tex>|B| = 2^n</tex>. | Их суммарный обьём равен <tex>mV(n,k)</tex>, и он не может превосходить общее число возможных веткоров <tex>|B| = 2^n</tex>. | ||
}} | }} | ||
− | Граница | + | Граница Хэмминга даёт верхнюю оценку на скорость передачи сообщений в канале с ошибками. |
Прологарифмировав неравенство, получим <tex>\frac{\log(m)}{n} \leqslant 1 - \frac{V(n, k)}{n}</tex>. | Прологарифмировав неравенство, получим <tex>\frac{\log(m)}{n} \leqslant 1 - \frac{V(n, k)}{n}</tex>. | ||
Здесь <tex>\frac{\log(m)}{n}</tex> это плотность кодирования, количество информации в одном символе алфавита на размер кода. | Здесь <tex>\frac{\log(m)}{n}</tex> это плотность кодирования, количество информации в одном символе алфавита на размер кода. | ||
Строка 85: | Строка 68: | ||
|statement= | |statement= | ||
Если выполнено неравенство <tex> mV(n,2k) \leqslant 2^n</tex>, то существует код <tex>c:\Sigma \to B^n</tex> для <tex>m</tex>-символьного алфавита <tex>\Sigma </tex>, исправляющий <tex>k</tex> ошибок. | Если выполнено неравенство <tex> mV(n,2k) \leqslant 2^n</tex>, то существует код <tex>c:\Sigma \to B^n</tex> для <tex>m</tex>-символьного алфавита <tex>\Sigma </tex>, исправляющий <tex>k</tex> ошибок. | ||
− | |proof= | + | |proof=Построим этот код алгоритмом. |
− | Построим этот код алгоритмом. | ||
Сопоставим первому символу <tex>x_1</tex> из <tex>\Sigma</tex> в <tex>B^n</tex> кодовое слово <tex>c(x_1)\in B^n</tex> и вырежем из <tex>B^n</tex> шар <tex>S(x_1,2k)</tex>. | Сопоставим первому символу <tex>x_1</tex> из <tex>\Sigma</tex> в <tex>B^n</tex> кодовое слово <tex>c(x_1)\in B^n</tex> и вырежем из <tex>B^n</tex> шар <tex>S(x_1,2k)</tex>. | ||
Для второго символа <tex>x_2</tex> повторим ту же процедуру, выберем ему кодовое слово <tex>c(x_2)\in B^n \setminus S(x_1, 2k)</tex>. | Для второго символа <tex>x_2</tex> повторим ту же процедуру, выберем ему кодовое слово <tex>c(x_2)\in B^n \setminus S(x_1, 2k)</tex>. | ||
На каждом шаге будем выбирать для каждого символа <tex>x_{i+1}</tex> некоторое слово <tex>c(x_{i+1}) \in B^n \setminus \bigcup_{j=1}^{i} S(x_j, 2k) </tex>, всего на выбор <tex>i+1</tex>-ого слова доступны <tex>2^n - iV(n,k) \geqslant V(n,k)</tex> вариантов. | На каждом шаге будем выбирать для каждого символа <tex>x_{i+1}</tex> некоторое слово <tex>c(x_{i+1}) \in B^n \setminus \bigcup_{j=1}^{i} S(x_j, 2k) </tex>, всего на выбор <tex>i+1</tex>-ого слова доступны <tex>2^n - iV(n,k) \geqslant V(n,k)</tex> вариантов. | ||
− | Неравенство гарантирует нам, что по каждому символу мы сможем выбрать кодовое слово, | + | Неравенство гарантирует нам, что по каждому символу мы сможем выбрать кодовое слово так, что оно будет удаленно от остальных кодовых слов на расстояние большее, чем <tex>2k</tex>, удовлетворяя неравенство <tex>d(c)>2k</tex>. Таким образом построенный код исправляет <tex>k</tex> ошибок. |
}} | }} | ||
+ | |||
+ | Примером кода для случая <tex>k=1</tex> является [[Избыточное кодирование, код Хэмминга#def1]|код Хэмминга] |
Версия 23:27, 26 июня 2021
Определение и устранение ошибок в общем случае
Пусть расстояние Хемминга . Пусть — разделяемый код постоянной длины. Обозначим .
— булевое множество. Рассмотрим и
Определение:
Код
обнаруживает ошибок, если .Определение:
Код
исправляет ошибок, если .Утверждение: |
Код, исправляющий ошибок, обнаруживает ошибок. |
Для составления оценок снизу и сверху на параметры кодирования нам понадобится понятие шара.
Определение:
Булев шар — подмножество
вида . называется его центром, — радиусом. Булев шар с центром и радиусом обознчается .Определение:
Обьёмом шара
в называется величина .
Обьём шара радиуса в обозначается .Утверждение: |
Обьём шара не зависит от его центра. |
Заметим, что шар всегда можно получить из другого шара с помощью "параллельного переноса" на вектор (здесь обозначает побитовый ), т.е. . Покажем это. Необходимо доказать, что при и . . |
Можно сформулировать свойство кодов, исправляющих
ошибок, в терминах булевых шаров.Лемма: |
Пусть — код, исправляющий ошибок.
Тогда для любых неравных выполнено . |
Доказательство: |
Т.к код Допустим, исправляет ошибок, по определению . такие, что и , т.е существует , такой что и . Тогда по неравенству треугольника . Это противоречит тому, что . |
Граница Хэмминга, граница Гильберта
Теорема (Граница Хэмминга): |
Пусть — код для -символьного алфавита, исправляющий ошибок.
Тогда выполнено неравенство . |
Доказательство: |
Это прямое следствие предыдущей леммы. Всего есть попарно непересекающихся шаров. Их суммарный обьём равен , и он не может превосходить общее число возможных веткоров . |
Граница Хэмминга даёт верхнюю оценку на скорость передачи сообщений в канале с ошибками. Прологарифмировав неравенство, получим
. Здесь это плотность кодирования, количество информации в одном символе алфавита на размер кода. Таким образом, при кодировании с защитой от ошибок падает скорость передачи.Аналогично составляется оценка в другую сторону.
Теорема (Граница Гильберта): |
Если выполнено неравенство , то существует код для -символьного алфавита , исправляющий ошибок. |
Доказательство: |
Построим этот код алгоритмом. Сопоставим первому символу Неравенство гарантирует нам, что по каждому символу мы сможем выбрать кодовое слово так, что оно будет удаленно от остальных кодовых слов на расстояние большее, чем из в кодовое слово и вырежем из шар . Для второго символа повторим ту же процедуру, выберем ему кодовое слово . На каждом шаге будем выбирать для каждого символа некоторое слово , всего на выбор -ого слова доступны вариантов. , удовлетворяя неравенство . Таким образом построенный код исправляет ошибок. |
Примером кода для случая
является [[Избыточное кодирование, код Хэмминга#def1]|код Хэмминга]