zoukankan      html  css  js  c++  java
  • 概率期望问题总结(2)

    概率期望问题总结(2)

    前言

    之前写的那一篇在这里:戳戳!
    今天叉姐来CJ讲课,内容为期望概率问题......
    然后就有了这一篇博客,STO 叉姐 ORZ !!!

    递推式思想(Dag思想)

    例题:
    有一个(m)个面的骰子,问:
    ( 1 ) 连续扔出n次相同的就结束,问期望次数。
    ( 2 ) 连续扔出n次不同的就结束,问期望次数。
    (n,m leq 10^6)

    显然逆推比较好设终止状态的期望((f_n=0)),所以逆推。
    以第一问为例。
    (f_i)表示已经连续扔出了(i)个相同的,期望还需要扔多少步。
    转移:

    [f_i = frac{1}{m}f_{i+1} + frac{m-1}{m}f_1 + 1 ]

    按照叉姐的说法: 把状态看成一个图,那么每个点对应的向外连边。
    同理第二问:
    (g_i)表示已经连续扔出了(i)个不相同的,期望剩余步数。
    转移:

    [g_i = frac{m-i}{m} g_{i+1} + sum_{k=1}^i g_k + 1 ]

    很有道理的样子.....但是怎么算这个式子呢?

    方程思想

    以第一问为例:(f_i = frac{1}{m}f_{i+1} + frac{m-1}{m}f_1 + 1)
    带入(i = 1) , 有(f_1 = frac{1}{m}f_2 + frac{m-1}{m}f_1 + 1)
    所以(f_2)可以表示为(f_2 = af_1 + b)
    显然(f_3)也可以类似表示为(f_3 = af_2+b = a'f_1 + b')
    所以(f_2) ~ (f_n)都可以表示为(af_1 + b)
    而已知(f_n) = 0 , 所以就可以把(f_1)给直接解出来了。
    而显然(f_0 = f_1 + 1),因为不管扔到多少,(f_0)都可以转移到(f_1)
    所以答案(f_0)也就解除来了。

    差分思想

    咳咳......据说上面这种做法会爆精度啊,怎么办呢?
    (f_i = frac{1}{m}f_{i+1} + frac{m-1}{m}f_1 + 1)
    类似错位相减,
    (f_{i+1} = frac{1}{m}f_{i+2} + frac{m-1}{m}f_1 + 1)
    然后上下相减:
    (f_{i+1} - f_i = frac{1}{m}(f_{i+2} - f_{i+1}))
    (f_1 - f_0 = 1)
    嗯,我们好像知道了任意两个相邻的(f)之间的差值了啊。
    所以$f_0 = f_n + sum_{i=0}^{n-1} frac{1}{m^i} $,直接算即可。
    类似的,第二问可以推出:

    [g_0 = g_n + 1 + sum_{i=0}^{n-2} prod_{j=0}^i frac{m}{m-1-j} ]

    这个还是蛮重要的,很多题目都要用到。

    抽牌小公式

    一个小公式:
    如果有(n)张牌,抽出第(i)张牌的概率为(p_i)
    那么,当规则为抽到第(i)张牌就停止时,期望步数为(frac{1}{p_i})

    (Min)-(Max)容斥

    例题
    (n)种卡片,抽到第(i)种的概率为(p_i),求集齐所有卡片的期望步数。
    (nleq 20)

    当时讲课时我来了一句:这不是傻逼题吗?状压再移项即可。
    然后叉姐来了一句骚话:你能不开数组A掉这题吗?
    接着(laofu)接了一句:还是要开一个大小为20的数组存(p)的吧....
    现场一篇死寂.....
    正经一点,介绍以下(Min)-(Max)容斥。
    公式先摆出来:

    [E(max{S}) = sum (-1)^{|S'|+1} E(min{S'}) , S' in S ]

    是不是看起来很NB啊。
    其中:
    (max{S})表示(S)集合中最晚出现的元素。
    (min{S})表示(S)集合中最早出现的元素。
    (E)表示期望要走多少步。
    它的优点是把求(Max)(一般不好求) 变为了求(Min)(一般贼水)。
    这题呢?
    本题的目标是求(E(max{全集}))
    (E(min{S'}))表示全集的某个子集中出现任意一个元素的期望步数。
    例如:(min{x_1,x_2,x_3})的概率为( p_{x_1} + p_{x_2} + p_{x_3})
    还记得抽牌小公式吗?所以(E(min{x_1,x_2,x_3}) = frac{1}{p_{x_1} + p_{x_2} + p_{x_3}})
    然后直接套公式容斥一下即可。

    赌徒输光问题(Gambler Ruin)

    例题
    在数轴上有一个点(a),每一步有(p)的概率+(1),((1)-(p))的概率-(1)
    现在问在到达0之前到达(a+b)点的概率(即到达0点就gg了)。

    是不是很像两个人在赌钱,看谁先让对手输光?
    怎么解呢? 先列出递推式,设(f_i)表示现在在(i)点且最终达成目标的概率:

    [f_i =pf_{i+1} +(1-p)f_{i-1} ]

    化式子:

    [[ p +(1-p) ]f_i = pf_{i+1} + (1-p)f_{i-1} ]

    移项:

    [p(f_{i+1}-f_i) = (1-p)(f_{i} - f_{i-1}) ]

    所以:

    [f_{i+1} - f_i = frac{1-p}{p} (f_i - f_{i-1}) ]

    其中(f_0 = 0) , (f_{a+b} = 1)
    嗯,设(f_1-f_0 = delta) , 那么可以依次递推出(f_2-f_1)(f_3-f_2).....
    最后整理一下可以得到:

    [f_a = frac{f_a-f_0}{f_{a+b}-f_0} = frac{1-(frac{1-p}{p})^a}{1-(frac{1-p}{p})^{a+b}} ]

    当然这是(p!=frac{1}{2})的情况。
    (p = frac{1}{2})时,不做等比数列求和,直接带入原式可得:(f_a = frac{a}{a+b})

    陷阱问题

    从刚才的赌徒输光问题衍生出来的:
    注意到(p = frac{1}{2})的时候其实是很值得玩味的。
    我们可以把它扩展一下:
    对于一个点(a),左侧距离它(d_{left})的地方有一个陷阱(L),右侧距离(d_{right})的地方有一个陷阱(R)
    掉入某个陷阱后就出不来了,每一时刻点(a)等概率的+1或-1。
    那么(a)点掉进陷阱(L)的概率(E(L))与掉进(R)的概率(E(R))为:

    [frac{E(L)}{E(R)} = frac{d_{right}}{d_{left}} , E(L)+E(R)=1 ]

    不是特别难推,更赌徒输光一样的差分搞一搞即可。

    无向图公式

    给定一个无向图(保证不为二分图),
    初始在某个点放一个硬币,每一时刻硬币等概率向某个方向移动或不动。
    那么走了无穷多步后,最终停在(u)的概率为:

    [pi(u) = frac{degree(u) + 1}{|V| +2|E|} ]

    如果是二分图?
    如果初始放点位置是随机的,那么也满足这个公式,否则不满足。

  • 相关阅读:
    数据库——生成数据字典
    某物抓数据出现验证码的解析思路
    codeforces 1579G Codeforces Round #744 (Div. 3)
    10.12JDBC之DAO及其实现类
    10.06JavaWeb之PreparedStatement进行数据表CRUD练习
    10.09JavaWeb之JDBC后程
    10.06JavaWeb之PreparedStatement向表中插入Blob类型数据
    9.29JavaWeb之JDBC之查询操作流程
    9.30JavaWeb之PreparedStatement获取任意一个对象的属性值
    9.24JavaWeb之PreparedStatement
  • 原文地址:https://www.cnblogs.com/GuessYCB/p/8673281.html
Copyright © 2011-2022 走看看