《說明》
該文章內容我尚未理解深刻,此處僅作記錄
2.隨機演算法(隨機排列陣列)
3 概率分析
假如你要雇用一名新的辦公助理。你先前的雇用嘗試都失敗了,於是你決定找乙個雇用**。
·雇用**每天給你推薦乙個應聘者。
·你面試這個人,然後決定是否雇用他。
(你必須付給雇用**一小筆費用,以便面試應聘者;然而真正雇用乙個應聘者需要花更多的錢,因為你必須辭掉目前的辦公助理,還要付一大筆中介費給雇用**)
·你承諾任何時候,都要找最適合的人來擔任該項職務。(即在面試完每個應聘者後,如果該應聘者比目前的辦公助理更合適,就會辭掉當前的辦公助理,然後聘用新的。)
~你希望能夠估算該費用會是多少?
-偽**展示:
(假設應聘辦公助理的候選人編號為1到n。該過程假設你能在面試完應聘者i後,決定應聘者i是否是你目前見過的最佳應聘者。初始化時,該過程建立乙個虛擬的應聘者,編號為0,他比其他應聘者都差)
hire-assistant(n)
1 best=
0// candidate 0
is a least-qualified dummy candidate
2for i=
1 to n
3 interview candidate i
4if candidate i is better than candidate best
5 best=i
6 hire candidate i
//感覺是在找出陣列中的最大數,不過求得內容不同
//偽**用python寫還不錯哈哈
//在任何情形中,我們都是計算特定基本操作的執行次數。
分析:
假設面試乙個人的費用是a,雇用乙個人的費用是b,顯然b>a恆成立。
在問題假設中,一共面試n個人,所以面試產生的費用是固定的即an,
假設此次面試中共雇用了m個人,雇用產生的費用為bm,所以可以說,估算總費用取決於m變數。
提公升:
這個場景用來作為一般計算正規化的模型。
我們通常通過檢查序列中的每個成員,並且維護乙個當前的「獲勝者」,來找出序列中的最大值或最小值。這個雇用問題對當前獲勝成員的更新頻率建立模型。
最壞情況分析:每次面試都需要雇用,即面試n次,雇用了n次,總的費用是o(bn)……因為b>a……
但事實上,我們並不知道應聘者出現的次序,最壞情況出現的概率並不多。但我們想知道在一種自然情況或者平均的情形下,會有什麼發生,這時的總費用是多少。
平均情況分析:實際情況下,由於該公司的應聘策略是,如果該應聘者比之前的應聘者都優秀,則應聘他。所以,對於第i個應聘者來說,應聘成功的概率也就是1/i;用xi表示第i個應聘者是否應聘成功,則e(xi)=1/i。設該公司在面試n個應聘者後總的應聘次數為x=x1+x2+…+xn
所以該公司在面試n個應聘者後總的應聘次數的期望為
e (x
)=e[
∑i=1
nxi]
=∑i=
1ne(
xi)=
∑i=1
n1/i
=lnn
+o(1
)e(x)= e \left[\large^nx_i }\right] = \displaystyle\sum_^ne(x_i)=\displaystyle\sum_^n1/i=\ln n + o(1)
e(x)=e
⎣⎢⎢⎡
i=1
∑nx
i⎦⎥
⎥⎤=
i=1∑
ne(
xi)
=i=1
∑n1
/i=ln
n+o(
1)所以說平均情況下,演算法hire-assistant的總的雇用費用為o(blnn).
1.1概率分析、平均情況執行時間
概率分析是在問題分析中應用概率的理念。大多數情況下,我們採用概率分析來分析乙個演算法的執行時間,有時也用它來分析一些其他的量。
為了使用概率分析,我們需要使用或者假設關於輸入的分布,然後分析該演算法,計算出乙個平均情形下的執行時間,其中,我們對所有可能的輸入分布產生的執行時間取平均值。稱為平均情況執行時間。
1.2隨機演算法、期望執行時間
一般地,如果乙個演算法的行為不僅由輸入決定,而且也由隨機數生成器產生的數值決定,則稱這個演算法是隨機的。
當分析乙個隨機演算法的執行時間時,我們以執行時間的期望值衡量,其中輸入值由隨機數生成器產生。我們將乙個隨機演算法的執行時間稱為期望執行時間。
一般而言,當概率分布是在是演算法的輸入上時,我們討論的是平均情況執行時間;當演算法本身做出隨機選擇時,我們討論其期望執行時間。
2.1 permute-by-sorting(優先順序)
偽**如下:
permute-by-sorting(a)
1 n=a.length
2 let p[1.
.n] be a new array
3for i=
1 to n
4 p[i]
= random(
1,n^3)
5 sort a, using p as sort keys
2.2 randomize-in-place(位置)
偽**如下:
randomize-in-place(a)
1 n=a.length
2for i=
1 to n
3 swap a[i]
with a[random(i,n)
]
兩種演算法相比較,後者更好(時間複雜度、空間複雜度)
3.1 生日悖論(使用期望、多次積分)
問題描述:乙個屋子裡人數必須要達到多少人,才能使其中兩人的生日相同的機會達到50%?
使用指示變數進行分析如下:
對屋子裡k個人中的每一對(i,j),對1<=i<=j<=k,定義指示變數xij如下
x ij
=i(i
和j生日
相同)=
=i(i和j生日相同)= \begin 1 &\text \\ 0 &\text \end
xij=i
(i和j
生日相同
)={1
0if i和j
的生日相
同else
3.2 球與箱子、禮券收集者問題
乙個人如果想要收集齊b種不同禮券中的每一種,大約需要blnb張隨機的到的禮券。
分析如下:
概率分析與隨機演算法
1.陣列的隨機排列演算法及其簡單驗證 2.隨機演算法簡單分析 1.陣列的隨機排列演算法及其簡單驗證 1.1 陣列的排列的隨機演算法的最終目的是達到,陣列每個元素在每個位置上出現的概率為1 n 其中n為陣列大小 一種的演算法如下,對於陣列a中的每個元素a i 隨機附上乙個權值,然後根據該權值對a陣列進...
概率分析和隨機演算法
一 隨機分析 考慮乙個僱傭問題,面試n個人,在面試的過程中,只要更為優秀的人出現,就僱傭更為優秀的人,但是更換人選需要花費一筆費用c,現在估算這筆費用。這個問題相當於維護乙個當前的 獲勝者 最壞的情形當然是替換n次,那麼費用就會是cn.隨機的情況 第i個人比前i 1個人更為優秀的概率為1 i,那麼期...
隨機演算法 概率演算法
div出現在頁面的隨機位置var sheight jquery document.body outerheight true 100 var swidth jquery document.body outerwidth true 100 var div top getrandomnum 0,shei...