算法設計與分析課程複習筆記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
代價模型
面試代價:中介費用,候選人路費等等
僱用代價:因僱傭付給中介的額外費用,僱傭導致的內部管理費用
總費用:面試n個人的費用+面試中m個人獲得僱傭的費用
即:
最好情況:第一個人最優
最壞情況:面試者越來越好
我們期望的m是什麼?
概率分析
假設兩兩候選人互異
於是我們可以進行排序:1,2,……,n
假設每種排列的可能性相等
(即一致性隨機排列)
指示變量
指示變量用於概率和期望值之間的轉換
Lemma: For an event E and its indicator variable = I(E), Pr(E) = E().
僱傭問題平均情況分析
事件:、、……、
即第i個受聘用
指示變量:、、……、
=
期望僱傭代價:Θ()
平均情況分析的缺陷
- 算法已確定
- 每一個確定的算法都有其最壞的輸入
- 不良中介可能一直提供最壞的輸入
解決方法:隨機化
改進的僱傭算法:
- 從中介獲得所有候選人名單
- 產生輸入的一致性隨機排列
- 再面試
期望代價:Θ()
不同之處:
- 沒有爭議性假設
- 不存在明確的導致最壞情況的輸入
- 削弱了對手的操控能力
一致隨機排列生成
如何得到n個元素的一致性隨機排列?
方法1:排序法排列
Permute-By-Sorting(A)
Allocate an array B of size n (數組)
for i = 1…n
do B[i] ← random(1, )
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 Partition(A,p,r)
QuickSort(A,p,q-1)
QuickSort(A,q+1,r)
其中Partition(A,p,r)分割,返回分離點的位置q
Partition(A,p,r)
xA[r]
ip-1
for j p to r-1
do if A[j]≤x
then i i+1
exchange A[i] A[j]
exchange A[i+1] A[r]
return i+1
解釋:選擇最後一個元素作爲分割中心
分割過程中出現4個區域:
- All entries in A[p … i ] ≤ pivot.
- All entries in A[i+1 … j-1] > pivot.
- A[ j . . r-1]
- A[r] = pivot.
快速排序分析:
最壞情況:分割中心選擇了最大或最小
最好情況:分割中心每次都選擇在中值
平均情況接近最好情況
隨機化快速排序
QuickSort(A,p,r)
if p<r
then swap A[r] A[random(p,r)]
q Partition(A,p,r)
QuickSort(A,p,q-1)
QuickSort(A,q+1,r)
快速排序運行時間
如果X爲QuickSort作比較的總次數,則時間開銷爲
E(X)=O(nlgn)
指示變量
則
E(X)
=E()
=E()
=Pr( and are compared)
=()
=
=
隨機快速排序期望的時間開銷:
隨機算法的分類
- Las Vegas算法:隨機算法總是或者給出正確的解,或者無解。
- 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,通過“指紋”函數產生。
≠則 x ≠ y
算法:
1、A從小於M的素數集中隨機選擇p;
2、A將p和發送給B;
3、B檢查是否,確定x和y是否相等。
失敗概率分析
n 是x的二進制的表示形式的位數
π(n)是小於n 的不同素數的個數
π(n)
參考:任課教師邱德紅教授的課件