随机抽样java_实现随机抽样【随机数生成问题】
1、rand()
定義:
int rand(void);
返回值:返回一個偽隨機數,該數的范圍是:[0,RAND_MAX)
2、srand()
定義:
void srand(unsigned intseed);
返回值:該函數是隨機數發生器的初始化函數;如果使用相同的種子給rand用,那么rand()會產生相同的偽隨機數。常用的用法如下:
(1) srand((unsigned)time(&t));(2) srand((unsigned)time(NULL));這兩個都是用當前時間去初始化種子;
(3) srand((int)getpid());使用程序的PID來作種子,那么在這個程序運行時種子固定那個。
3、實戰經驗
(1)使用math.h中的函數floor時報如下錯誤,經查是沒有指定鏈接庫。使用gcc -o randint randint.c -lm即可
(2)采用下面這個例子,生成隨機數,如果個數多了,偶爾會有重復的值
#include
#include
#include
#define NUMBER_MAX 100
int main(int argc,char* argv[])
{
int num[NUMBER_MAX];
int i;
FILE *rand_num_file = fopen("rand_num_file.txt","w+");
srand((unsigned)time(NULL));
for( i=0; i<100; i++)
{
num[i] = rand()%900 + 100;
fprintf(rand_num_file,"%d\n",num[i]);
}
return 0;
}
(3)Makefile的學習刻不容緩,十一之后來了主攻《git權威指南》和《shell編程學習指南》
(4)按照網上的一種解法,實現randint和bigrand:用rand實現bigrand和randint
仍然會有重復的數值,那么我們怎么解決這個問題呢?我們要的是100~999之間的任意100個隨機數,要求不能重復!
#include
#include
#include
#include
#define NUMBER_MAX 100
int randint(int l, int u);
int main(int argc,char* argv[])
{
int num[NUMBER_MAX];
int i;
FILE *rand_num_file = fopen("rand_num_file.txt","w+");
srand((unsigned)time(NULL));
for( i=0; i<100; i++)
{
//num[i] = rand()%900 + 100;//生成[100,999)之間的隨機數
num[i] = randint(100,1000);
fprintf(rand_num_file,"%d\n",num[i]);
}
return 0;
}
//實現randint(l,u),返回[l,u]范圍內的一個隨機整數
int randint(int l,int u)
{
int temp;
temp = floor(l + (1.0*rand()/RAND_MAX)*(u - l + 1 ));
return temp;
}
補上:
今天看到用java語言生成隨機數,有這么一個想法,也能滿足我們的要求:生成[n,m]之間的k個不重復的隨機數。參見:點擊打開鏈接
總結
以上是生活随笔為你收集整理的随机抽样java_实现随机抽样【随机数生成问题】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 界面优美的linux,Ubuntu 11
- 下一篇: c语言一串大写字母转小写,C语言的基础函