一、隨機分析
考慮乙個僱傭問題,面試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!。
方案二要比方案一好,因為它沒有新建優先順序陣列,節省了空間,也沒有進行比較。不過隨機換位置的時間開銷沒辦法估計。
概率分析與隨機演算法
1.陣列的隨機排列演算法及其簡單驗證 2.隨機演算法簡單分析 1.陣列的隨機排列演算法及其簡單驗證 1.1 陣列的排列的隨機演算法的最終目的是達到,陣列每個元素在每個位置上出現的概率為1 n 其中n為陣列大小 一種的演算法如下,對於陣列a中的每個元素a i 隨機附上乙個權值,然後根據該權值對a陣列進...
演算法導論之概率分析和隨機演算法文件
概率分析和隨機演算法文件 本章由雇用問題引出隨機演算法。一家公司要雇用乙個新的辦公經理,於是要找乙個雇用 來推薦面試者,由我面試他,然後決定是否雇用。花費主要有 要付一小部分錢給這個雇用 讓其繼續尋找新的辦公經理 若是產生了新的辦公經理,就要辭退原有的經理,此時要付一大筆錢給雇用 hire assi...
演算法導論 第5章 概率分析和隨機演算法
考慮乙個僱傭助理的問題,對於每乙個出現的應聘者,若該應聘者比之前所有應聘者都好,則僱傭該應聘者。初始化時建立乙個虛擬的應聘者編號0,他比其他所有應聘者都差,則過程如下 該問題的費用模型並不關注執行時間,而是面試和僱傭產生的費用。面試費用較低為ci,僱傭費用較高為ch,則若m是僱傭人數,總費用為o c...