演算法學習之概率分析與隨機演算法

2021-10-09 18:41:10 字數 3782 閱讀 8106

《說明》

該文章內容我尚未理解深刻,此處僅作記錄

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

=ln⁡n

+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

∑n​x

i​⎦⎥

⎥⎤​=

i=1∑

n​e(

xi​)

=i=1

∑n​1

/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

0​if 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...