Локально тестируемый код - Locally testable code

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

В отличие, локально декодируемые коды используйте небольшое количество бит кодового слова, чтобы вероятностно восстановить исходную информацию. Доля ошибок определяет, насколько вероятно, что декодер правильно восстановит исходный бит; однако не все локально декодируемые коды поддаются локальному тестированию.[1]

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

Определение

Чтобы измерить расстояние между двумя струнами, Расстояние Хэмминга используется

Расстояние струны из кода вычисляется

Относительные расстояния вычисляются как часть количества битов.

Код называется -местный -тестируемым, если существует машина Тьюринга M, заданная произвольный доступ к входу что делает самое большее неадаптивные запросы и удовлетворяет следующему:[2]

  • Для любого и , . Другими словами, M принимает предоставленный доступ к любому кодовому слову C.
  • За такой, что , . M должен отвергать строки -далее от C по крайней мере в половине случаев.

Пределы

Остается открытым вопрос, существуют ли какие-либо локально тестируемые коды линейного размера, но есть несколько конструкций, которые считаются «почти линейными»:[3]

  1. Многочлен сколь угодно близок к линейному; для любого , .
  2. Функции формы , куда - функция, стремящаяся к 0. Это приближает n к линейному с увеличением k. Например:
    • для некоторых
    • за

И то, и другое было достигнуто, даже при постоянной сложности запроса и двоичной алфавит, например, с для любого Следующая почти линейная цель линейна с точностью до полилогарифмический фактор; . Никто еще не придумал линейно тестируемый код, удовлетворяющий этому ограничению.[3]

Связь с вероятностно проверяемыми доказательствами

Локально тестируемые коды имеют много общего с вероятностно проверяемые доказательства (PCP). Это должно быть очевидно из сходства их конструкции. В обоих нам дается случайные неадаптивные запросы в большую строку, и если мы хотим принять, мы должны с вероятностью 1, а если нет, мы должны принять не более чем в половине случаев. Основное отличие состоит в том, что PCP заинтересованы в принятии если существует так что . С другой стороны, локально тестируемые коды принимают если это часть кода. Многие вещи могут пойти не так, если предположить, что доказательство PCP кодирует локально тестируемый код. Например, определение PCP ничего не говорит о недействительных доказательствах, только о недействительных входных данных.

Несмотря на это различие, локально тестируемые коды и PCP достаточно похожи, поэтому часто, чтобы построить один, проверяющий будет строить другой по пути.[4]

Примеры

Код Адамара

Один из самых известных кодов исправления ошибок, Код Адамара, является локально тестируемым кодом. Кодовое слово x закодировано в коде Адамара как линейная функция (мод 2). Это требует перечисления результата этой функции для каждого возможного y, что требует экспоненциально большего количества бит, чем его вход. Чтобы проверить, является ли строка w кодовым словом кода Адамара, все, что нам нужно сделать, это проверить, является ли функция, которую она кодирует, линейной. Это означает просто проверить, если для x и y равномерно случайный векторы (где обозначает побитовое XOR ).

Легко видеть, что для любой допустимой кодировки , это уравнение верно, поскольку это определение линейной функции. Однако несколько сложнее показать, что строка, -далее от C будет иметь верхнюю границу ошибки с точки зрения . Одна граница находится с помощью прямого подхода аппроксимации шансов того, что точно один из трех зондов даст неверный результат. Пусть A, B и C - события , , и быть неверным. Пусть E будет событием, когда произойдет ровно одно из них. Это выходит на

Это работает для , но вскоре после этого . При дополнительной работе можно показать, что ошибка ограничена

Для любого данного , у этого есть только постоянная вероятность ложных срабатываний, поэтому мы можем просто проверять постоянное количество раз, чтобы получить вероятность ниже 1/2.[3]

Длинный код

В Длинный код это еще один код с очень большим разрывом, близкий к тестируемому локально. Учитывая ввод (обратите внимание, это занимает бит для представления), функция, которая возвращает бит ввода, , оценивается по всем возможным -битовые входы , а кодовое слово - это объединение этих (длины ). Способ локально проверить это с некоторыми ошибками - выбрать равномерно случайный ввод и установить , но с небольшой вероятностью перевернуть каждый бит, . Принять функцию как кодовое слово, если . Если это кодовое слово, это примет так долго как не изменилось, что случается с вероятностью . Это нарушает требование о том, что кодовые слова всегда принимаются, но может быть достаточно для некоторых нужд.[5]

Другие коды, проверяемые на местном уровне, включают: Коды Рида-Мюллера (видеть локально декодируемые коды для алгоритма декодирования), Коды Рида-Соломона, и короткий код.

Рекомендации

  1. ^ Кауфман, Тали; Видерман, Майкл. «Локально тестируемые и локально декодируемые коды».
  2. ^ Бен-Сассон, Эли; Судан, Мадху. «Надежные локально тестируемые коды и продукты кодов» (PDF).
  3. ^ а б c Гольдрайх, Одед. «Краткие локально проверяемые коды и доказательства (обзор)». CiteSeerX  10.1.1.110.2530.
  4. ^ Черагчи, Махди. «Локально тестируемые коды».
  5. ^ Кол, Гиллат; Раз, Ран. «Границы для локально тестируемых кодов с уникальными тестами» (PDF).