WC Day1 第一课堂 随机算法

设数组含有 n n n 个不同元素,随即快速排序算法的期望比较次数
T ( n ) ≤ 2 n ln ⁡ n T(n) \leq 2 n\ln n T(n)2nlnn
证明

显然随机选取的枢轴元素是等概率的。
T ( n ) = ( n − 1 ) + ∑ i = 0 n 1 n ( T ( i ) + T ( n − i + 1 ) ) = ( n − 1 ) + ∑ i = 1 n 2 n T ( i ) T(n) = (n-1)+\sum_{i= 0}^n \frac{1}{n}(T(i) + T(n - i + 1))\\ = (n-1)+\sum_{i=1}^{n} \frac{2}{n} T(i) T(n)=(n1)+i=0nn1(T(i)+T(ni+1))=(n1)+i=1nn2T(i)

在数组中查找第 k k k 小的元素。

T ( n ) ≤ 1 n ( T ( n − 1 ) + T ( n − 2 ) + ⋯ + T ( n 2 + 1 ) + T ( n 2 ) + ⋯   ) ≤ 2 n ∑ i = n 2 n − 1 T ( i ) + O ( n ) T(n) \leq \frac{1}{n} (T(n-1) + T(n-2) + \cdots + T(\frac{n}{2} + 1) + T(\frac{n}{2}) + \cdots) \\ \leq \frac{2}{n} \sum_{i=\frac{n}{2}}^{n-1} T(i)+O(n) T(n)n1(T(n1)+T(n2)++T(2n+1)+T(2n)+)n2i=2nn1T(i)+O(n)

证明 T ( n ) ≤ c n T(n) \leq cn T(n)cn

k <- 1
count <- 0
while (k <= n) do
    for i <- 1 to n do
        检查相容性 (能不能放)
        如果相容将 i 加入 S
    if S 不等于 空集 then
    	j <- 从 S 随机选择一个元素 
        x[k] <- S[j] // 第 k 个皇后的列
        count++
        k++
    else k <- n+1
return count

LasVegas 随机算法

一般把算法的某步确定性选择变成随机选择。

一次运行可能得不到解,如果得到那么一定是正确的

可以与确定性算法相结合进行改进。

p p p 为算法成功的概率。

t t t 为找到一个解的平均时间。

s s s 为成功搜索访问结点数的平均值, e e e 为不成功。

t = p s + ( 1 − p ) ( e + t ) ⇒ t = s + e 1 − p p t = ps + (1 - p)(e + t) \Rightarrow t = s + e \frac{1-p}{p} t=ps+(1p)(e+t)t=s+ep1p

n = 12 n=12 n=12 时, s t o p V e g a s = 5 stopVegas = 5 stopVegas=5 时算法效率最高。

Monte Carlo 随机算法

有时会给出错误的答案。

运行时间和出错概率都是随机变量,需要分析算法出错概率

主元素测试 有没有出现次数超过一半以上的元素

i <- random(1,n)
x <- T(i)
计数 x 在 T 中出现的个数 k
if (k > n / 2) return true
else return false

一次回答正确的概率 > 1 2 > \frac{1}{2} >21

if Majority(T, n) return true;
else return Majority(T, n);

跑两次算法正确的概率为 p + ( 1 − p ) p = 1 − ( 1 − p ) 2 > 3 4 p + (1 - p)p = 1 - {(1-p)}^2 > \frac{3}{4} p+(1p)p=1(1p)2>43

调用 k k k 次 Majority 算法的正确概率为,这是一个等比数列求和
p + ( 1 − p ) p + ( 1 − p ) p + ( 1 − p ) 2 p + ⋯ + ( 1 − p ) k − 1 p = 1 − ( 1 − p ) k > 1 − 2 − k p + (1 - p)p + (1 - p)p + {(1-p)}^2p + \cdots + (1 - p)^{k-1} p \\= 1 - {(1-p)}^k > 1 - 2^{-k} p+(1p)p+(1p)p+(1p)2p++(1p)k1p=1(1p)k>12k
调用 4 4 4 次的概率达到了 0.969 0.969 0.969

如果使出错的概率不超过 ε \varepsilon ε,则调用的次数满足 k ≥ ⌈ log ⁡ 1 ε ⌉ k \ge \lceil \log \frac{1}{\varepsilon}\rceil klogε1

串相等测试 两个长串是否相等

A 用 x x x 导出一个短串 f ( x ) f(x) f(x) 发送给 B B B

B 用同样的方法导出相对于 y y y 的短串 f ( y ) f(y) f(y)

B 比较 f ( x ) f(x) f(x) f ( y ) f(y) f(y)

如果不相等,则 x ≠ y x \not= y x=y 否则不确定。

假设 x x x y y y 都是二进制串,对应的正整数为 I ( x ) I(x) I(x) I ( y ) I(y) I(y)

选择质数 p p p,指纹函数 I p ( x ) = I ( x )   m o d   p I_p(x)=I(x) \bmod p Ip(x)=I(x)modp
x = y ⇒ I p ( x ) = I p ( y ) I p ( x ) = I p ( y ) ⇏ x = y \begin{array}{l} x=y \Rightarrow I_{p}(x)=I_{p}(y) \\ I_{p}(x)=I_{p}(y) \not\Rightarrow x=y \end{array} x=yIp(x)=Ip(y)Ip(x)=Ip(y)x=y
改进方法:随机选择质数 p p p 进行测试

出错的必要条件

  • x x x y y y 的位数相等
  • p ∣ ( I ( x ) − I ( y ) ) p|(I(x)-I(y)) p(I(x)I(y)) 即为同余

π ( t ) \pi(t) π(t) 表示小于 t t t 的质数个数。

素数定理 π ( t ) ≈ t ln ⁡ t \pi(t) \approx \frac{t}{\ln t} π(t)lntt

k < 2 n k < 2^n k<2n n n n 不太小,整除 k k k 的素数个数 ≤ π ( n ) \leq \pi(n) π(n)

M M M 为素数随机的范围
{ p ∣ p 是小于2 n 的素数 且 p 整除  I ( x ) − I ( y ) } ∣ π ( M ) ≤ π ( n ) π ( M ) ≈ n ln ⁡ n 2 n 2 ln ⁡ ( 2 n 2 ) ≈ n ln ⁡ n 2 n 2 2 ln ⁡ n ≤ 1 n \frac{\left\{p \mid p \text {是小于2}^{n}\text{的素数 且 p 整除 } I(x)-I(y)\right\} \mid}{\pi(M)} \\ \leq \frac{\pi(n)}{\pi(M)} \approx \frac{\frac{n}{\ln n}}{\frac{2 n^{2}}{\ln \left(2n^{2}\right)}} \approx \frac{\frac{n}{\ln n}}{\frac{2n^2}{2 \ln n}} \leq \frac{1}{n} π(M){pp是小于2n的素数  p 整除 I(x)I(y)}π(M)π(n)ln(2n2)2n2lnnn2lnn2n2lnnnn1
如果我们进行 j j j 次测试。令 j = ⌈ log ⁡ log ⁡ n ⌉ j=\lceil\log \log n\rceil j=loglogn,那么出错的概率为 1 n ⌈ log ⁡ log ⁡ n ⌉ \frac{1}{n^{\lceil\log \log n\rceil}} nloglogn1

模式匹配 kmp AC 自动机 串比较的随机算法

Miller_Rabin

Link

posted @ 2021-02-01 11:11  ylxmf2005  阅读(63)  评论(0)    收藏  举报