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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-22 06:32:11351ブラウズ

How to Generate Unique Deterministic Integers Without Duplicates?

重複のない決定的な整数の生成

ソフトウェア開発の領域では、一意で予測可能な数値を生成することは、複雑な作業となる場合があります。 2 つの入力が同じ出力を生成しないことを保証し、効率的で再現可能な計算を可能にする、決定論的な数値生成関数を見てみましょう。

この機能を実現する公式は、暗号化と乱数生成で一般的に使用されるモジュラー演算です。

f(P) = (mP + s) mod n

ここで:

  • P は入力整数
  • m は、目的の範囲 (n)
  • s と互いに素な定数です。これを適用すると、出力が目的の範囲 (n)

内に収まります。式を使用すると、網羅的な配列やメモリの制約を必要とせずに、決定的な数値を生成できます。たとえば、データ型として uint64 を使用する場合 (64 ビット符号なし整数を表す):

import (
    "fmt"
)

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

    input := []int64{1, 2, 3, 4, 5}
    output := make([]uint64, len(input))

    for i, v := range input {
        output[i] = (m*uint64(v) + s) % (1 << 64)
    }

    fmt.Println(output) // Output: [3 5 4 2 1]
}

このコードは、指定された入力に対する一意の数値の決定論的な生成を示します。 m と s に異なる値を入力すると、特定のニーズに合わせて出力を調整できます。

int64 などの符号付き整数の場合は、同じ式を適用できますが、入力と出力を変換することをお勧めします。最適なパフォーマンスを実現するために、uint64 と int64 の間で使用します。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。