Lecture 13: Randomized Algorithms¶
1 Example: Hiring Problem¶
最坏情况是面试者按照其 quality 正序来面试,最好情况是倒序。
那么假设面试者以随机顺序来面试,期望开销是多少呢?假设有 X 人被雇佣,那么 X 的期望就是 \(E[X]=\sum\limits_{j=1}^N\cdot Pr[X=j]\)。
如果我们对每一个面试者进行分析,以 X_i 来判定这个人有没有被雇佣,1 为被雇佣。那么很容易知道 X 就是每个 X_i 的和,根据数学知识可以知道 X 的期望也就是每个 X_i 的期望的和。
这时我们就需要知道每个人被雇佣的概率是多少,也就是 \(Pr[X_i=1]\) 是多少。由于这里我们说是随机来的,所以就假设为 1/i。把他们加起来运用微积分知识就知道 \(\(E[X]=lnN+O(1)\)\)
所以总的开销就是 \(O(C_h\ lnN+NC_i)\)。
这里还有一个问题,就是我们需要随机生成面试顺序。这是需要时间的,方法如下:
以上是一种 offline 算法。
对于在线算法,我们不能更改面试的顺序,怎么做呢?只雇佣一次。
C | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
那么这里有两个问题:
- 对于一个给定的 k,我们雇佣到最有能力的人的概率是多少?
- 如何设置 k 来使得这个概率最大?
为了解决这个问题,我们记 \(S_i\) 这个事件代表第 i 个面试者就是最牛逼的。那么如何使得 \(S_i\) 为真?需要两个条件:
- A: The best one is at position i.
- B: No one at positions k+1 to i-1 is hired.
这两个事件是独立事件,因此有
于是我们有了回答:
- 对于给定的 k,真的雇佣到最厉害的人的概率是 $$\frac{k}{N} ln(\frac{N}{k} )\le Pr[S] \le \frac{k}{N}ln(\frac{N-1}{k-1} ) $$
- 想让这个概率最大, \(k=\frac{N}{e}\),这个概率是 \(1/e\)。
2 Example: Quicksort¶
对于 FDS 课程中学到的 Deterministic Quicksort,最坏时间复杂度为 \(\Theta(N^2)\)。
如果我们随机选择 pivot 呢?
Central splitter:两边至少占 ¼ 的分法。
Modified Quicksort:每次都选 Central splitter 当 pivot。
由于选到 central 分割点的概率为 0.5,所以随机选择选到 central 分割点的期望次数为 2.