При обнаружении ошибок алгоритм Дамма представляет собой алгоритм контрольных цифр , который обнаруживает все однозначные ошибки и все соседние ошибки транспонирования . Он был представлен Х. Майклом Даммом в 2004 году [1] в рамках его докторской диссертации под названием « Полно антисимметричные квазигруппы».
Алгоритм Дамма аналогичен алгоритму Верхуффа . Он также обнаружит все случаи двух наиболее часто встречающихся типов ошибок транскрипции , а именно: изменение одной цифры или транспонирование двух соседних цифр (включая транспозицию конечной контрольной цифры и предыдущей цифры). [1] [2] Преимущество алгоритма Дамма состоит в том, что он не имеет специально сконструированных перестановок и возможностей схемы Верхова для конкретных позиций . От таблицы обратных операций также можно отказаться, если все основные диагональные элементы таблицы операций равны нулю.
Алгоритм Дамма генерирует только 10 возможных значений, что позволяет избежать необходимости использования нецифрового символа (например, X в 10-значной схеме контрольных цифр ISBN ).
Добавление ведущих нулей не влияет на контрольную цифру (слабость кодов переменной длины). [1]
Существуют полностью антисимметричные квазигруппы, которые выявляют все фонетические ошибки, связанные с английским языком ( 13 ↔ 30 , 14 ↔ 40 , ..., 19 ↔ 90 ). Таблица, используемая в иллюстративном примере, основана на экземпляре такого типа.
Для всех алгоритмов контрольной суммы, включая алгоритм Дамма, добавление ведущих нулей не влияет на контрольную цифру, [1] поэтому 1, 01, 001 и т. д. создают одну и ту же контрольную цифру. Следовательно, коды переменной длины не следует проверять вместе.
Ее существенной частью является квазигруппа порядка 10 (т. е. имеющая латинский квадрат 10 × 10 в качестве тела своей таблицы операций ) с особенностью слабо полной антисимметричности . [3] [4] [i] [ii] [iii] Дамм раскрыл несколько методов создания полностью антисимметричных квазигрупп порядка 10 и привел несколько примеров в своей докторской диссертации. [3] [i] Этим Дамм также опроверг старую гипотезу о том, что полностью антисимметричных квазигрупп порядка 10 не существует. [5]
Квазигруппа ( Q , ∗) называется полностью антисимметричной, если для всех c , x , y ∈ Q справедливы следующие импликации: [4]
и он называется слабым тотально антисимметричным, если выполняется только первое импликирование. Дамм доказал, что существование вполне антисимметричной квазигруппы порядка n эквивалентно существованию слабой тотально антисимметричной квазигруппы порядка n . Для алгоритма Дамма с проверочным уравнением (...((0 ∗ x m ) ∗ x m −1 ) ∗ ...) ∗ x 0 = 0 слабая тотально антисимметричная квазигруппа со свойством x ∗ x = 0 нужен. Такую квазигруппу можно построить из любой вполне антисимметричной квазигруппы, переставив столбцы таким образом, чтобы все нули лежали на диагонали. И, с другой стороны, из любой слабой тотально антисимметричной квазигруппы можно построить вполне антисимметричную квазигруппу, переставляя столбцы так, чтобы первая строка находилась в естественном порядке. [3]
Допустимость последовательности цифр, содержащей контрольную цифру, определяется над квазигруппой. Готовую к использованию таблицу квазигрупп можно взять из диссертации Дамма (стр. 98, 106, 111). [3] Полезно, если каждая запись на главной диагонали равна 0 , [1], потому что это упрощает вычисление контрольной цифры.
Предварительное условие: основные диагональные записи таблицы равны 0 .
Будет использована следующая таблица операций. [1] Ее можно получить из полностью антисимметричной квазигруппы x ∗ y на странице 111 докторской диссертации Дамма [3] путем перестановки строк и замены записей с помощью перестановки φ = (1 2 9 5 4 8 6 7 3) и определение Икс ⋅ y знак равно φ -1 ( φ ( Икс ) * y ) .
Предположим, мы выбрали число (последовательность цифр) 572 .
Полученная промежуточная цифра — 4 . Это вычисленная контрольная цифра. Добавляем его к числу и получаем 5724 .
Результирующая промежуточная цифра равна 0 , следовательно, число действительно .
В приведенном выше примере показаны детали алгоритма, генерирующего контрольную цифру (пунктирная синяя стрелка) и сверяющего число 572 с контрольной цифрой.