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