算法导论学习笔记-第五章-概率分析和随机算法

来源:互联网 发布:天涯骑白马的农民 知乎 编辑:程序博客网 时间:2024/04/28 12:06

总结:这章由雇佣问题引出了概率分析和随机算法。概率分析一般用于确定一些算法的运行时间。而随机化算法用来强行使算法的输入符合某种概率分布,随机化算法的行为不仅由输入决定,还要由一个随机数生成器所生成的值来决定。

 

1.    概率分析

可以利用指示器随机变量来进行概率分析,获得事件发生的期望值。

 

 

引理:给定样本空间SS中的事件A,令XA=I{A},则E[XA]=Pr{A}

 

2.    随机算法

概率分析是在输入上作了假设,而在随机算法中,随机发生在算法上,而不是发生在输入分布上,也就是对于同一个输入,由于引入了随机算法,最后的排列也会发生变化。这样做是使得“即使你最坏的敌人也无法产生最糟的输入数列,因为随机的排列使得输入次序不相关,只有在随机数生成器产生一个不幸运的置换时,随机算法才运行得不好”。

 

随机排列数组的方法

1)为数组的每个元素A[i]赋一个随机的优先级P[i],然后根据优先级对数组A中的元素进行排序。这里排序,将花费O(nlgn)的时间。

伪代码

PERMUTE-BY-SORTING

n <- length[A]

for i <- 1 to n

      do P[i]=RANDOM(1,n^3)

sort A, using P as sort keys

return A

 

 

引理:假设所有的优先级都是唯一的,过程PERMUTE-BY-SORTING可以产生输入的均匀随机排列。

 

2)原地排列给定的数列。在O(n)时间内完成。

伪代码

RANDOMIZE-IN-PLACE(A)

n <- length[A]

for i <- 1 to n

      do swap A[i] <-> A[RANDOM(i,n)]

 

引理:过程RANDOMIZE-IN-PLACE可以计算出一个均匀随机排列。

原创粉丝点击