我們知道隨機函式形成的隨機數組都是有週期的。這是因為生成的陣列來自同樣的計算公式,種子的值域是有限的,所以函式值也是有限的。
要建造沒有週期的隨機數組是很容易的,例如你要建造乙個長度為 n的陣列,可以找乙個週期大於 n各方面效能都不錯的隨機函式,讓隨機函式產生 n個數,組成陣列即可。
有時我們不願意讓別人知道陣列是如何產生的。而上面的方式,如果知道隨機函式、知道陣列的結構就可以通過試驗建造相同的陣列,從而完全掌握了你的陣列,這是你不希望的。
你可以這樣:另找乙個隨機函式對你的陣列進行隨機排序,而隨機函式的種子來自真隨機數,還不放心可以用多個隨機函式多做幾次排序,這樣要想建造同樣的陣列成功的概率趨於零。
你也可以憑空建造乙個陣列,以位元組陣列為例,你先用迴圈做乙個順序排列的陣列,也就是0,1,..,254,255,0,1,...254,255,...共有 n個元素,然後用隨機函式對其進行隨機排序,也可以建造沒有週期的陣列。
實際上隨機數組的真偽是相對概念,即便是來自物理現象的真隨機數組一經公布也不再是真隨機數組了,而來自隨機函式的陣列你不知道其來龍去脈對你來說也是真隨機數組。
C 生成無重複隨機數組
c 中生成隨機數可以使用rand 函式,可是如果想要生成無重複的隨機數組,單單使用這個就不行了,因為即使迴圈生成隨機數,賦值給陣列,也會有重複的,所以要使用以下的 include include include using namespace std void randperm int num ra...
用隨機函式生成無週期隨機序列(陣列)
隨機函式生成的隨機數是有週期 有規律的 源於同樣的算式 用隨機函式輔助生成沒有週期 沒有規律的 或者很難找到規律 序列值是很有意義的,密碼學需要這樣的序列 陣列 方法很簡單,選擇乙個效能優良的隨機函式,所謂效能優良是指函式生成的陣列元素分布均勻,能通過各項隨機數指標的檢測。例如我們需要n個元素的隨機...
用偽隨機數建造真的
應用密碼學 作者bruce schneier 對隨機序列的定義是 1 看起來像隨機數 2 不可 3 不可重複產生 隨機數由性質相同的數組成,單個或幾個數不能說是隨機數。所以一般又叫隨機數組。它們有一些有趣的性質 隨機數加 減 乘常數後還是隨機數,自行相加 相減 相乘後還是隨機數,對隨機數組作有規律的...