#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下標...