許多隨機演算法通過排列給定輸入陣列來是輸入隨機化。在這裡我們將討論兩種隨機化方法。假設給定乙個陣列a,他包含元素1到n,我們的目標就是構造這個陣列的乙個隨機排列。
方法一:
為陣列中個每乙個元素a[i]賦予乙個隨機優先順序p[i],然後根據優先順序對陣列a中的元素進行排序。如初始陣列a=<1,2,3,4>,且隨機的優先順序p=<36,3,97,19>,將得出數列b=<2,4,1,3>,因為第2個優先順序最小,接著是第4個,...這個過程稱成為permute-by-sorting:
注意:
1)**第4行選取乙個在1到n^3之間的隨機數,使用範圍1到n^3,是為了讓p中的所有優先順序盡可能唯一。
2)假設所有的優先順序都是唯一,這個演算法可以產生輸入的均勻隨機排列。
方法二:
產生隨機排列的乙個更好的方法是原地排列給定的數列。程式randomize-in-place在o(n)時間內完成。在第i次迭代時,元素a[i]是從元素a[i]到a[n]中隨機選取的。第i次迭代後,a[i]保持不變。偽**如下:
該演算法也可以求出乙個均勻隨機排列。
兩種方法完整**如下:
#include#include#include#includeusing namespace std;
void swap(int &a,int &b)
void rand_inplace(int a,int n)
{ int i, j;
srand((unsigned)time(null));
for(i=0;i
演算法導論第五章5 3隨機演算法
5.3 1 marceau教授對引理5.5證明過程中使用的迴圈不變式表示異議。他對在第1次迭代之前迴圈不變式是否為真提出質疑。他得理由是人們可以容易地宣城空陣列不包含0排列。因此空陣列包含0排列的概率應該是0.所以在第1次迭代之前迴圈不變式無效。請改寫過程randomize in place,使其相...
演算法導論 第五章 概率分析和隨機演算法
5.1 僱傭問題 僱傭問題類似於在一組隨機排序的陣列中查詢最大值的問題,對於這類問題無法確切的得出其執行效率。但可以根據輸入的概率分布得到平均情況執行時間。對於乙個演算法行為不僅由輸入決定,而且由隨機數生成器產生的數值決定,則稱演算法是隨機的,其執行時間稱為期望執行時間。5.2指示器隨機變數 由指示...
第五章 概率分析和隨機演算法
hire assistant n best 0 for i 0 to n interview candidate i if candidate is better than candidate best best i hire candidate i最壞情形分析 應聘者質量按出現的次序嚴格遞增 如何...