Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

В теории кодирования , расширитель коды образуют класс кодов , исправляющих ошибки , которые построены из двудольных графов расширителя . Наряду с кодами Юстесена особый интерес представляют коды расширителей, поскольку они имеют постоянную положительную скорость , постоянное положительное относительное расстояние и постоянный размер алфавита . Фактически в алфавите всего два элемента, поэтому коды-расширители относятся к классу двоичных кодов . Кроме того, коды расширения могут кодироваться и декодироваться во времени, пропорциональном длине блока кода.

Коды расширителей [ править ]

В теории кодирования код расширителя - это линейный блочный код , матрица проверки на четность которого является матрицей смежности двудольного графа расширителя . Эти коды имеют хорошее относительное расстояние , где и являются свойствами графа расширителя, как определено ниже), скорость и декодируемость (существуют алгоритмы времени выполнения ).

Определение [ править ]

Рассмотрим двудольный граф , где и - множества вершин, а - множество ребер, соединяющих вершины в с вершинами . Предположим , что каждая вершина имеет степень (граф -left- регулярный ), и , . Тогда это экспандер , если каждое достаточно небольшого подмножества , обладает тем свойством , что имеет , по меньшей мере , отдельные сосед . Обратите внимание, что это тривиально выполняется для . Когда и для константы , мы говорим, что это расширитель без потерь.

Поскольку это двудольный граф, мы можем рассматривать его матрицу смежности. Тогда линейный код, сгенерированный при просмотре транспонирования этой матрицы как матрицы проверки на четность, является кодом расширителя.

Было показано, что существуют нетривиальные расширительные графы без потерь. Более того, мы можем их явно построить. [1]

Оценить [ редактировать ]

Скорость - это его размер, деленный на длину его блока. В этом случае матрица проверки на четность имеет размер и, следовательно, имеет размер не менее .

Расстояние [ править ]

Допустим . Тогда расстояние кода расширителя не менее .

Доказательство [ править ]

Обратите внимание, что мы можем рассматривать каждое кодовое слово в как подмножество вершин , говоря, что вершина тогда и только тогда, когда индекс -й индекс кодового слова равен 1. Тогда это кодовое слово тогда и только тогда, когда каждая вершина смежна с четным числом вершин в . (Для того, чтобы быть кодовым словом, где - матрица проверки на четность. Тогда каждая вершина в соответствует каждому столбцу . Тогда умножение матрицы на дает желаемый результат.) Итак, если вершина смежна с одной вершиной в , мы сразу знаем, что это не кодовое слово. Пусть обозначают сосед из , и обозначают те соседкоторые единственны, т. е. примыкают к одной вершине из .

Лемма 1 [ править ]

Для каждого размера , .

Доказательство [ править ]

Тривиально, поскольку подразумевает . следует, поскольку степень каждой вершины в равна . По свойству расширения графа должен существовать набор ребер, которые переходят в разные вершины. Остальные ребра делают не более чем соседей уникальными, поэтому .

Следствие [ править ]

Каждый достаточно маленький имеет уникального соседа. Это следует, поскольку .

Лемма 2 [ править ]

Каждое подмножество с имеет уникального соседа.

Доказательство [ править ]

Лемма 1 доказывает случай , так что предположим . Пусть такое что . По лемме 1 мы это знаем . Тогда вершина находится в iff , и мы знаем это , поэтому мы знаем это по первой части леммы 1 . Так как , и , следовательно , не является пустым.

Следствие [ править ]

Обратите внимание , что если имеет , по меньшей мере , 1 уникальный сосед, то есть , то соответствующее слово , соответствующее не может быть кодовым словом, так как он не будет размножаться вектор всех нулей по матрице контроля по четности. По предыдущему аргументу, . Поскольку является линейным, мы заключаем, что имеет расстояние не менее .

Кодировка [ править ]

Время кодирования для кода расширителя ограничено сверху временем кодирования общего линейного кода - умножением матриц. Результат Спилмана показывает, что кодирование возможно во времени. [2]

Расшифровка [ править ]

Расшифровка кодов расширителей возможна во времени при использовании следующего алгоритма.

Позвольте быть вершиной, которая соответствует th индексу в кодовых словах . Пусть будет полученное слово, и . Да будет и будет . Затем рассмотрим жадный алгоритм:


Ввод: полученное слово .

инициализировать y 'как yа в R есть av, смежные с нечетным числом вершин в V (y ') если существует такое i, что o (i)> e (i) перевернуть запись я в y ' еще провал

Вывод: сбой или измененное кодовое слово .


Доказательство [ править ]

Сначала покажем правильность алгоритма, а затем исследуем время его работы.

