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

2021-06-28 02:16:55 字數 821 閱讀 4406

來自:

方法1:去重法

這是最容易想到的方法,逐個產生這些隨機數,每產生乙個,都跟前面的隨機數比較,如果重複,就重新產生。

這種方法效率比較低,且比較次數呈線性增長,越往後次數越多。

方法2:篩選法

所謂「篩選法」就是根據要產生隨機數指定的範圍(起始數必須小於終止數),將這些數全部裝入乙個陣列,然後利用系統隨機函式(比如 random )隨機產生乙個下標,將這個下標對應的數值返回並刪除對應的這個數,直到這個陣列為空。 

(c#)  

public sealed class turerandom  

public int getnum()  

}  }  方法3:

int a[100]=;

int i, m;

for(i=1; i<=99; ++i)

這段**也是隨機產生位置,但它預先把整個陣列初始化為0,然後隨機產生其中乙個位置,如果該元素

值為0,表示這個位置還沒有被使用過,就把i賦予它;否則,就重新隨機產生另乙個位置,直到整個陣列

被填滿。

方法4:

int a[100];

for(i=0; i<=99; ++i) a[i]=i;

for(i=99; i>=1; --i) swap(a[i], a[rand()%i]);

上面這段**只需要遍歷一次就可以產生這100個不重複的隨機數,它是如何做到的呢?首先第二行按順

序用0到99填滿整個陣列;第三行,是隨機產生從0到m-2個陣列下標,把這個下標的元素值跟m-1下標的元

素值交換,一直進行到下標為1的元素。因此它只需要遍歷一次就能產生全部的隨機數。

高效產生不重複的隨機數

purpose 生成隨機的不重複的測試資料 1000w資料量,要保證生成不重複的資料量,一般的程式沒有做到。但,本程式做到了。include include include include include include define size 10000000 int num size void ...

C 產生不重複的隨機數

方法1 思想是用乙個陣列來儲存索引號,先隨機生成乙個陣列位置,然後把這個位置的索引號取出來,並把最後乙個索引號複製到當前的陣列位置,然後使隨機數的上限減一,具體如 先把這100個數放在乙個陣列內,每次隨機取乙個位置 第一次是1 100,第二次是1 99,將該位置的數用最後的數代替。int index...

產生n個不重複的隨機數

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