算法时空-随机化分析算法

概率分析与随机化算法

1. 指示随机变量

  • 记某件事为A,定义Xa = I{A}为事件A的指示变量,并且其取值只能为0或者是1;0表示A事件未发生,1表示A发生;
  • 样本空间 N = {n1, n2, n3…};记为所有的样本情况;

可得出引理:E[Xa] = P{A} ;


2. 雇佣问题

  • 公司要雇佣一名员工,从n位员工中先面试再雇佣,最终得出能力最优秀的那一位。面试费用Ct,雇佣费用Ch,要求得出最经济的方式;
  • 雇佣过程为,依次对所有人进行面试,如果一开始无人被雇佣,那么雇佣第一个员工;如果已经雇佣了某一位员工,那么比较当前员工是否比已雇佣员工能力强,是的话则解雇老员工,雇佣当前员工,否的话则继续下一轮面试;

每次雇佣费,不仅包含解雇上一个员工,还包括雇佣新员工的费用,所以成本比面试费用多得多。这里单纯从经济上考虑,总的成本 W = nCt + mCh,其中的m即为总过程中发生了m次雇佣(最坏情况是 m = n);那么如何对雇佣问题的成本进行一般性分析?

  1. 记Xi = I {第 i 号员工被雇佣},其取值只能为1,或者是0;即E[Xi] = 1表示第i号员工被雇佣的期望是1;
  2. 而P{Xi}即第i号员工被雇佣的概率(为1/i)该如何计算?已经面试了i-1个员工,而在面试第i个员工时进行雇佣,意味着第i个员工的能力值是最高的,根据输入n位员工的能力随机化分布,那么前面i位员工里,最高的那位出现在任意一位的概率都是1/i,所以其在第i位员工被雇佣的概率值也易知为1/i;
  3. 现在依次考虑1~n号员工,得出这一批面试中,雇佣次数的期望 m 为:
    在这里插入图片描述
  4. 因此,得出结论,只要保证了n位员工的输入顺序为随机化分布,就可以保证是在对数级别的雇佣次数内完成对成本的控制;
  5. 如何保证输入是随机化分布?每次的自然情况下的多次输入可能还是一连串的最坏的情况, 注意此时的平均运行时间并不是我们所要求的期望运行时间,我们需要自行设计一个随机化算法,保证输入的随机化分布。

3. 随机化算法

3.1 随机排布数组

  • 从1~n里头有放回的先后取两个数,他们相同的概率为 1/n ,不同的概率是(1-1/n);如何是3个数完全不同的概率呢?k个数完全不同的高概率呢?
  • 可以这样考虑,依次对1~k个数进行分析,第一个数不同的概率是1,第二个进来时,2个数不同的概率是 1*(1-1/n),第3个数进来时,总共3个数,完全不同的概率是1*(1-1/n)(1-2/n),因此,k个数完全不同的概率为(1-1/n)(1-2/n)(1-3/n)(1-(k-1)/n);

随机数组,就是先生成一个随机优先级的数组和对应元素绑定,然后利用数组大小对对应元素进行排序,最终可以将输入元素进行随机化处理,以达到目的;该算法证明可以等可能的产生{1,2…n}中的任意一个随机排列,因此证明是可行的,不过必须保证随机数得从[1,n^3]中随机产生才行。

3.2 洗牌算法

之前的随机数组方法,产生随机数时,n^3过大,很容易越界,不易于操作,洗牌算法能较好的较快又方便的完成这项任务。

  • 对于 1~n 个元素,下标从0到 n-1 标定,然后从后往前,i 取 n-1 到 1,考虑第i个元素时,从[0,i)任意挑一个和第i元素进行互换。

其中之前面试时,也有被问到你知道哪些洗牌的算法,这就是最基础最常见的一种洗牌算法了。


4. 生日悖论

一个屋子到底需要达到多少人,才会满足存在两个人生日相同的概率超过1/2? 这个答案真的没有想象的那么大,运用数学的概率知识就很容易求解出来;

  1. 不妨假设屋子里有k个人,样本空间为S={1,2…365},总共大小为 n = 365;
  2. 考虑存在两个人生日相同的概率,不如考虑反面来的方便,即求算所有人生日完全不相同的概率P,那么存在两个人生日相同的概率即为(1-P),如之前提到的k个数完全不同的概率是 P1 = (1-1/n)(1-2/n)(1-3/n)(1-(k-1)/n);
  3. 要满足 P = 1 - P1 > 0.5,即 P1 < 0.5;由于(1+x)<e^x(在R内都成立),所以上面P1< e^(-1/n) * e^(-2/n) * … * e^(-(k-1)/n) = e^(-k(k-1)/2n) < 0.5;可最终得到 k>=23即可以满足条件~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值