第十章_概率_2019-03-30

介绍

1.在笔试面试中常作为客观问题出现(选择题)。
2、在笔试中往往出现概率、期望的计算。
3、往往利用古典概率进行计算(组合数学)。

概率的应用

1、利用概率改进著名算法(快速排序)
利用概率产生比较好的划分值,最终使算法的期望时间复杂度为O(n * logn),所以概率一般用来打乱输入,打乱输入之后算法的复杂度和输入的分布没有关系,这样从概率上放置最坏情况的出现
2、随机数发生器
要产生纯随机序列是一个比较难的过程,通常面试中会给定一个随机数的发生器,让面试者利用这个发生器构造出另一个随机数的发生器,工程中,概率主要用于随机采样,即面试中会问如何利用一个随机数的发生器对一批数据进行采样。

经典题

  • 有8支球队,其中有3支强队和5支弱队,随机把它们分成4组进行比赛,则强强相遇的概率是多少
    1、总共的分法有:7 * 5 * 3 * 1 = 105种
    2、两强不相遇的分法有: 种
    3、两强相遇的概率为 (105 - 60) / 105
  • 3只蚂蚁,从正三角形的三个顶点出发,它们移动的速度相同,则碰头的概率是多少
    1、总共有23种走法
    2、不相遇的走法有2种
    3、相遇的概率为:(8 - 2) / 8
  • 一个地区重男轻女,每个家庭都是一直生小孩直到生男孩为止,问在足够长的时间后,该地区的男女比例是多少
    n / 2的家庭生了一个男孩,孩子数位1
    n / 4的家庭生了一个女孩一个男孩,孩子数位2
    n / 8的家庭生了两个女孩一个男孩,孩子数位3
    ……
    n / 2k的家庭生了k - 1个女孩一个男孩,孩子数位k
    则足够长的时间后该地区孩子总数为1 * n / 2 + 2 * n / 4 + 3 * n / 8 + …… + k * n / 2k = 2 * n
    每个家庭有一个男孩,所以共有n个男孩,所以男女比例为1 :1
  • 给定一个等概率随机产生1 ~ 5的随机函数f(n),除此之外不能再用其他随机机制,请实现随机产生1 ~ 7的随机函数
    1、f'(n) = f(n) - 1:产生0 ~ 4的随机数
    2、f(n) = 5 * f'(n):随机产生0、4、8、12、16、20中的数
    3、f(n) = f(n) + f'(n):产生0 ~ 24的随机数
    4、用f(n)可产生1 ~ 20中的随机数(如产生随机数大于20则舍弃)
    5、f(n) = f(n) % 7:产生0 ~ 6之间的随机数
    6、f(n) = f(n) + 1:产生1 ~ 7之间的随机数
    其实这道题左神没有讲清楚本质,这道题本质就是得到一串均匀分布且长度大于等于7的连续序列即可(必须连续,这样才能保证对7取余后得到的0~6等概率),在这个序列里选中7个(或7的倍数个),若得到的数不是这7个中的,重新产生。这样这7个数的概率肯定是相同的。
  • 给定以p概率产生0,以1 - p概率产生1的随机函数,p固定且未知,请实现等概率产生0 1随机数的随机函数,不可以使用额外的随机机制
    1、利用随机函数产生两个数,则产生序列为0 1和1 0的概率相等且为:p * (1 - p)
    2、两次利用随机函数产生一个序列,若产生0 1记0,若产生1 0记1,其他则舍弃
  • 给定f(),等概率返回一个在[0, 1)区间的浮点数,则出现[0, x)区间数的概率为x,现给定一个属于0的整数k,请实现一个返回[0, 1)范围上数的函数,但[0, x)上数出现的概率为xk
    调用函数f()k次,产生k个结果,返回所有结果中最大的那个数,如果返回值在[0, x)区间,则k次调用结果都在[0, x)区间,这种情况发生的概率为xk
  • 给定一个长度为n,且没有重复元素的数组arr和一个整数m,实现函数等概率打印arr中的m个数
    此题为无放回采样,实现过程中只需要产生采样区间内的随机数i,然后将arr[i]和采样区间的最后一个数交换,然后采样区间从尾部缩短一,重复这样的操作,直到采样数位m即可
  • 有一个机器可以依次从小到大吐出按自然数编号的球,假设有一个袋子最多可以装入k个球,每次从袋子中倒出球后不可恢复,当机器一共吐出N个球时,袋子里共有k个球,请设计算法调整袋子中的球,使吐出的N个球中被选入袋子中的概率为k/N
    蓄水池抽样算法
    1、处理1~k号球时,直接放进袋子里。
    2、处理第i号球时,以k/i的概率的概率将球放入袋子,同时以1/k的的概率从袋子中扔掉任意一个球(随机扔掉任意一球),如果不把第i号球入袋则直接扔掉i号球
    • 证明:
      • 当1 1、吐出k + 1号球时i号球还在袋子里的概率为:1 - (k + 1号球被选中入袋的概率 * i号球被选中出袋的概率),即:

        吐出k + 2号球时i号球还在袋子里的概率为:1 - (k + 2号球被选中入袋的概率 * i号球被选中出袋的概率),即:

        吐出k + 3号球时i号球还在袋子里的概率为:1 - (k + 3号球被选中入袋的概率 * i号球被选中出袋的概率),即:

        ……
        吐出N号球时i号球还在袋子里的概率为:1 - (N号球被选中入袋的概率 * i号球被选中出袋的概率),即:

        2、从1 ~ N号球的过程中第i号球一直存在的概率为:吐出k + 1号球时i在袋子里的概率 * 吐出k + 2号球时i在袋子里的概率 * 吐出k + 3号球时i在袋子里的概率 * …… *吐出N号球时i在袋子里的概率 *,即:
      • 当k 1、吐出i + 1号球时i号球还在袋子里的概率为:1 - (i + 1号球被选中入袋的概率 * i号球被选中出袋的概率),即:

        吐出i + 2号球时i号球还在袋子里的概率为:1 - (i + 2号球被选中入袋的概率 * i号球被选中出袋的概率),即:

        吐出i + 3号球时i号球还在袋子里的概率为:1 - (i + 3号球被选中入袋的概率 * i号球被选中出袋的概率),即:

        ……
        吐出N号球时i号球还在袋子里的概率为:1 - (N号球被选中入袋的概率 * i号球被选中出袋的概率),即:

        2、从i + 1 ~ N号球的过程中第i号球一直存在的概率为:吐出i + 1号球时i在袋子里的概率 * 吐出i + 2号球时i在袋子里的概率 * 吐出i + 3号球时i在袋子里的概率 * …… *吐出N号球时i在袋子里的概率 *,即:

所以蓄水池抽样算法符合题意

你可能感兴趣的:(第十章_概率_2019-03-30)