如何建立乙個隨機數組(元素是1到N 1,不重複)

2021-07-04 23:03:58 字數 795 閱讀 3671

摘要###(1)建立乙個隨機數組a[n],其元素分布為1到n-1,且不能重複.

(2)有幾種演算法:

用乙個附加陣列used[n],每生生成乙個a[i],令used[i] = 1;在餘下的計算中,每次都測試 if used[i] == 1,以避免重複.

直接生成1-n-1,然後隨機交換a[i],a[k],k通過i隨機生成。

(3)分析演算法:對應,演算法1花費的時間界為∑i

=0(1

/pi)

,其中pi = i/1(成功的概率),o(n^2)量級.

演算法2進行了o(n)次,效率明顯高.

#include "stdafx.h"

#include "stdlib.h"

#include "time.h"

#define n 500000

void swap(int

*a,int

*b)int _tmain(int argc, _tchar* argv)

; start = clock();

for (int i = 0;i<= n-1;i++)

a[i] = i+1;

for (int i = 0;i<=n-1;i++)

finish = clock();

printf("the process use %f seconds", (double)(finish - start)/clocks_per_sec);

system("pause");

return

0;}

關於生成乙個隨機數組

生成隨機數的最基本 是 random rand new random int i rand.next 0,100 next函式的引數可以為空,也可以是乙個值的範圍。像這種方法通常生成乙個隨機數不會有問題,但是如果要生成乙個隨機數組的話就不見得好用了,比如 listlstrnd new list ra...

關於生成乙個隨機數組

生成隨機數的最基本 是 random rand new random int i rand.next 0,100 next函式的引數可以為空,也可以是乙個值的範圍。像這種方法通常生成乙個隨機數不會有問題,但是如果要生成乙個隨機數組的話就不見得好用了,比如 listlstrnd new list ra...

如何產生乙個隨機數

大家可能很多次討論過隨機數在計算機中怎樣產生的問題,在這篇文章中,我會對這個問題進行更深入的 闡述我對這個問題的理解。首先需要宣告的是,計算機不會產生絕對隨機的隨機數,計算機只能產生 偽隨機數 其實絕對隨機的隨機數只是一種理想的隨機數,即使計算機怎樣發展,它也不會產生一串絕對隨機的隨機數。計算機只能...