【算法】--概率分析和随机算法

一、雇佣问题

(给定输入实例,算法的每次执行结果相同)
**问题:**面试n个人,雇用一个职员。雇用原则,在面试第i个人时,如果该面试者比前面所有面试者都好,就录用。已知面试代价为Ci,录用代价为Ch,请问成本为多少?

HIRE-ASSISTANT(n) 
 best ← 0  --> candidate 0 is a least-qualified dummy candidate
 for i ← 1 to n 
       do interview candidate i 
             if candidate i is better than candidate best 
                   then best ← i 
                        hire candidate i 

雇佣问题成本的概率分析


二、随机算法

(给定输入算法多次运行结果不一定相同)

RANDOMIZED-HIRE-ASSISTANT(n) 
 randomly permute the list of candidates 
 best ← 0 →candidate 0 is a least-qualified dummy candidate 
 for i ← 1 to n 
       do interview candidate i 
            if candidate i is better than candidate best 
                  then best ← i 
                          hire candidate i 

方法一:

PERMUTE-BY-SORTING(A) 
  n ← length[A] 
  for i ← 1 to n 
      do P[i] = RANDOM(1, n3) 
  sort A, using P as sort keys
  return A 

分析:

  • 各优先数唯一的概率为≥1-1/n
  • 算法运行时间为Θ(nlgn)
  • line 4 sorting, 使用合并排序等
  • Lemma 假定各优先数唯一,则算法产生的是输入的均匀随机排列


方法二:
(就地枚举,一般就地算法指的是辅助空间为C,与n无关)

RANDOMIZE-IN-PLACE(A) 
 n ← length[A] 
 for i ← 1 to n 
       do swap A[i] ↔ A[RANDOM(i, n)] 

分析:

  • 算法运行时间为Θ(n),line 2 for循环
  • Lemma 算法产生的是输入的均匀随机排列

三、在线雇佣问题

原则:面试每位申请者,立即决定去留
折衷:最小化面试的人数 vs. 被录用者质量最优(两者矛盾)
方法:
打分:score(i),并且假定分数唯一
选择一个正整数k:对前k个人,只记分不录用;此后出现的第一个高分者被录用;若后n-k个人分数低于先前的最高分数者,录用第n个人

ON-LINE-MAXIMUM(k, n) 
 bestscore ← -∞ 
 for i ←1 to k 
      do if score(i) > bestscore 
          then bestscore ← score(i) 
 for i ← k + 1 to n 
       do if score(i) > bestscore 
            then return i 
 return n 

分析:
假设k固定, M ( j ) = max 1 i j { s c o r e ( i ) } M(j)=\max _{1 \leq i \leq j}\{ {score}(i)\} 为前j人最高分;
事件 S S :成功地选取最优者;
事件 S i S_{i} :成功地选取最优者,并且是第i人;
因为: P r { S i } = 0 i k {Pr}\left\{S_{i}\right\}=0 \quad i \leq k
故: P r { S } = i = k + 1 n P r { S i } {Pr}\{S\}=\sum_{i=k+1}^{n} {Pr}\left\{S_{i}\right\}
S i S_{i} 满足的情况:

  1. 事件 B i B_{i} :最优者在i产生;
  2. 事件 O i O_{i} :位置 k + 1 j i 1 k+1 \leq j \leq i-1 上的申请者未被选中;

事件 B i B_{i} 与事件 O i O_{i} 相互独立,故 P r { S i } = P r { B i O i } = P r { B i } P r { O i } {Pr}\left\{S_{i}\right\}={Pr}\left\{B_{i} \cap O_{i}\right\}={Pr}\left\{B_{i}\right\} {Pr}\left\{O_{i}\right\}
又因为 P r { B i } = 1 n , P r { O i } = k i 1 {Pr}\left\{B_{i}\right\}=\frac{1}{\mathrm{n}}, {Pr}\left\{O_{i}\right\}=\frac{k}{\mathrm{i}-1}
所以: P r { S } = i = k + 1 n P r { S i } = i = k + 1 n k n ( i 1 ) = k n i = k + 1 n 1 i 1 {Pr}\{S\}=\sum_{i=k+1}^{n} {Pr}\left\{S_{i}\right\}=\sum_{i=k+1}^{n} \frac{k}{n(i-1)}=\frac{k}{n} \sum_{i=k+1}^{n} \frac{1}{i-1}
由积分不等式 k n 1 x d x i = k n 1 1 i k 1 n 1 1 x d x \int_{k}^{n} \frac{1}{x} d x \leq \sum_{i=k}^{n-1} \frac{1}{i} \leq \int_{k-1}^{n-1} \frac{1}{x} d x ,可得:
k n ( ln n ln k ) P r { S } k n ( ln ( n 1 ) ln ( k 1 ) ) \frac{k}{n}(\ln n-\ln k) \leq {Pr}\{S\} \leq \frac{k}{n}(\ln (n-1)-\ln (k-1))
令下界最大,对k求导可得 1 n ( ln n ln k 1 ) \frac{1}{n}(\ln n-\ln k-1)
令其为零,得 k = n e k=\frac{n}{e}
}(\ln (n-1)-\ln (k-1)) k ; 令下界最大,对k求导可得 \frac{1}{n}(\ln n-\ln k-1) ; 令其为零,得 k=\frac{n}{e} ; 综上, k=\frac{n}{e} 时,下界最大值是 \frac{k}{n}(\ln n-\ln k)=\frac{1}{e}$

发布了5 篇原创文章 · 获赞 0 · 访问量 31

猜你喜欢

转载自blog.csdn.net/qq_41160771/article/details/104891347