第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

從另一個(gè)沒有重復(fù)的確定性 int 生成

從另一個(gè)沒有重復(fù)的確定性 int 生成

Go
慕絲7291255 2022-12-13 10:58:49
我希望創(chuàng)建一個(gè)確定性數(shù)字生成函數(shù),其中輸入數(shù)字將始終生成相同的數(shù)字,但沒有兩個(gè)數(shù)字最終會(huì)生成相同的結(jié)果。例如:1 -> 32 -> 53 -> 44 -> 25 -> 1但是,我需要它適用于可以由特定數(shù)據(jù)類型(例如 int64)表示的所有數(shù)字。這感覺像是應(yīng)該非常簡單或完全不可能的事情。是否有一些隨機(jī)數(shù)生成方案可以保證這種分布,而我不必創(chuàng)建一個(gè)包含所有可能數(shù)字的數(shù)組、隨機(jī)排序,然后使用索引(同時(shí)讓我耗盡內(nèi)存)?
查看完整描述

2 回答

?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊

您需要的轉(zhuǎn)換公式是:


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


// n = range - so for uint64 2^64

// s < range i.e. < 2^64

// m = must be coprime with n

這是仿射密碼中使用的模塊化算法。

確保mod它在所需范圍內(nèi),s是一個(gè)簡單的移位并且m應(yīng)該與互質(zhì)n。Coprime 只是意味著n并且m不應(yīng)該共享任何共同因素。因?yàn)?code>n是 2^64 它唯一的因素是數(shù)字2- 所以m基本上不應(yīng)該是偶數(shù)(即不能被 2 整除):

所以對(duì)于uint64范圍:

這可能看起來很神奇,但您可以說服自己它適用于uint16

https://go.dev/play/p/EKB6SH3-SGu

(因?yàn)?code>uint64需要相當(dāng)多的資源才能運(yùn)行 :-)


更新

對(duì)于帶符號(hào)的數(shù)字(即int64),邏輯沒有什么不同。因?yàn)槲覀冎牢覀冇幸粋€(gè)獨(dú)特的一對(duì)一映射,uint64其中一種方法就是將輸入和輸出從 轉(zhuǎn)換為uint64int64反之亦然:

// original unsigned version

func transform(p uint64) uint64 {

    return m*p + s

}


func signedTransform(p int64) int64 {

    return int64(transform(uint64(p)))

}

又是一個(gè)int16證明沒有碰撞的例子:


https://go.dev/play/p/Fkw5FLMK0Fu


查看完整回答
反對(duì) 回復(fù) 2022-12-13
?
鴻蒙傳說

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

要添加到colm.anseo答案,這種映射也稱為Linear congruential generator。

n+1 = (aX n + c) mod m

當(dāng) c ≠ 0 時(shí),對(duì)于所有種子值,正確選擇的參數(shù)允許一個(gè)等于 m 的周期。當(dāng)且僅當(dāng):

  • m和c互質(zhì),

  • a-1 可被 m 的所有質(zhì)因數(shù)整除,

  • 如果 m 可以被 4 整除,則 a-1 可以被 4 整除。

這三個(gè)要求被稱為 Hull-Dobell 定理。

對(duì)于 64 位 LCG,Knuth 的 a=6364136223846793005 和 c=1442695040888963407 看起來不錯(cuò)。

請(qǐng)注意,LCG 映射是一對(duì)一的,它將整個(gè) [0...2 64 -1] 區(qū)域映射到自身。如果你愿意,你可以反轉(zhuǎn)它。作為RNG,它具有獨(dú)特的跳躍能力。


查看完整回答
反對(duì) 回復(fù) 2022-12-13
  • 2 回答
  • 0 關(guān)注
  • 103 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)