隨機系列生成演算法

2021-06-17 17:24:48 字數 1090 閱讀 9246

給定乙個正整數n,需要輸出乙個長度為n的陣列,陣列元素是隨機數,範圍為0 – n-1,且元素不能重複。比如 n = 3 時,需要獲取乙個長度為3的陣列,元素範圍為0-2。

首先,讓我們先構造如下函式:

[cpp]view plain

copy

//隨機數生成函式,生成[a,b]之間的乙個隨機數字

//其中0<=aint random(int a,int b)    

先給序列a[0...n-1]賦值,a[i]=i;(0=偽**如下:

[cpp]view plain

copy

n=length[a]  

for(i=0;ip[i]=random(0,n^3);  

sort a,using p as sort keys  

分析:顯然解法一無法準確的確保p中元素無重複,且當n較大時,n的三次方會很大,如當n=10000時,n的三次方已經超出了無符號長整形的表示範圍。該演算法時間複雜度依賴排序時間,且這個排序不好實現。總之,這不是乙個很好的隨機序列生成演算法。

先給序列a[0...n-1]賦值,a[i]=i;(0=然後原地排列給定序列。**如下:

[cpp]view plain

copy

//產生隨機序列

void randomsequence1(int *a,int n)  

}  

分析:這個演算法的時間複雜度為o(n)。

這是在網上看的一種高效隨機生成序列演算法,詳細請看原文:

這裡給出自己寫的**:

[cpp]view plain

copy

//產生隨機序列

void randomsequence2(int *a,int n)  

}  

參考書籍:《演算法導論》     解法三原文:

隨機數生成演算法

看到一些介紹隨機數生成演算法的文章,收集下來,有空深入了解下。c語言中偽隨機數生成演算法實際上是採用了 線性同餘法 具體的計算如下 xi xi 1 a c mod m 其中a,c,m都是常數 一般會取質數 當c 0時,叫做乘同餘法。srand 函式置的seed實際上會作為x0被代入上式中,然後每次呼...

隨機數生成演算法

這兩天沒事,就寫了寫數學課上老師說的那個 蒲豐投針實驗 的程式。接觸到了一些隨機數生成方面的東西,寫出來跟大家分享一下。對於計算機生成隨機數這個東西,以前有過一些淺顯的認識。只知道計算機不能生成真正的隨機數,只能用一定的方法來模擬隨機數,叫做偽隨機數。比如c語言裡面的rand 函式,就是乙個偽隨機數...

隨機迷宮生成演算法整理分析

蒐集整理了一些遊戲迷宮生成的演算法與實現 前段時間學校遊戲開發課大作業,做了乙個roguelike的恐怖遊戲。蒐集整理了一些迷宮生成的演算法。當初也受了indienova上一些文章的啟發。現在在此把學到的一些東西理一理分享出來。第一次寫這種東西,感覺有點囉嗦,還請大家不要介意,也可以直接看專案位址 ...