5. Probabilistic Analysis and Randomized Algorithms——Introduction to Algorithms Third Edition
来源:互联网 发布:js复制对象副本 编辑:程序博客网 时间:2024/05/20 19:19
Chapter 5. Probabilistic Analysis and Randomized Algorithms
本章围绕 Hiring Problem(雇用问题)展开讨论,雇用问题是指在依次求职的面试者中,选出比当前在职者优秀的并替换之,问平均替换的次数。从程序上来说就是扫一遍数组的问题,但结合实际情况辞退一个人要比面试的代价高得多,因此问题的注意力集中在替换的次数而非面试的次数。类比于找最大值,就是要问遍历过程中赋给最大值语句的执行次数。
要点:Probabilistic Analysis, Randomized Algorithms, Uses. (概率分析,随机算法,应用)
- Probabilistic Analysis
我觉得本章之前有必要回顾下基本的概率论知识。(参考附录C)
在进行概率分析之前,需要对问题的输入情况进行假设,对于雇用问题,需要假设依次来面试者的水平是随机的,也就是说如果提前知道他们所有人的水平,输入的序列等可能的等于n!排列里面的任意一个,称之为uniform random permutation。
Indicator random variables(0-1随机变量),指随机变量X的取值不是0就是1。如果是等概率0-1随机变量,那么其期望,即一次试验中X=1事件的期望E[X]=1/2。再设随机变量Y为试验n次,其中X=1事件发生的次数,那么Y就等于0-1变量X的值的和,类似于伯努利试验的二项式分布,其期望E[Y]=n/2。
由此来分析雇用问题:设雇用问题中随机变量Y表示替换次数,0-1变量X=1表示本次面试后雇佣,分析过程与上面类似,但不同的是第i次雇佣的概率不再是1/2,而是1/i,故得到的结果是E[Y]=lnn+O(1)。
- Randomized Algorithms
要说随机算法是个比较水的东西,有了前面的讨论,概率分析唯一需要做的假设是问题的输入需要符合一定的概率分布,而随机算法为了去掉这种假设,在程序中引入随机数来打乱输入,因此就不用假设输入的概率分布。而在本书中,用概率分析得到的复杂度称为average-case cost,用随机算法得到的称为expected cost。
另一个值得讨论的问题是,如何让程序随机打乱输入?书中介绍了两种方法,第一种给每一个元素赋于一个随机数,然后排序,并且证明了这种算法可以等概率的得到n!个排列中的任意一个。第二种是一种本地排列算法,扫一遍数组,每次从其右边的序列里随机找一个元素与自己替换。(参考std::random_shuffle,例题5.3-2类似但完全不同,还有一个类似概率问题叫蓄水池抽样算法,其主要解决从动态增加集合中等概率选出部分数)
- Uses
5.4节最后这几个问题值得一看,证明复杂的,感受下答案也不错。
第一个问题The birthday paradox,得到两种结果,一个解释了k个人生日都不同的概率最多是1/2的k的取值(k>=23);第二个给出了k个人中生日相同的人数的期望表达式:k(k-1)/2n。主要记住,这两个情况复杂度都是Θ(sqrt(n))
杂碎:
- editing
- 5. Probabilistic Analysis and Randomized Algorithms——Introduction to Algorithms Third Edition
- Algorithm 3: Probabilistic Analysis and Randomized Algorithms
- 5. Exercises and Problems——Introduction to Algorithms Third Edition
- 写在前面的话——Introduction to Algorithms Third Edition
- 2. Getting Started——Introduction to Algorithms Third Edition
- 2. Exercises and Problems——Introduction to Algorithms Third Edition
- 4. Divide-and-Conquer——Introduction to Algorithms Third Edition
- 4. Exercises and Problems——Introduction to Algorithms Third Edition
- C. Counting and Probability——Introduction to Algorithms Third Edition
- 伪代码排版包 clrscode3e——Introduction to Algorithms Third Edition
- 3. Growth of Functions——Introduction to Algorithms Third Edition
- 《Introduction to Algorithms》Second Edition
- Introduction to The Design and Analysis of Algorithms (1)
- Introduction to The Design and Analysis of Algorithms (2)
- Introduction to Algorithms, Second Edition _ONE (Adding)
- About Introduction to Algorithms
- Introduction to Algorithms
- Introduction to Algorithms
- 淺談模式"mode”與文字編輯的技術與學習
- ALSA Soc音频驱动分析
- 剖析web服务原理--简单的Web服务器模拟
- 开发Struts 2项目遇到的一个问题,就是在struts-tags标签库下没有了s:datetimepicker标签的解决办法
- Javascript+PHP实现在线拍照功能
- 5. Probabilistic Analysis and Randomized Algorithms——Introduction to Algorithms Third Edition
- 约瑟夫环问题(Josephus)
- 《数论及应用》第6章 乘性函数问题(上)
- 铁道部新客票系统设计(一)
- Struts2中的ActionContext
- UDA1341声卡驱动 madplay 播放
- 铁道部新客票系统设计(二)
- javascript小知识
- Thinkphp常用系统配置大全