5

私はチェック ディジット スキームに Verhoeff アルゴリズムを実装していますが、Web ソースでは、どの順列サイクルが順列テーブルの基礎を形成するかについて意見の相違があるようです。

ウィキペディアの使用: (36)(01589427)

どうやら、Numerical Recipies は別のサイクルを使用しており、この本では (0)(14)(23)(56789) を使用しています。これは Winters による 1990 年の記事から引用されています。また、Verhoeff がウィキペディアの引用を使用したことにも注意してください。

さて、私の数論は少し錆びていますが、ウィキペディアのサイクルは明らかに 8 乗の後に繰り返されますが、本の 1 つは s^8=s と言っているにもかかわらず 10 になります。表 2.14(b) には 2 サイクルで他のエラーがあるため、いずれにしても疑わしいです。

残念ながら、私は元の記事のコピーを持っていません (そして、支払うにはあまりにもきついです/40 年前の知識がまだ出版社によって身代金を要求されていることにうんざりしています) も、チェックする Numerical Recipes のコピーも持っていません (そして、パラノイアに誘導されたコピー防止プラグインをインストールして、オンラインで表示します)。

では、どれが正しいか分かる人はいますか?どちらも正しいですか?

4

2 に答える 2

3

旧版の Numerical Recipes は、こちらから PDF として入手できます。Verhoeff アルゴリズムはセクション 20.3 で説明されています。ウィキペディアの記事と同じ順列を使用しています。

于 2010-05-20T11:05:27.007 に答える
2

順列 (0)(14)(23)(56789) は、順列 (36)(01589427) よりも優れています。これは、(0)(14)(23)(56789) がそれらすべてを検出できるのに対し、(36)(01589427) は単一の転置エラーの 88.89% しか検出できないためです。(36)(01589427) を使用する場合は、数値コード 716 にチェック ディジットとして 0 を指定することを検討してください。つまり、コードは 7160 になります。ただし、1 と 6 の数字が入れ替わっても、チェック サムが 0 であるため、このチェック ディジット方式ではエラーは発生しません。これは、(0)(14)(23)(56789) には当てはまりません。

于 2011-12-23T14:15:26.063 に答える