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

別の整数から一意の決定的な整数を生成するにはどうすればよいですか?

DDD
リリース: 2024-11-21 06:15:09
オリジナル
981 人が閲覧しました

How to Generate Unique Deterministic Integers from Another Integer?

別の整数から一意の決定的整数を生成する

決定的数値生成関数を作成する探求において、私たちの目的は、各入力数値が対応する一意の整数を生成する関数を構築することです。重複のない数値。

剰余演算解決策:

独創的な解決策は、モジュラー演算、特にアフィン暗号にあります。これは変換式を使用します:

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

ここで:

  • n は許可される整数値の範囲を表します (例: uint64 の 2^64)
  • s は範囲
  • 未満の任意のシフト値です。m は互いに素です。 (共通因数なし) with n

uint64 の範囲では、2 で割り切れないように m に非偶数の値を使用することが推奨されます。

実装例:

import (
    "fmt"
)

func main() {
    m := uint64(39293)
    s := uint64(75321908)

    transform := func(p uint64) uint64 {
        return p * m + s
    }

    testValues := []uint64{1, 2, 3, 4, 5}
    for _, v := range testValues {
        fmt.Printf("%v -> %v\n", v, transform(v))
    }
}
ログイン後にコピー

この関数は、すべての可能な uint64 入力値に対して、生成された変換された値が値は一意です。

符号付き整数の適応:

符号付き整数 (int64) の場合も、アプローチは同様です。 uint64 と int64 の間で入力と出力を変換して、一意のマッピングを維持します。

func signedTransform(p int64) int64 {
    return int64(transform(uint64(p)))
}
ログイン後にコピー

この決定論的関数を利用することで、開発者は任意の入力整数から一意で再現可能な数値を生成でき、さまざまなアプリケーションにとって貴重なツールになります。 .

以上が別の整数から一意の決定的な整数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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