zoukankan      html  css  js  c++  java
  • 面试中的概率问题

    问题描述:

    这个笔试题来自今年的知名游戏公司,因为签了保密协定,为了避免麻烦,自行改编一下。

    在一款游戏中,武器等级可以分为0-7级,武器每次升级需要一块宝石,每次升级可能出现三种情况:升一级、保持不变、降一级

    已知i->i+1升一级概率为Ai,保持不变概率为Bi,降一级概率为Ci。

    A0~A7,B0~B7,C0~C7均已知,其中从等级0到等级1必定成功,即A0=1,B0=0,C0=0

    现在问你将武器从0级升级到3级需要的宝石数的期望?

    如果大家在看这篇博文之前,没有阅读我之前的博文:面试题中的概率问题-数学期望(1),请大家先去看看,主要关注【数学期望中的递归特性

    分析过程:

    设f(x,y)表示从x升级到y的宝石数期望,则:

    f(0,3)  =  1 + f(1,3)

    f(1,3)  =  A1*(1+f(2,3)) + B1*(1+f(1,3)) + C1*(1+f(0,3))

    f(2,3) =  A2*1 + B2*(1+f(2,3)) + C2*(1+f(1,3))

    很明显,这是一个三元一次方程组,必定可以计算出f(0,3),f(1,3),f(2,3)

    其中f(0,3)为最终的答案

    其实,这个思想并不难,关键是有没有想到,下面做简单分析

    • f(0,3)用一块宝石升级到1级后,继续的期望是f(1,3) =>  f(0,3) = 1 +f(1,3)
    • f(x,y)用一块宝石升级一次后,有Ax的概率升一级,之后期望为f(x+1,y),这部分为Ax*(1+f(x+1,y)),之后部分类似分析,即可得到 f(x,y) = Ax*(1+f(x+1,y)) + Bx*(1+f(x,y)) + Cx*(1+f(x-1,y)),关于x与y的大小,还有一些边界就自己去考虑吧
    • f(x,x)为0

    最终答案:

    如果我们令[A0,B0,C0] = [1,0,0] ,[A1,B1,C1] = [1/3,1/3,1/3],[A2,B2,C2] = [1/9,4/9,4/9] ,那么f(0,3) = 30  f(1,3) = 29   f(2,3) = 25

    注意,根据我们上面简单分析中的第二条f(x,y)的计算,其实可以解决升级到任意等级的需要的宝石数,包括将最高等级扩展到N,只要有对应的[Ai,Bi,Ci],因为实际上最后问题都是一个方程组,可以编程来解决,参考矩阵的相关知识,见数值计算。

  • 相关阅读:
    Spring事务的一些基本知识(一)
    Redis管道
    Spring事务的一些基本知识(四)大事务的危害与优化
    登录页面测试点
    朋友圈点赞用例的设计点
    面向对象
    函数的重载
    构造代码块和静态代码块,构造函数的执行
    单例设计模式
    三分查找(2020icp南京F)
  • 原文地址:https://www.cnblogs.com/lakeone/p/5155664.html
Copyright © 2011-2022 走看看