演算法導論第五章5 3隨機演算法

2021-06-19 21:13:04 字數 2193 閱讀 3775

5.3-1 marceau教授對引理5.5證明過程中使用的迴圈不變式表示異議。他對在第1次迭代之前迴圈不變式是否為真提出質疑。他得理由是人們可以容易地宣城空陣列不包含0排列。因此空陣列包含0排列的概率應該是0.所以在第1次迭代之前迴圈不變式無效。請改寫過程randomize-in-place,使其相關的迴圈不變式在第1次迭代之前對非空陣列扔適用,並為你的過程修改引理5.5的證明。

randomize-in-place(a)

n=a.length

swap a[1]with a[random(1,n)]

for i=2 to n

swap a[i]with a[random(i,n)]

初始化 考慮正好在第1次迴圈迭代之前的情況,此時i=2.由迴圈不變式可知,對每個可能的0排列,子陣列a[1..1]包含這個1排列的概率是(n-2+1)!/n!=1/n.子陣列a[1..1]是乙個非空子陣列,並且1排列中有1個元素a[1]。因而,a[1..1]包含1排列的概率是1/n。在第1次迴圈迭代以前迴圈不變式成立,保持和終止同原文。

5.3-2 kelp教授決定寫乙個過程來隨機產生除恒等排列外的任意排列。他提出了如下過程。

permute-without-identity(a)

n=a.length

for i=1 to n-1

swap a[i]with a[random(i+1,n)]

在進行第i次迭代時,元素a[i]是從元素a[i+1]到a[n]中隨機選取的。少選取了a[i]這1個元素,而在每次random時都少選取乙個元素,所以必然少了一部分元素進行排列,也就是說少了一些排列方式不能包含所有排列方式。所以肯定就不能包含任意排列。

5.3-3假設我們不是將元素a[i]與子陣列a[i..n]中的乙個隨機元素交換,而是將它與陣列任何位置上

的隨機元素交換:

permute-with-all(a)

n=a.length

for i=1 to n

swap a[i]with a[random(1,n)]

這段**會產生乙個均勻隨機排列嗎?為什麼會或為什麼不會?

a[i]從a[random(1,n)]中選擇方式有n種,則for i=1 to n有n^n種方式排列。而對於n個數的全排列有n!,(n^n/n!)表示每種元素平均出現次數,可以看出n=1,2時是整數,從n=3開始(n^n/n!)次數不是整數,也就證明了對於某些n 每種元素平均出現次數並不平均。所以答案是否定的。

5.3-4 armstrong教授建議用下面過程來產生乙個均勻隨機排列。

permute-by-cyclic(a)

n=a.length

let b[1..n]be a new array

offset=random(1,n)

for i=1 to n

dest=i+offset

if dest>n

dest=dest-n

b[dest]=a[i]

return b

請說明每個元素a[i]出現在b中任何特定位置的概率是1/n.然後通過說明排列結果不是均勻隨機排列,表明armstrong教授錯了。

從這個**看出隨機函式是在for i=1 to n迴圈外產生的,所以一旦隨機到乙個數,那麼把其帶入到迴圈裡就是固定不變的數了。那麼產生offset=random(1,n)有n種選擇方式,一種方式對應於乙個固定的1到n的迴圈,所以只有n種排列方式,因為產生均勻排列需要n!個排列方式n!>n,所以排列方式遠遠少於均勻隨機排列需要的排列方式。

因為對於每個b[dest]的下標dest是等可能(1/n概率)的出現1到n中的數,從a[1]到a[n]有等概率(1/n)賦值給b[1]到b[n]中的每個數。

5.3-5 證明:在過程permute-by-sorting的陣列p中,所有元素都唯一的概率至少是1-1/n.p(n^3,n) (p代表對於n^3個數的n排列。),有(n^3)^n個排列方式,所以所有元素唯一的概率是p(n^3,n)/(n^3)^n=(n^3-0)(n^3-1)...(n^3-(n-1))/n^(3n)>=(1-1/n^2)^n根據c.4所給二項式公式:設x=-1/n^2,y=1  (1-1/n^2)^n>=1-1/n (展開二項式前2項便知)得證!

5.3-6 請解釋如何實現演算法permute-by-sorting,以處理兩個或更多優先順序相同的情形。也就是說

即使有兩個或更多優先順序相同,你的演算法也應該產生乙個均勻隨機排列。

那麼我們可以做乙個迴圈,只要與前面任何乙個數相同,那麼當前數就進行隨機選數,一直到各個數都不相同為止。

演算法導論 第五章 隨機演算法

許多隨機演算法通過排列給定輸入陣列來是輸入隨機化。在這裡我們將討論兩種隨機化方法。假設給定乙個陣列a,他包含元素1到n,我們的目標就是構造這個陣列的乙個隨機排列。方法一 為陣列中個每乙個元素a i 賦予乙個隨機優先順序p i 然後根據優先順序對陣列a中的元素進行排序。如初始陣列a 1,2,3,4 且...

演算法導論 第五章 概率分析和隨機演算法

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最壞情形分析 應聘者質量按出現的次序嚴格遞增 如何...