5.1 雇佣问题
HIRE-ASSISTANT(n)
best = 0
for i = 0 to n
interview candidate i
if candidate is better than candidate best
best = i
hire candidate i
最坏情形分析
应聘者质量按出现的次序严格递增
如何求平均情况?
随机算法
5.2 指示器随机变量
定义:
I
{
A
}
=
{
1
如
果
A
发
生
0
如
果
A
不
发
生
I\lbrace A\rbrace=\begin{cases} 1\quad如果A发生\\ 0\quad如果A不发生\end{cases}
I{A}={1如果A发生0如果A不发生
A发生的概率
P
r
{
A
}
Pr\lbrace A\rbrace
Pr{A},期望
E
[
X
A
]
E[X_A]
E[XA]
引理:给定一个样本空间S和S中的一个事件A,设 X A = I { A } X_A=I\lbrace A\rbrace XA=I{A},那么 E [ X A ] = P r { A } E[X_A]=Pr\lbrace A\rbrace E[XA]=Pr{A}
用指示器随机变量分析雇佣问题
X
i
=
I
{
应
聘
者
i
被
雇
佣
}
=
{
1
如
果
应
聘
者
i
被
雇
佣
0
如
果
应
聘
者
i
不
被
雇
佣
X_i=I\lbrace 应聘者i被雇佣\rbrace = \begin{cases} 1\quad如果应聘者i被雇佣 \\ 0\quad如果应聘者i不被雇佣 \end{cases}
Xi=I{应聘者i被雇佣}={1如果应聘者i被雇佣0如果应聘者i不被雇佣
以及
X
=
X
1
+
X
2
+
⋯
+
X
n
X=X_1+X_2+\cdots+X_n
X=X1+X2+⋯+Xn
根据引理
E
[
X
i
]
=
P
r
{
应
聘
者
i
被
雇
佣
}
E[X_i]=Pr\lbrace 应聘者i被雇佣\rbrace
E[Xi]=Pr{应聘者i被雇佣}
应聘者比应聘者1到i-1更有资格的概率是1/i,因此
E
[
X
i
]
=
1
/
i
E[X_i]=1/i
E[Xi]=1/i
计算得
E
[
X
]
=
ln
n
+
O
(
1
)
E[X]=\ln n+O(1)
E[X]=lnn+O(1)
因此尽管面试了n个人,实际上大约只雇佣他们之中的
ln
n
\ln n
lnn个人
5.3 随机算法
先对应聘者进行排列,然后确定最佳应聘者的随机算法。此时建立的算法的性能和假设应聘者以随即次序出现所得的结果是匹配的。
随机排列数组
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)
sort A, using P as sort keys
引理:假设所有优先级都不同,则过程PERMUTE-BY-SORTING产生输入的均匀随机排列
另一个方法:原址排列给定数组
RANDOMIZE-IN-PLACE(A)
n = A.length
for i = 1 to n
swap A[i] with A[RANDOM(i, n)]