Локально проверяемый код — это тип кода с исправлением ошибок , для которого можно определить, является ли строка словом в этом коде, посмотрев на небольшое (часто постоянное) количество бит строки. В некоторых ситуациях полезно знать, повреждены ли данные, не расшифровывая их полностью, чтобы можно было предпринять соответствующие действия в ответ. Например, в коммуникации, если получатель сталкивается с поврежденным кодом, он может запросить повторную отправку данных, что может повысить точность указанных данных. Аналогично, в хранении данных эти коды могут позволить восстановить поврежденные данные и правильно перезаписать их.
Напротив, локально декодируемые коды используют небольшое количество бит кодового слова для вероятностного восстановления исходной информации. Доля ошибок определяет, насколько вероятно, что декодер правильно восстановит исходный бит; однако, не все локально декодируемые коды локально проверяемы. [1]
Очевидно, что любое допустимое кодовое слово должно быть принято как кодовое слово, но строки, которые не являются кодовыми словами, могут иметь только один бит, что потребует много (определенно больше, чем постоянное число) проб. Чтобы учесть это, неудача тестирования определяется только в том случае, если строка имеет ошибку по крайней мере на заданную долю своих бит. Это означает, что слова кода должны быть длиннее входных строк за счет добавления некоторой избыточности.
Для измерения расстояния между двумя строками используется расстояние Хэмминга .
Расстояние строки от кода вычисляется по формуле
Относительные расстояния вычисляются как доля числа бит.
Код называется локально -тестируемым, если существует машина Тьюринга M, имеющая случайный доступ к входным данным , которая делает не более чем неадаптивные запросы и удовлетворяет следующим условиям: [2]
Также скорость кода — это отношение длины сообщения к длине кодового слова.
Остается открытым вопрос, существуют ли локально проверяемые коды линейного размера, но есть несколько конструкций, которые считаются «почти линейными»: [3]
Оба они были достигнуты, даже при постоянной сложности запроса и двоичном алфавите , например, с помощью для любого . Следующая почти линейная цель линейна с точностью до полилогарифмического множителя; . Никто еще не придумал линейно тестируемый код, удовлетворяющий этому ограничению. [3]
В ноябре 2021 года в двух препринтах сообщалось [4] [5] [6] [7] о первой конструкции «-LTC» за полиномиальное время, а именно локально тестируемых кодов с постоянной скоростью , постоянным расстоянием и постоянной локальностью .
Локально проверяемые коды имеют много общего с вероятностно проверяемыми доказательствами (PCP). Это должно быть очевидно из сходства их конструкции. В обоих случаях нам даются случайные неадаптивные запросы в большую строку, и если мы хотим принять, мы должны с вероятностью 1, а если нет, мы должны принять не более чем в половине случаев. Главное отличие в том, что PCP заинтересованы в принятии, если существует , так что . Локально проверяемые коды, с другой стороны, принимают, если это часть кода. Многое может пойти не так, если предположить, что доказательство PCP кодирует локально проверяемый код. Например, определение PCP ничего не говорит о недействительных доказательствах, только о недействительных входных данных.
Несмотря на это различие, локально проверяемые коды и PCP достаточно похожи, поэтому зачастую для построения одного из них доказывающий по ходу дела строит и другой. [8]
Один из самых известных кодов исправления ошибок, код Адамара , является локально проверяемым кодом. Кодовое слово x кодируется в коде Адамара как линейная функция (mod 2). Это требует перечисления результата этой функции для каждого возможного y, что требует экспоненциально больше бит, чем ее входные данные. Чтобы проверить, является ли строка w кодовым словом кода Адамара, все, что нам нужно сделать, это проверить, является ли кодируемая ею функция линейной. Это означает простую проверку, являются ли x и y равномерно случайными векторами (где обозначает побитовое XOR ).
Легко видеть, что для любого допустимого кодирования это уравнение верно, поскольку это определение линейной функции. Однако несколько сложнее показать, что строка, которая находится далеко от C, будет иметь верхнюю границу своей ошибки в терминах . Одна граница находится прямым подходом аппроксимации шансов того, что ровно один из трех зондов даст неверный результат. Пусть A, B и C будут событиями , , и будут неверными. Пусть E будет событием того, что ровно один из них произойдет. Это приводит к
Это работает для , но вскоре после этого, . С дополнительной работой можно показать, что ошибка ограничена
Для любого заданного значения существует только постоянная вероятность ложных срабатываний, поэтому мы можем просто проверить постоянное количество раз, чтобы получить вероятность ниже 1/2. [3]
Длинный код — это еще один код с очень большим раздутием, который близок к локально проверяемому. При наличии входных данных (обратите внимание, что для их представления требуются биты) функция, возвращающая бит входных данных, , оценивается на всех возможных -битных входных данных , а кодовое слово является их конкатенацией (длиной ). Способ локального тестирования с некоторыми ошибками — выбрать равномерно случайные входные данные и установить , но с небольшой вероятностью переворота каждого бита, . Принять функцию в качестве кодового слова, если . Если — кодовое слово, оно будет приниматься до тех пор, пока не изменилось, что происходит с вероятностью . Это нарушает требование, чтобы кодовые слова всегда принимались, но может быть достаточно хорошим для некоторых нужд. [9]
Другие локально проверяемые коды включают коды Рида-Маллера (см. локально декодируемые коды для алгоритма декодирования), коды Рида-Соломона и короткий код.