2010-05-20 19 views
4

J'implémente l'algorithme de Verhoeff pour un schéma de contrôle, mais il semble y avoir un désaccord dans les sources web quant au cycle de permutation qui devrait former la base de la table de permutation.Cycle de permutation correct pour l'algorithme de Verhoeff

Wikipedia utilise: (36) (01589427)

tandis que apparently, numérique Recipies utilise un cycle différent et this book utilise: (0) (14) (23) (56 789), cité à partir d'un article 1990 par Winters . Il note également que Verhoeff a utilisé les citations de Wikipédia.

Maintenant, ma théorie des nombres est un peu rouillée, mais le cycle de Wikipedia se répètera clairement après la 8ème puissance, alors que le livre en prendra 10, bien qu'il dise que s^8 = s. Le tableau 2.14 (b) a d'autres erreurs dans les 2 cycles, donc c'est douteux de toute façon. Malheureusement, je n'ai pas de copies des articles originaux (et je suis trop serré pour payer/dégoûté que les connaissances de 40 ans soient toujours rachetées par les éditeurs), ni de copie de recettes numériques à vérifier (et je répugne à installer leur plug-in de protection contre la copie induit par paranoïa pour le voir en ligne).

Est-ce que quelqu'un sait ce qui est correct? Sont-ils tous les deux corrects?

Répondre

2

Il existe une ancienne édition de Recettes numériques disponibles en format PDF here. L'algorithme de Verhoeff est décrit dans la section 20.3. Il utilise la même permutation que l'article de Wikipédia.

+0

Merci interjay, mais autant que je sache, la table de permutation utilisée ici est complètement incorrecte. La permutation d'identité n'est pas là, et les autres entrées ne sont même pas des permutations (les éléments apparaissent plusieurs fois). – James

+0

@James: C'est exactement la même permutation que celle de Wikipédia, sauf qu'elle est arrangée par colonnes au lieu de rangées. Si vous regardez les colonnes du tableau de permutation de Wikipedia, vous aurez les valeurs exactes que NR utilise. NR a formaté la table avec confusion puisqu'ils ont séparé les nombres en groupes de 10 alors qu'ils auraient dû être séparés en groupes de 8. – interjay

+0

Ah, je le vois maintenant. Cela n'a pas aidé qu'ils ont également changé l'orientation entre les différentes matrices soit ... – James

1

La permutation (0) (14) (23) (56789) est meilleure que la permutation (36) (01589427). En effet, (36) (01589427) ne peut détecter que 88,89% des erreurs de transposition uniques alors que (0) (14) (23) (56789) peut toutes les détecter. Considérons que le code numérique 716 soit donné 0 comme chiffre de contrôle si (36) (01589427) est utilisé. c'est-à-dire que le code sera 7160. Mais, si les chiffres 1 et 6 sont transposés, ce schéma de contrôle ne donne pas d'erreur car la somme de contrôle est nulle. Ce n'est pas le cas avec (0) (14) (23) (56789).