首頁 >後端開發 >Golang >如何從另一個整數產生唯一的確定性整數?

如何從另一個整數產生唯一的確定性整數?

DDD
DDD原創
2024-11-21 06:15:09999瀏覽

How to Generate Unique Deterministic Integers from Another Integer?

從另一個整數產生唯一的確定性整數

在創建確定性數字產生函數的過程中,我們的目標是建構一個函數,其中每個輸入數字產生唯一對應的沒有重複的數字。

模算術解決方案:

巧妙的解決方案在於模運算,特別是仿射密碼。它採用轉換公式:

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

其中:

  • n 表示允許的整數值的範圍(例如,uint64 為2^64)
  • s 是小於範圍
  • 的任意平移值,m 是互質(沒有公因數) n

對於uint64 範圍,建議m 使用非偶數值以避免被2 整除。

範例實作:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn