關於產生無重複隨機數

2021-03-31 11:34:13 字數 664 閱讀 5921

思路:有點類似於選擇排序法,只依靠乙個陣列,產生後陣列的最後n位即為所需的n個隨機數。

例如,從1-10取3個不重複的隨機數,則初始時:

1    2    3    4    5    6    7    8    9    10|   進行第一遍隨機,rander在0-(n-i-1)中選擇,n為10,i為遍數,設得3:

1    2    10  4    5    6    7    8    9|    3     將n-i-1與rander對調。然後進行第二遍。i++了,所以隨機不重複,設得3

1    2    9    4    5    6    7    8|    10  3      第三遍,假設又得3:

1    2    8    4    5    6    7|    9    10  3        結果三個不重複的隨機數就是3,10,9

**:template

class myrandom

void rand(type *source,int length,int randnumber)}};

陣列為source,由呼叫函式提供,陣列長度length,需要得到的不重複數為randnumber個。

寫成模板就可以隨機任何元素了,不一定是數字。

呼叫後,原source的後randnumber位就是隨機得到的數

關於產生不重複隨機數的演算法

來自 方法1 去重法 這是最容易想到的方法,逐個產生這些隨機數,每產生乙個,都跟前面的隨機數比較,如果重複,就重新產生。這種方法效率比較低,且比較次數呈線性增長,越往後次數越多。方法2 篩選法 所謂 篩選法 就是根據要產生隨機數指定的範圍 起始數必須小於終止數 將這些數全部裝入乙個陣列,然後利用系統...

產生隨機數

先說明一下rand,這個函式用來產生偽隨機數。比如,產生1000的兩個隨機數,產生的兩個一般上是不同的,但如果要產生80個100以內的隨機數,僅用rand函式就不夠。因為產生80個100以內的隨機數,至少有兩個數相等的概率太大了 srand函式,並不能使產生的隨機數完全不同。你可以執行以下這串 in...

隨機數產生

c c 中取隨機數 在計算機中並沒有乙個真正的隨機數發生器,但是可以做到使產生的數字重複率很低,這樣看起來好象是真正的隨機數,實現這一功能的程式叫偽隨機數發生器。有關如何產生隨機數的理論有許多,如果要詳細地討論,需要厚厚的一本書的篇幅。不管用什麼方法實現隨機數發生器,都必須給它提供乙個名為 種子 的...