- Алгоритм Берлекэмпа — Мэсси
-
Алгоритм Берлекэмпа — Мэсси
Алгоритм Берлекэмпа — Мэсси — алгоритм поиска кратчайшего регистра сдвига с линейной обратной связью для поданной на вход алгоритма требуемой генерируемой последовательности.
Алгоритм был открыт Элвином Берлекэмпом (англ.) в 1968 году[1]. Применение алгоритма к линейным кодам было найдено Джеймсом Мэсси в следующем году[2]. Это стало ключом для практического применения кодов Рида — Соломона.
Содержание
Алгоритм для двоичных последовательностей
- Задать требуемую последовательность битов .
- Создать массивы , , длины , задать начальные значения , , , , .
- Пока :
- Вычислить .
- Если , то текущая функция генерирует выбранный участок последовательности; оставить функцию прежней.
- Если :
- Сохранить копию массива в .
- Вычислить новые значения .
- Если , установить значения , и скопировать в .
- .
- В результате массив — функция обратной связи, то есть для любых .
Пример кода на C#
byte[] b, c, t, s; int N, L, m; public void BerlekampRegistryTester(int sequenceLength) { b = new byte[sequenceLength]; c = new byte[sequenceLength]; t = new byte[sequenceLength]; s = new byte[sequenceLength]; for (int i = 0; i < sequenceLength; i++) b[i] = c[i] = t[i] = 0; b[0] = c[0] = 1; N = L = 0; m = -1; } private void runTest() { int d; while (N < s.Length) { d = 0; for (int i = 0; i <= L; i++) d += s[N-i] * c[i]; d = d % 2; if (d != 0) { t = (byte[])c.Clone(); for (int i = 0; i <= s.Length + m - 1 - N; i++) c[N - m + i] = (byte)(c[N - m + i] ^ b[i]); if (L <= (N / 2)) { L = N + 1 - L; m = N; b = (byte[])t.Clone(); } } N++; } }
Примечания
Литература
- Блейхут Р. Теория и практика кодов, контролирующих ошибки = Theory and Practice of Error Control Codes. — М.: Мир, 1986. — 576 с.
Wikimedia Foundation. 2010.
Алгоритм Берлекэмпа — Не следует путать с Алгоритм Берлекэмпа Мэсси. Алгоритм Берлекэмпа алгоритм, который позволяет находить закон рекурсии для линейной рекуррентной последовательности. Основные определения Если существуют константы: такие что: , то… … Википедия
Алгоритм Берлекампа — Алгоритм Берлекампа данный алгоритм предназначен для факторизации полиномов, позволяет разлагать полиномы на неприводимые сомножители. Алгоритм был разработан Элвином Берлекэмпом в 1967 году. Следует различать алгоритм Берлекэмпа и алгоритм … Википедия
Мэсси, Джеймс — Мэсси Джеймс (англ. James Lee Massey; 1934, Ваузен, Огайо) выдающийся американский ученый, внесший значительный вклад в теорию информации и криптографию. Является профессором эмиритом цифровых технологий в Швейцарской высшей технической… … Википедия
Код Боуза — Коды Боуза Чоудхури Хоквингхема (БЧХ коды) в теории кодирования это широкий класс циклических кодов, применяемых для защиты информации от ошибок (см. Обнаружение и исправление ошибок). Отличается возможностью построения кода с… … Википедия
Код Рида — Коды Рида Соломона (англ. Reed–Solomon codes) недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона,… … Википедия
Код Рида — Соломона — Коды Рида Соломона недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона, работающие с байтами (октетами). Код… … Википедия
Код Боуза — Чоудхури — Хоквингема — Коды Боуза Чоудхури Хоквингхема (БЧХ коды) в теории кодирования это широкий класс циклических кодов, применяемых для защиты информации от ошибок (см. Обнаружение и исправление ошибок). Отличается возможностью построения кода с… … Википедия
Хронология развития теории информации — Хронология событий, связанных с теорией информации, сжатием данных, кодами коррекции ошибок и смежных дисциплин: 1872 … Википедия