ソフトウェア開発の領域では、一意で予測可能な数値を生成することは、複雑な作業となる場合があります。 2 つの入力が同じ出力を生成しないことを保証し、効率的で再現可能な計算を可能にする、決定論的な数値生成関数を見てみましょう。
この機能を実現する公式は、暗号化と乱数生成で一般的に使用されるモジュラー演算です。
f(P) = (mP + s) mod 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 サイトの他の関連記事を参照してください。