決定的で一意な数値の生成
各入力数値に一意にマッピングされる決定的な整数を生成する必要があることを考えると、不可能のように思えるかもしれません。 。ただし、この要件を満たす数式があります。
変換式
変換式はモジュラー算術から導出されます:
f(P) = (mP + s) mod n
ここで:
この式により、すべての入力 P が範囲内の一意の出力にマッピングされることが保証されます。 0からn-1まで。 m の共素条件により、m と n の間の共通因数が防止され、周期的なパターンや衝突が排除されます。
uint64 の実装例
uint64 の範囲の場合、次のパラメーター値使用できます:
var ( m = uint64(39293) s = uint64(75321908) ) func transform(p uint64) uint64 { return p*m + s }
の拡張子int64
符号付き数値 (int64) の場合も、同様のアプローチを使用できます。 uint64 の元の変換は、入力と出力を uint64 に変換した後、または uint64 から変換した後に適用されます。
func signedTransform(p int64) int64 { return int64(transform(uint64(p))) }
この決定的で一意の数値生成スキームを利用することにより、変換を必要とせずに入力数値を一意の出力にマッピングすることが可能になります。配列またはメモリを大量に使用するソート。
以上が入力数値から決定性のある一意の整数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。