- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
概率相关面试题精讲 七月算法 曹鹏 2015年5月7日 */22 提纲 简介 题外话 面试题总体分析 一些例题 例1 关于独立的理解 例2 构造随机数发生器 例3 不均匀随机数发生器构造均匀 例4 随机变量的和 例5 水库采样 例6 随机排列产生——random_shuffle 例7 带权采样问题 总结 简介 概率 对“独立”事件的理解 古典概率 (计数、除法) 条件概率 期望 随机数产生和利用 (采样)* */22 题外话 随机数 随机数生成并不容易 “随机性”和“不可预测性” 固定m,自然数n % m 是“均匀”的,具有一定随机性,但密码学不采用它 一般假设已有一个均匀的随机数生成器 期望的计算 一般转化为方程组 E(A) = E(A1) * p1 + E(A2) * P2 +…+1 */22 面试题总体分析 概率 (简单) 概率、期望的计算: 笔试 随机数 产生:笔试、面试 利用:采样 相关算法 (快排) 面试 */22 例1 关于独立的理解 例1 X1,X2,都是二元随机变量,取值0和1的概率各一半,则X3= X1 xor X2,它与X1、X2独立。 分析: 枚举, {000,011,101,110},可见X1=0,1时各有一半情况X3=0,1。反直觉? 关于独立: 用定义P(A∩B) = P(A) * P(B) */22 例2 构造随机数发生器 例2 假设一个随机数发生器rand7均匀产生1到7之间的随机整数,如何构造rand10,均匀产生1-10之间的随机整数? 分析:关键在于,不想要的数可以扔,要保证“等概率”。 方法1 (笨方法) 1-7之间有4个奇数,3个偶数,我们扔掉一个奇数,比如7,这样剩余3个奇数,3个偶数产生的概率相同——我们构造了一个0-1整数的均匀产生器,用它产生4个bit,对应表示整数0..15, 保留1..10就可以了。 */22 例2 续 代码 */22 例2 续2 方法2 (聪明一点) 使用“七进制” : 我们把1-7减去1,变为0-6。产生一个两位的七进制数,对应0-48,我们把40-48扔掉(因为这只有9个数),其余按照个位数字分类,0-9对应我们要的1-10。 */22 例2 续3 关键问题 保证均匀,才能扔掉。 rand2() + rand2() – 1并不是均匀的1-3 1和3的概率是1/4, 2的概率是1/2 分析: 一个实验成功的概率是p,则不断实验直到一次成功的期望次数是1/p p * 1 + (1 – p) * (x + 1) = x 请计算方法1和2的期望循环次数 112/15和49/20 */22 例3 不均匀随机数发生器构造均匀 例3 一个随机数发生器,不均匀,以概率p产生0,以(1-p)产生1, (0p1),构造一个均匀的随机数发生器 (算法导论) 分析: 产生两次,(0,1)的概率与(1,0)的概率相同都是p * (1 – p)。 */22 例4 随机变量的和 例4 (笔试题) 实数随机变量x和y分别在[0,a]与[0,b]之间均匀分布(a和b是给定的实数),再给一个实数z,问x + y = z的概率? 分析x和y分布是一个矩形,求直线x + y = z下边在矩形内的面积与矩形本身的面积比。 */22 例5 水库(Reservoir)采样 例5 流入若干个对象(整数),事先不知道个数。如何随机取出k个 (k小于总数)? 算法:用一个数组a保存k个数 a[0..k -1] 对于第i个元素(i = 1,2,…) 如果i = k: 则a[i -1]存放这个元素 否则:产生随机数x = rand() % i 若x k,则用a[x]存放这个元素(扔掉之前的元素) */22 例5 续 算法优点 不需要预先知道元素个数(可以一个一个流入) 证明,假设目前已经流入n k个元素, 第i( i = k)个元素被选中的可能性 1 * k / (k + 1) * (k + 1) / (k + 2) *…*(n -1) / n = k / n 第i (i k)个元素被选中的可能性 k / i * i / (i + 1) * (i + 1) / (i + 2) *…* (n – 1) / n = k / n */22 例5 续 思考与扩展 k == 1的特殊性 一个若干行的大文件,随机选择一行 一个不知道长度的链表,随机选择一个或者多个元素 带权采样——如果每个元素权重不同,如何办? 见例7 */22 例6 随机排列产生——random_shuffle 例6 用数组a[0..n -1]随机产生一个全排列 方法1—— 一般不符合要求 产生一个[1,n!]的
文档评论(0)