Алгоритм Верхуффа [1] представляет собой контрольную сумму для обнаружения ошибок, впервые опубликованную голландским математиком Якобусом Верхоффом в 1969 году. [2] [3] Это был первый алгоритм десятичных контрольных цифр , который обнаруживает все однозначные ошибки и все ошибки транспонирования, включающие две цифры. соседние цифры, [4] что в то время считалось невозможным для такого кода.
Метод был независимо открыт Х. Питером Гаммом в 1985 году, на этот раз включая формальное доказательство и расширение на любую базу. [5]
Целью Верхуффа было найти десятичный код — такой, в котором контрольная цифра представляет собой одну десятичную цифру, — который обнаруживал бы все однозначные ошибки и все перестановки соседних цифр. В то время предполагаемые доказательства несуществования [6] этих кодов сделали популярными коды с основанием 11, например, в контрольной цифре ISBN .
Его цели также были практическими: он основывал оценку различных кодов на реальных данных голландской почтовой системы, используя систему взвешенных баллов для различных видов ошибок. Анализ разбил ошибки на несколько категорий: во-первых, по количеству ошибочных цифр; для тех, у кого есть ошибка в две цифры, есть транспозиции ( ab → ba ), близнецы ( aa → 'bb'), скачкообразные транспозиции ( abc → cba ), фонетические ( 1a → a0 ) и скачкообразные близнецы ( aba → cbc ). Кроме того, есть пропущенные и добавленные цифры. Хотя частота некоторых из этих ошибок может быть небольшой, некоторые коды могут быть невосприимчивы к ним в дополнение к основной цели обнаружения всех одиночных ошибок и транспозиций.
Фонетические ошибки, в частности, проявили лингвистический эффект, поскольку в голландском языке числа обычно читаются парами; а также, хотя на голландском языке 50 звучит похоже на 15, 80 не звучит как 18.
На примере шестизначных чисел Верховев предложил следующую классификацию ошибок:
Общая идея алгоритма состоит в том, чтобы представить каждую из цифр (от 0 до 9) как элементы группы диэдра . То есть сопоставить цифры с , манипулировать ими, а затем снова сопоставить их с цифрами. Пусть это отображение будет
Пусть n-я цифра равна , а количество цифр равно .
Например, учитывая код 248, это 3 и .
Теперь определим перестановку
Например . Другой пример: поскольку
Используя мультипликативную запись для групповой операции , контрольная цифра тогда является просто значением, таким, что
явно задается обратной перестановкой
Например, контрольная цифра для 248 равна 5. Чтобы проверить это, используйте сопоставление и вставьте в левую часть предыдущего уравнения.
Чтобы быстро оценить эту перестановку, используйте это
чтобы получить это
Это то же отражение, которое итеративно умножается. Используйте тот факт, что отражения являются их собственными обратными сторонами. [7]
На практике алгоритм реализуется с использованием простых справочных таблиц без необходимости понимать, как генерировать эти таблицы на основе базовой группы и теории перестановок. Правильнее считать это семейством алгоритмов, поскольку другие варианты тоже работают. Верховев отмечает, что конкретная перестановка, приведенная выше, является особенной, поскольку она обладает свойством обнаруживать 95,3% фонетических ошибок. [8]
Сильные стороны алгоритма заключаются в том, что он обнаруживает все ошибки транслитерации и транспозиции, а также большинство ошибок двойника, двойного перехода, транспозиции скачка и фонетических ошибок.
Основной слабостью алгоритма Верхуффа является его сложность. Требуемые расчеты не могут быть легко выражены в виде формулы, например . Справочные таблицы необходимы для облегчения вычислений. Аналогичным кодом является алгоритм Дамма , обладающий схожими качествами.
Алгоритм Верхуффа может быть реализован с использованием трех таблиц: таблицы умножения d , обратной таблицы inv и таблицы перестановок p .
Первая таблица d основана на умножении в группе диэдра D 5 . [7] и представляет собой просто таблицу Кэли группы. Обратите внимание, что эта группа не является коммутативной , то есть для некоторых значений j и k d ( j , k ) ≠ d ( k , j ).
Обратная таблица inv представляет собой мультипликативную обратную цифру, то есть значение, которое удовлетворяет условию d ( j , inv ( j )) = 0.
Таблица перестановок p применяет перестановку к каждой цифре в зависимости от ее положения в числе. На самом деле это одна перестановка (1 5 8 9 4 2 7 0)(3 6), применяемая итеративно; т.е. п ( я + j , п ) = п ( я , п ( j , п )).
Расчет контрольной суммы Верхуффа выполняется следующим образом:
Исходное число действительно тогда и только тогда, когда .
Чтобы сгенерировать контрольную цифру, добавьте0 , выполните расчет: правильная контрольная цифра — .
Контрольная цифра Верховева.