我正在为一个校验数字方案实现Verhoeff算法,但是在web资源中似乎有一些关于哪个排列循环应该形成排序表的基础的分歧。
Wikipedia使用:(36)(01589427)
而apparently,数字食谱使用不同的周期,this book使用:(0)(14)(23)(56789),引用自温特斯1990年的一篇文章。它还指出,韦尔霍夫使用了维基百科的一句名言。
现在,我的数论有点生疏了,但维基百科的循环显然会在8次方之后重复,而书中的1将是10,尽管书中说s^8=s。表2.14(b)在2循环中还有其他错误,所以这是值得怀疑的。
不幸的是,我没有原始文章的副本(而且我太紧张了,无法支付/厌恶40年前的知识仍然被出版商勒索赎金),也没有Numerical Recipes的副本要检查(我不愿意安装他们的偏执诱导的版权保护插件来在线查看)。
那么,谁知道哪一个是正确的呢?他们都是对的吗?
发布于 2010-05-20 19:05:27
有一个旧版本的Numerical Recipes可以用here作为PDF。Verhoeff算法在20.3节中描述。它使用了与维基百科文章相同的排列方式。
发布于 2011-12-23 22:15:26
排列(0)(14)(23)(56789)比排列(36)(01589427)更好。这是因为,(36)(01589427)只能检测到88.89%的单次转置错误,而(0)(14)(23)(56789)可以检测到所有转置错误。如果使用(36)(01589427),则认为数字代码716被给予0作为校验位。即,代码将是7160。但是,如果数字1和6被转置,则当校验和为零时,该校验位方案不会给出错误。这不是(0)(14)(23)(56789)的情况。
https://stackoverflow.com/questions/2872777
复制相似问题