隨機序列常用演算法

2021-08-19 04:02:39 字數 1626 閱讀 6278

#include 

#include

#include

#include

#include

#include

#include

using

namespace

std;

/*author:marco

date:2018/4/21

aim:序列隨機化的常用兩種演算法

*//*

1.什麼是隨機化的序列

---得到該序列的概率是1/n!(錯誤的理解是該序列每個元素出現的概率是1/n)

*/void print_vector(const

vector

& vec)

cout

<< endl;

}int partition(const

int& lo, const

int& hi, vector

& vec, vector

& key)

int temp = key[j];

key[j] = key[lo];

key[lo] = temp;

temp = vec[j];

vec[j] = vec[lo];

vec[lo] = temp;

return j;

}void quick_sort(const

int& lo, const

int& hi, vector

& vec, vector

& key)

int j = partition(lo, hi, vec, key);

quick_sort(lo,j - 1, vec, key);

quick_sort(j + 1, hi, vec, key);

}void quick_sort(vector

& vec, vector

key)

//main 1

/*因為priority序列是均勻分布的,即vec的第乙個元素優先順序最小的概率是1/n(n為序列大小)

以此類推可得獲得vec序列的情況為1/n * 1/(n-1)....=1/n!滿足隨機序列情況

*/void shuffle_vector1(vector

& vec)

quick_sort(vec, priority);

}//main 2

/*我們知道對於乙個n個元素的序列的k排列(k<=n)有n!/(n - k)!種

第二種演算法每次迭代前vec包含這個i - 1排列的概率是 (n - i + 1)! / n!(序列首元素假定從1開始)

迭代到序列末可得到包含n排列的概率是1/n!

*/void shuffle_vector2(vector

& vec)

}int main() ;

print_vector(vec);

shuffle_vector1(vec);

print_vector(vec);

shuffle_vector2(vec);

print_vector(vec);

system("pause");

return

0;}

隨機序列產生演算法

題目 已經提供乙個int rand int n 的隨機數生成函式用來生成 0,n 的隨機數,求編寫演算法生成1至n的隨機序列,要求該序列包含不重複的1 n數字。include include include using namespace std 首先,建立乙個長度為n的陣列array,初始值是0 ...

Android Java隨機序列

public class nrandom random random new random for int i 0 i no i random null return sequence param array 被檢索的資料來源 param key 檢索的資料 return public static...

隨機序列問題

題目 假設有乙個陣列,裡面有10個元素 int a 10 請寫乙個演算法,得到a陣列的乙個隨機排列。要求時間複雜度盡量小,可以使用random函式。例如輸出的隨機序列可以是 3 6 2 4 5 1 9 8 0 思路 1.將最大值max設定為9,在0 max之間產生乙個隨機數 2.將陣列a的max下標...