Правильность [ править ]

Мы должны показать, что алгоритм завершается с правильным кодовым словом, когда полученное кодовое слово находится в пределах половины кодового расстояния от исходного кодового слова. Пусть множество коррумпированных переменных быть , и множество неудовлетворенных (рядом с нечетным числом вершин) вершины в ВЕ . Следующая лемма окажется полезной.

Лемма 3 [ править ]

Если , то есть с .

Доказательство [ править ]

По лемме 1 мы это знаем . Таким образом, средняя вершина имеет по крайней мере уникальных соседей (напомним, уникальные соседи не удовлетворены и, следовательно, вносят свой вклад ), поскольку , и, следовательно, существует вершина с .

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

Лемма 4 [ править ]

Если мы начнем с , то никогда не достигнем какой-либо точки алгоритма.

Доказательство [ править ]

Когда мы переверните вершину , и поменять местами, и так как у нас было , это означает , что количество неудовлетворенных вершин на правой уменьшается по меньшей мере , один после каждого флип. Так как начальное количество неудовлетворенных вершин не превосходит -регулярность графа . Если бы мы достигли строки с ошибками, то по лемме 1 были бы по крайней мере уникальные соседи, а значит, были бы по крайней мере неудовлетворенные вершины, противоречие.

Леммы 3 и 4 показывают нам, что если мы начнем с (половина расстояния ), то мы всегда найдем вершину, которую нужно перевернуть. Каждый флип уменьшает количество неудовлетворенных вершин по крайней мере на 1, и, следовательно, алгоритм завершается не более чем за шаги, и он завершается на некотором кодовом слове по лемме 3. (Если бы это не было кодовое слово, была бы некоторая вершина для переворота. ). Лемма 4 показывает нам, что мы никогда не можем быть дальше, чем от правильного кодового слова. Поскольку код имеет расстояние (с ), кодовое слово, которым он завершается, должно быть правильным кодовым словом, поскольку количество переворотов битов меньше половины расстояния (поэтому мы не могли пройти достаточно далеко, чтобы достичь любого другого кодового слова).

Сложность [ править ]

Теперь мы покажем, что алгоритм может обеспечить декодирование с линейным временем. Позвольте быть постоянным, и быть максимальной степенью любой вершины в . Обратите внимание, что это также постоянное значение для известных конструкций.

  1. Предварительная обработка: требуется время, чтобы вычислить, есть ли у каждой вершины четное или нечетное количество соседей.
  2. Предварительная обработка 2: нам нужно время, чтобы вычислить список вершин, в которых есть .
  3. Каждая итерация: мы просто удаляем первый элемент списка. Чтобы обновить список нечетных / четных вершин в , нам нужно только обновить записи, вставляя / удаляя по мере необходимости. Затем мы обновляем записи в списке вершин , добавляя больше нечетных, чем четных соседей, вставляя / удаляя при необходимости. Таким образом, каждая итерация требует времени.
  4. Как утверждалось выше, общее количество итераций не превышает .

Это дает общее время выполнения , где и являются константами.

См. Также [ править ]

  • График расширителя
  • Код проверки на четность с низкой плотностью
  • Линейное временное кодирование и декодирование кодов с исправлением ошибок
  • Коды ABNNR и AEL

Заметки [ править ]

Эта статья основана на материалах курса доктора Венкатесана Гурусвами. [3]

Ссылки [ править ]

  1. ^ Capalbo, M .; Reingold, O .; Vadhan, S .; Вигдерсон, А. (2002). «Проводники случайности и расширители без потерь постоянной степени» . STOC '02 Труды тридцать четвертого ежегодного симпозиума ACM по теории вычислений . ACM. С. 659–668. DOI : 10.1145 / 509907.510003 . ISBN 978-1-58113-495-7.
  2. Перейти ↑ Spielman, D. (1996). «Линейно-временные кодирующие и декодируемые коды с исправлением ошибок». IEEE Transactions по теории информации . 42 (6): 1723–31. CiteSeerX 10.1.1.47.2736 . DOI : 10.1109 / 18.556668 . 
  3. ^ Гурусва В. (15 ноября 2006). «Лекция 13: Коды расширителей» (PDF) . CSE 533: Исправление ошибок . Вашингтонский университет.
    Гурусвами, В. (март 2010 г.). «Примечания 8: Коды расширителей и их расшифровка» (PDF) . Введение в теорию кодирования . Университет Карнеги Меллон.
    Гурусвами, В. (сентябрь 2004 г.). «Гостевая колонка: коды исправления ошибок и графики расширителей» . Новости ACM SIGACT . 35 (3): 25–41. DOI : 10.1145 / 1027914.1027924 .