5.1 僱用問題
- 平均運行時間:所有可能輸入分佈取平均值的運行時間
- 期望時間:隨機算法的運行時間
- 當概率分佈是在算法的輸入上時,討論平均運行時間,當算法本身做出隨機選擇時,討論期望運行時間
5.2 指示器隨機變量
個人感覺與獨立重複試驗類似
核心:將問題分解爲子問題
應聘者問題的指示器隨機變量解法
E[X]=∑x=1nxP{X=x}=∑i=1nE[xi]=∑i=1n1/i=lnn+O(1) 關於例題
帽子覈對問題
對於每個顧客,拿到自己的帽子的概率爲1/n ,故其數學期望爲∑ni=11/n=1 逆序對問題
對於每一組數的組合,都有一半的概率爲逆序,故其數學期望爲C2n⋅12=n(n−1)/4
5.3 隨機算法
含義
讓分佈固定,而通過特定算法實現隨機化。隨機排列數組
PERMUTE-BY-SROTING
- 即爲每一個數組元素隨機分配一個rank值,並以rank重新排列這些元素。
- 通過條件概率可證明每種分配的可能均爲1/n!
- 通過5.3-4可知,對於每個元素A[i],排在任一位置的概率均爲1/n,並非是證明均勻隨機排列的充分條件
RANDOMIZE-IN-PLACE
- 即對於每個元素,都與它後面(包含自身)的元素相交換。
證明
初始化:初始化賦值i=2(涉及討論i=1的空數組,故先顯式交換一次),即對於每個1排列,長度爲1的子數組包含這種排列的概率爲
(n−1)!/n!=1/n ,第一次循環迭代前循環不變式成立。保持:假設i次迭代前每種(i-1)排列出現概率爲
(n−i+1)!/n! ,則第i次迭代後,概率爲1n−i+1⋅(n−i+1)!n! 終止:終止時,i=n+1,子數組任一排列概率爲
1/n!
5.4 特徵序列
問題:拋一枚標準硬幣n次,求最長連續正面的數學期望
思路: 類似夾逼準則
證明過程:
O(lgn)
設連續擲硬幣k次,k=2lgn。
起始於某一位置,長度**大於等於**k的序列至多有n-k+1個,故開始於任一位置的概率總和小於等於
∑i=1n−k+11/2k≤∑i=1n−k+11/n2<∑i=1n1/n2=1/n 由定義知
E[L]=∑j=0njP{Lj}=∑j=0k−1jP{Lj}+∑j=knjP{Lj}
其中j爲長度的具體值。顯然,當j較大時
P{Lj} 較小,當P{Lj} 較大時j較小,故
E[L]<∑j=0k−1kP{Lj}+∑j=knnP{Lj}<k∑j=0k−1P{Lj}+1
又因爲∑k−1j=0P{Lj}<1 ,原式小於O(k)=O(lgn)
Ω(lgn)
把n次投擲劃分爲n/s組,每組擲s次,s取lgn/2。
顯然任一一組,結果爲同一面(假設爲正面)概率爲
1/2s=1/n√ 故每組都不是同一面概率爲
(1−1/n√)n/s−1≤e(n/s−1)/n√=O(e−lgn=O(1/n)) 對j值較小的部分,其值忽略不計,因此
∑j=0njP{Lj}≥∑j=snjP{Lj}≥s∑j=snP{Lj}≥s(1−O(n))=Ω(lgn)
結論:特徵序列長爲lgn。
指示器隨機變量的近似結果:
n−k+12k ,且帶入k=lgn時值近似符合要求。
5.5 在線僱傭問題
問題:只僱傭一次應聘者,並且每次應聘必須決定是否僱傭這個人。
實現思路:選擇一個正整數k,面試並拒絕前k個應聘者,並僱傭後面第一個分數比前k個應聘者中分最高者還高的人,若沒有則僱傭最後一個人。問題轉化爲尋找k的最優值。
過程:
令
P{Si} 表示應聘者爲第i時面試成功的概率,Bi 表示最佳面試者爲第i人的概率,M(j) 表示前1~j人中的最高分,Oi 表示從k+1到i-1的應聘者都小於M(k) 的概率。顯然
P{S}=∑i=k+1nP{Si}
P{Bi}=1/n
P{Oi}=k/(i−1)
P{Si}=P{Bi}⋅P{Oi} 解得
P{S}=kn(lnn−lnk) 求導,得
k=n/e