随机系列生成算法(随机数生成)
1、問題描述
????????給定一個正整數(shù)n,需要輸出一個長度為n的數(shù)組,數(shù)組元素是隨機(jī)數(shù),范圍為0 – n-1,且元素不能重復(fù)。比如 n = 3 時,需要獲取一個長度為3的數(shù)組,元素范圍為0-2。
2、準(zhǔn)備
??????????首先,讓我們先構(gòu)造如下函數(shù):
[cpp]?view plaincopy
3、解法一
??????????先給序列A[0...n-1]賦值,A[i]=i;(0=<i<n)。然后為每個元素A[i]賦一個優(yōu)先級P[i],然后依據(jù)優(yōu)先級對序列A進(jìn)行排序。這里要保證序列P中沒有相同的元素,所以P[i]的取值范圍可以選[0,(n-1)^3]。這樣就盡可能保證P中元素?zé)o重復(fù)。偽代碼如下:
[cpp]?view plaincopy????????? 分析:顯然解法一無法準(zhǔn)確的確保P中元素?zé)o重復(fù),且當(dāng)n較大時,n的三次方會很大,如當(dāng)n=10000時,n的三次方已經(jīng)超出了無符號長整形的表示范圍。該算法時間復(fù)雜度依賴排序時間,且這個排序不好實現(xiàn)。總之,這不是一個很好的隨機(jī)序列生成算法。
4、解法二
????????先給序列A[0...n-1]賦值,A[i]=i;(0=<i<n)。然后原地排列給定序列。代碼如下:
[cpp]?view plaincopy?????????分析:這個算法的時間復(fù)雜度為o(n)。
5、解法三
????????這是在網(wǎng)上看的一種高效隨機(jī)生成序列算法,詳細(xì)請看原文:http://www.cnblogs.com/eaglet/archive/2011/01/17/1937083.html
????????這里給出自己寫的代碼:
[cpp]?view plaincopy6、附錄
??????參考書籍:《算法導(dǎo)論》?????解法三原文:http://www.cnblogs.com/eaglet/archive/2011/01/17/1937083.html
轉(zhuǎn)載于:https://www.cnblogs.com/tham/p/6827184.html
總結(jié)
以上是生活随笔為你收集整理的随机系列生成算法(随机数生成)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教学用计算机房活荷载,计算机机房承重标准
- 下一篇: 使用Reflector.FileDisa