算法設計與分析課程複習筆記5——隨機化算法

算法設計與分析課程複習筆記5——隨機化算法

隨機化算法

僱傭問題

問題描述:

  • 通過中介招聘新職員
  • 一天面試一箇中介介紹的候選人
  • 優勝劣汰

Hire-Assistant(A)
 current ← an infinitely useless dummy assistant(初值)
 for i = 1…n
  do if A[i] is better qualified than current
   then current ← A[i]
 return current

代價模型
面試代價:中介費用c1c_1,候選人路費c2c_2等等
僱用代價:因僱傭付給中介的額外費用c3c_3,僱傭導致的內部管理費用c4c_4

總費用:面試n個人的費用+面試中m個人獲得僱傭的費用
即:cin+chmc_i*n+c_h*m

最好情況:第一個人最優
cin+chc_i*n+c_h

最壞情況:面試者越來越好
cin+chnc_i*n+c_h*n

我們期望的m是什麼?
概率分析
假設兩兩候選人互異
於是我們可以進行排序:1,2,……,n
假設每種排列的可能性相等
(即一致性隨機排列)

指示變量
I(E)={1, if eventE occurs0, if eventE does not occur I(E)=\left\{ \begin{aligned} 1, if event E occurs\\ 0, if event E does not occur \end{aligned} \right.
指示變量用於概率和期望值之間的轉換
Lemma: For an event E and its indicator variable XEX_E = I(E), Pr(E) = E(XEX_E).

僱傭問題平均情況分析
事件:E1E_1E2E_2、……、EnE_n
EiE_i即第i個受聘用

指示變量:X1X_1X2X_2、……、XnX_n
XiX_i=I(Ei)I(E_i)

m=i=1nXim=\sum^n_{i=1}X_i
E(Xi)=1/iE(X_i)=1/i
E(m)=E(i=1nXi)=O(lgn)E(m)=E(\sum^n_{i=1}X_i)=O(lgn)

期望僱傭代價:Θ(cin+chlgnc_i*n+c_h*lgn

平均情況分析的缺陷

  1. 算法已確定
  2. 每一個確定的算法都有其最壞的輸入
  3. 不良中介可能一直提供最壞的輸入

解決方法:隨機化
改進的僱傭算法:

  1. 從中介獲得所有候選人名單
  2. 產生輸入的一致性隨機排列
  3. 再面試

期望代價:Θ(cin+chlgnc_i*n+c_h*lgn

不同之處:

  • 沒有爭議性假設
  • 不存在明確的導致最壞情況的輸入
  • 削弱了對手的操控能力

一致隨機排列生成
如何得到n個元素的一致性隨機排列?
方法1:排序法排列
Permute-By-Sorting(A)
 Allocate an array B of size n (數組)
 for i = 1…n
  do B[i] ← random(1, n3n^3)
 Sort arrays A, using B as sort keys(排序,以B爲參考)
一致性隨機排列
方法2:換位法排列
Permute-In-Place(A)
 for i = 1…n – 1
 do j ← random(i, n)
  swap A[i] ↔ A[j] (交換)

Lemma: Procedure Permute-In-Place takes linear time O(n).
開銷O(n).
Lemma: Procedure Permute-In-Place produces a uniformly
random permutation
.(一致性隨機排列)

快速排序

爲了排序A[p……r]

  • 分割,根據選定的某個中心,將A分成兩個部分
  • 治理,每一部分用QuickSort嵌套處理
  • 組合

算法如下:
QuickSort(A,p,r)
 if p<r
  then q \leftarrowPartition(A,p,r)
   QuickSort(A,p,q-1)
   QuickSort(A,q+1,r)

其中Partition(A,p,r)分割,返回分離點的位置q
Partition(A,p,r)
 x\leftarrowA[r]
 i\leftarrowp-1
 for j \leftarrowp to r-1
  do if A[j]≤x
   then i \leftarrow i+1
    exchange A[i] \leftrightarrowA[j]
 exchange A[i+1] \leftrightarrowA[r]
 return i+1

解釋:選擇最後一個元素作爲分割中心
分割過程中出現4個區域:

  1. All entries in A[p … i ] ≤ pivot.
  2. All entries in A[i+1 … j-1] > pivot.
  3. A[ j . . r-1]
  4. A[r] = pivot.
    快速排序

快速排序分析:
最壞情況:分割中心選擇了最大或最小
T(n)=T(n1)+Θ(n)=Θ(n2)T(n) = T(n-1) + Θ(n) = Θ(n^2)
最好情況:分割中心每次都選擇在中值
T(n)=2T(n/2)+Θ(n)=Θ(nlgn)T(n) = 2*T(n/2) + Θ(n) = Θ(n lg n)
平均情況接近最好情況

隨機化快速排序

QuickSort(A,p,r)
 if p<r
  then swap A[r] \leftrightarrow A[random(p,r)]
   q \leftarrow Partition(A,p,r)
   QuickSort(A,p,q-1)
   QuickSort(A,q+1,r)

快速排序運行時間
如果X爲QuickSort作比較的總次數,則時間開銷爲O(X+n)O(X+n)

E(X)=O(nlgn)
指示變量XijX_{ij}
Xij={1, if zi and zj are compared0, if zi and zj are not compared X_{ij}=\left\{ \begin{aligned} 1, if z_i and z_j are compared\\ 0, if z_i and z_j are not compared\\ \end{aligned} \right.

X=i=1n1j=i+1nXijX=\sum^{n-1}_{i=1}\sum^{n}_{j=i+1}X_{ij}

E(X)
=E(i=1n1j=i+1nXij\sum^{n-1}_{i=1}\sum^{n}_{j=i+1}X_{ij})
=i=1n1j=i+1n\sum^{n-1}_{i=1}\sum^{n}_{j=i+1}E(XijX_{ij})
=i=1n1j=i+1n\sum^{n-1}_{i=1}\sum^{n}_{j=i+1}Pr(ziz_i and zjz_j are compared)
=i=1n1j=i+1n\sum^{n-1}_{i=1}\sum^{n}_{j=i+1}(2ji+1\frac2{j-i+1})
=i=1n1O(lgn)\sum^{n-1}_{i=1}O(lgn)
=O(nlgn)O(nlgn)

隨機快速排序期望的時間開銷:O(nlgn)O(nlgn)

隨機算法的分類

  1. Las Vegas算法:隨機算法總是或者給出正確的解,或者無解。
  2. Monte Carlo算法:居多能夠給出正確的解,偶爾產生錯誤的解。可以採取措施使產生錯誤解的概率降低到任意的程度。

測試串的相等性
A:長串x
B:長串y
x=y?
A將x發送給B,或B將y發送給A,然後判斷x=y?
缺點:浪費資源

A從x中取出一個短得多的串作爲x的“指紋”發送給B,B用同樣的方法獲得y的“指紋”,如果兩者的“指紋”相同,則認爲x=y,否則x=y 不成立。
特點:節約了資源,但理論上不能100%正確。

“指紋”生成
對於一個串w,設I(w)是比特串w表示的一個整數,一種產生“指紋”的方法是選擇一個素數p,通過“指紋”函數產生。
Ipx=Ixmod pI_p(x)=I(x)(mod p)

IpxI_p(x)IpyI_p(y)則 x ≠ y
Ipx=Ipyx=y?I_p(x)= I_p(y)則 x = y?

算法:
1、A從小於M的素數集中隨機選擇p;
2、A將p和IpxI_p(x)發送給B;
3、B檢查是否Ipx=IpyI_p(x)= I_p(y),確定x和y是否相等。

失敗概率分析
失敗概率
n 是x的二進制的表示形式的位數
π(n)是小於n 的不同素數的個數
π(n)\rightarrown/ln(n)n/ln(n)

參考:任課教師邱德紅教授的課件

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