6.10 概率分析和隨機算法

一、隨機分析


考慮一個僱傭問題,面試n個人,在面試的過程中,只要更爲優秀的人出現,就僱傭更爲優秀的人,但是更換人選需要花費一筆費用c,現在估算這筆費用。

這個問題相當於維護一個當前的“獲勝者”。

最壞的情形當然是替換n次,那麼費用就會是cn.

隨機的情況:

第i個人比前i-1個人更爲優秀的概率爲1/i,那麼期望E[X] = 1/1 +1/2 +1/3 + …… = ln n + O(1),也就是說,隨機情況下,平均起來大概僱傭了lnn個人,費用爲clnn。


二、隨機算法


如何產生一個隨機排列的數組?只需證明或等等同排列的概率爲1/n!。

方案一:給原數組中的每個成員賦一個代表優先級值,這個值隨機產生,然後按照優先級排序

PERMUTE-BY-SORTING(A)
n = A.length
let P[1..n] be a new array
for i =1 to n
    P[i] = RANDOM(1,n^3) # 1~n^3是爲了讓P中所有優先級儘可能唯一
sort A, using P as sor keys #花費代價可爲Θ(nlgn)

若想得到一個固定排序的序列,那麼概率爲1/n * 1/(n-1) * 1/(n-2) * ... * 1/2 * 1/1 = 1/n!,得證。

方案二:原址排列給定數組

RANDOMIZE-IN-PLACE(A)
n = A.length
for i = 1 to n
    swap A[i] with A[RANDOM(i,n)]

對於前i-1個位置上的某個固定的排序,它出現的概率爲後面n-i+1個位置上的排序的排序種類/總的排序種類,即(n-i+1)!/n!。

當i = n時,給定排列的概率爲1/n!.

所以只需要證明方案二的方法中前(i-1)個位置上的排序被包含的概率爲(n-i+1)!/n!即可。使用數學歸納法可證,1/(n-i+1) * (n-i+1)!/n! = (n-i)!/n!。


方案二要比方案一好,因爲它沒有新建優先級數組,節省了空間,也沒有進行比較。不過隨機換位置的時間開銷沒辦法估計。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章