ホームページ > バックエンド開発 > Golang > 入力数値から決定性のある一意の整数を生成するにはどうすればよいですか?

入力数値から決定性のある一意の整数を生成するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-23 08:38:50
オリジナル
900 人が閲覧しました

How to Generate Deterministic and Unique Integers from Input Numbers?

決定的で一意な数値の生成

各入力数値に一意にマッピングされる決定的な整数を生成する必要があることを考えると、不可能のように思えるかもしれません。 。ただし、この要件を満たす数式があります。

変換式

変換式はモジュラー算術から導出されます:

f(P) = (mP + s) mod n
ログイン後にコピー

ここで:

  • P は入力ですnumber
  • m は n と素の非偶数です
  • s は n 未満の乱数です
  • n は生成される値の範囲 (例: 2) ^64 for uint64)

この式により、すべての入力 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート