隨機數表

用隨機號碼錶法抽取樣本的數表

隨機數表也稱亂數表,是由隨機生成的從0到9十個數字所組成的數表,每個數字在表中出現的次數是大致相同的,它們出現在表上的順序是隨機的。

隨機數表是統計工作者用計算機生成的隨機數組成,並保證表中每個位置上出現哪一個數字是等概率的,利用隨機數表抽取樣本保證了各個個體被抽取的概率相等。

簡介


隨機數字錶,是由 0~9 的數字隨機排列(沒有任何規律的)的表格,表中有各自獨立的數字2500個,從左到右橫排為行,從上至下豎排為列。表格形式多種,用法也很多,使用時可根據研究對象總體所含的個體數來確定使用幾位隨機數字,也就是可以根據需要把它當成任何數字來使用。而隨機數字錶法,是用隨機數字錶代替簽號或簽筒的一種隨機取樣的方法。其優點有:一是簡單可行,抽樣前只需對研究對象進行順序編號,然後根據隨機抽出的編號與研究對象對號入座即可;二是能保證符合抽樣的“隨機化原則(所謂“隨機化”原則,是指在抽樣時使總體的每一個個體都有同等的機會被獨立地抽到樣本中來,即“機會均等”的原則。抽中與否全都是偶然的,使抽取的樣本更具代表性。

內容


034743738636964736614698637162
977424676242811457204253323732
167602276656502671073290797853
125685992696966827310503729315
555956356438548246223162430990
162277943949544354821737932378
844217533157245506887704744767
630163785916955567199810507175
332112342978645607825242074428
576086324409472796544917460962
181807924644171658097983861962
266238977584160744998311463224
234240547482977777810745321408
623628199550922611970056763138
378594351283395008304234079688
702917121340332038261389510374
566218373596835087759712259347
994957227788429545721664361600
160815047233271434094559346849
311693324350278987192015370049
(以上只是部分)

意義


真正的隨機數是使用物理現象產生的:比如擲錢幣、骰子、轉輪、使用電子元件的噪音、核裂變等等。這樣的隨機數發生器叫做物理性隨機數發生器,它們的缺點是技術要求比較高。
隨機數表
隨機數表
而通常我們使用的隨機數表是使用偽隨機數,這些數列是“似乎”隨機的數,實際上它們是通過一個固定的、可以重複的計算方法產生的。計算機或計算器產生的隨機數有很長的周期性。它們不真正地隨機,因為它們實際上是可以計算出來的,但是它們具有類似於隨機數的統計特徵。
採用隨機號碼錶法抽取樣本,完全排除主觀挑選樣本的可能性,使抽樣調查有較強的科學性。

步驟


1、統一編號。即將總體中的所有研究對象進行統一編號,做成簽。如果研究對象是10以內的,只取1位數,則編號是 1~9;如果研究對象在 1~99 之間的,取 2 位數,則編號是 01~99;如果研究對象在 1~999 之間的,取 3 位數,則編號是 001~999;其他依次類推。然後充分混合,目的是使各樣本編號均勻分佈,符合“機會均等 的原則。
2、確定行名。研究人員根據自己的需要或意願,在表上任選一行數字,由該行數字決定起點行的數。如選擇25 行,即從上往下第 25 行為起點行。若選擇的數大於 50,則用該數減去 50,將所得餘數為起點行。若選擇0 或 00 行,則以第 50 行為起點行。
3、確定列名。列名的確定方法與行名的確定方法相同。
4、錄取號碼。行名和列名決定后,就可以所選擇的起始行數和起始列數的交叉點處的數為起始點,然後,按一定順序方向(如自左向右或自右向左,從上往下或由下而上)進行依次錄取號碼,遇到大於總體的號碼或重複的號碼,應該捨去不要,直至錄取到所抽取的樣本數滿額為止。用上述方法所錄取到的號碼則是被隨機抽中的樣本。

用途


比如,對銀行來說,銀行的ID和密碼非常脆弱。如果有隨機數表,就可以防備此類事件。隨機數表是指為每個客戶指定各不相同的數字列表,申請時將該隨機數表分配給客戶,而不是按照一定的規律給出,這就安全很多。
再比如,要考察某公司的牛奶產品質量,想從800袋牛奶中抽取60袋,就可以在隨機數表中選中一數,並用向上、下、左、右不同的讀法組成60個數,並按牛奶的標號進行檢測,雖然麻煩,但很常用。
詳細地舉一例:某企業要調查消費者對某產品的需求量,要從95戶居民家庭中抽選10戶居民碼錶法抽選樣本。具體步驟如下:第一步:將95戶居民家庭編號,每一戶家庭一個編號,即01~95。(每戶居民編號為2數)
第二步:在上面的表中,隨機確定抽樣的起點和抽樣的順序。假定從第一行,第5列開始抽,抽樣順序從左往右抽。(橫的數列稱“行”,縱的數列稱為“列”)
第三步:依次抽出號碼分別是:86、36、96、47、36、61、46、98、63、71,共10個號碼。由於96、98兩個號碼不在總體編號範圍內,應排除在外。再補充兩個號碼:62、74。
由此產生10個樣本單位號碼為:86、36、47、61、46、63、71、62、74、24。
編號為這些號碼的居民家庭就是抽樣調查的對象。
實際生活中,這些隨機數表起著很大的作用,所以很多人會專門去尋找隨機數表產生器。

程序


在C語言中,rand()函數可以用來產生隨機數,但是這不是真正意義上的隨機數,是一個偽隨機數,是根據一個數,我們可以稱它為種子,為基準以某個遞推公式推算出來的一係數,當這系列數很大的時候,就符合正態分佈,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機后,這個種子的值是定了的,除非你破壞了系統,為了改變這個種子的值,C提供了srand()函數,它的原形是void srand( int a)。初始化隨機產生器即rand()函數的初始值,即使把種子的值改成a;從這你可以看到通過srand()函數,我們是可以產生可以預見的隨機序列。那我們如何才能產生不可預見的隨機序列呢?我們可能常常需要這樣的隨機序列。利用srand((unsign)(time(NULL))是一種方法,因為每一次運行程序的時間是不同的。在C語言里所提供的隨機數發生器的用法:現在的C編譯器都提供了一個基於ANSI標準的偽隨機數發生器函數,用來生成隨機數。它們就是rand()和srand()函數。
下面是0~32767之間的隨機數程序:
#include
#include <time.h> //使用當前時鐘做種子
void main( void )
{int i;
srand( (unsigned)time( NULL ) ); //初始化隨機數
for( i = 0; i <10;i++ ) //列印出10個隨機數
printf( " %d\n", rand() );
}
根據上面的程序可以很容易得到0~1之間的隨機數:
#include
#include
#include
main( )
{int i;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
printf( "%5.2f\n", rand()/32767.0);
}
而產生1~100之間的隨機數可以這樣寫:
#include
#include
#include
main( )
{int i;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
printf( "%d\n", rand()%100+1);
}
__________________________________________________
include
#include
#include
void main()
{
int i;
srand((unsigned)time(NULL));
i = rand() % 100;
}
這樣產生的隨機數就是0-99之間的,
這二個函數的工作過程如下:
1) 首先給srand()提供一個種子,它是一個unsigned int類型,其取值範圍從0~65535;
2) 然後調用rand(),它會根據提供給srand()的種子值返回一個隨機數(在0到32767之間)
3) 根據需要多次調用rand(),從而不間斷地得到新的隨機數;
4) 無論什麼時候,都可以給srand()提供一個新的種子,從而進一步“隨機化”rand()的輸出結果。
#include
#include
main
{
int i;
srand(time(0)); //初始化隨機種子
i = rand(); //產生隨機數
}
首先,加一個"#include
然後設一個變數,如j,j=rand(),就可以給j賦一個1~32767的隨機數,如果要獲得一個隨機函數的十位(其它類似),只需令j=j/10就行. 添加頭文件 #include 然後在文件中添加 srand((unsigned)time(NULL));
srand()是用來初始化隨機種子數的,因為rand的內部實現是用線性同餘法做的,它不是真的隨機數,只不過是因為其周期特別長,所以有一定的範圍里可看成是隨機的. 上面是有個隨機種子的說明及方法,為了避免重複。然後再 用 隨機函數,rand() 就行了。頭文件是stdlib.h
random() 產生隨機數為 0或1
random(n) 產生隨機數為 0到n之間的一個隨機數
rand() 產生 0到32768之間的一個隨機數