C++實現(xiàn)無重復(fù)隨機數(shù)的高效算法

字號:


    函數(shù)permutation用于產(chǎn)生從0到n-1的無重復(fù)隨機數(shù),并將結(jié)果保存到數(shù)組z_array中。程序中使用buffer作為已使用隨機數(shù)的記錄數(shù)組,假定下一次產(chǎn)生一個隨機數(shù)的(產(chǎn)生隨機數(shù)的范圍在不斷縮?。簉and()%(n-i))為z,遍歷buffer,統(tǒng)計不大于該隨機數(shù)且已使用過的隨機數(shù)的個數(shù),記為k,將z+k添加進z_array中,作為產(chǎn)生的下一個隨機數(shù),如此重復(fù)。這樣便生成了從0到n-1的無重復(fù)的隨機數(shù)。
    void permutation(int n, int *z_array)
    {
    int i, j, k, z;
    int buffer[N];
    /* 初始化數(shù)組 */
    for (i=0; i