概率分析和隨機演算法

2021-08-04 10:09:17 字數 1098 閱讀 4990

一、隨機分析

考慮乙個僱傭問題,面試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...