我是靠谱客的博主 无语小兔子,这篇文章主要介绍【ALGO】概率和期望基本公式例题,现在分享给大家,希望可以做个参考。

文章导航

  • 基本公式
    • 概率加法公式
    • 概率并
    • 全概率公式
    • 马尔科夫不等式
    • 切比雪夫不等式
    • 二项分布
    • 几何分布
  • 例题
    • ACW 217. 绿豆蛙的归宿
      • 题面
      • 解析
      • AC代码
    • ACW 218. 扑克牌
      • 题面
      • 解析
      • AC代码

基本公式

概率加法公式

P ( A ∪ B ) = P ( A ) + P ( B ) − P ( A ∩ B ) P(Acup B)=P(A)+P(B)-P(Acap B) P(AB)=P(A)+P(B)P(AB)

概率并

P ( A ∪ B ) ≤ P ( A ) + P ( B ) P(Acup B)leq P(A)+P(B) P(AB)P(A)+P(B)

全概率公式

B 1 B 2 … B n B_1B_2dots B_n B1B2Bn是样本空间 S S S中互不相交的一系列事件,并且满足 S = ⋃ k = 1 n B k S=bigcup_{k=1}^n B_k S=k=1nBk,那么对于任意事件 A A A
P ( A ) = ∑ k = 1 n P ( A ∣ B k ) P ( B k ) P(A)=sum_{k=1}^nP(A|B_k)P(B_k) P(A)=k=1nP(ABk)P(Bk)

马尔科夫不等式

假设 X pmb{X} XXX是只取非负值的随机变量,对于任意 α > 0 alpha>0 α>0,有
P ( X ≥ α ) ≤ E ( X ) α P(pmb{X}geq alpha)leqfrac{mathbb{E}(pmb{X})}{alpha} P(XXXα)αE(XXX)

切比雪夫不等式

对于任意随机变量 X pmb{X} XXX以及任意 α > 0 alpha>0 α>0, 有
P ( ∣ X − E ( X ) ∣ ≥ α ) ≤ v a r ( X ) α 2 P(|pmb{X}-mathbb{E}(pmb{X})|geq alpha)leq frac{var(pmb{X})}{alpha^2} P(XXXE(XXX)α)α2var(XXX)

二项分布

二项分布的概率函数满足
p ( k ) = ( n k ) p k ( 1 − p ) n − k p(k)=left(begin{aligned}n\kend{aligned}right)p^k(1-p)^{n-k} p(k)=(nk)pk(1p)nk
期望
E [ X ] = E 1 [ X ] + ⋯ + E n [ X ] = n p mathbb{E}[pmb{X}]=mathbb{E}_1[pmb{X}]+dots+mathbb{E}_n[pmb{X}]=np E[XXX]=E1[XXX]++En[XXX]=np
方差
v a r [ X ] = n p ( 1 − p ) var[pmb{X}]=np(1-p) var[XXX]=np(1p)

几何分布

该分布源于投掷硬币 n n n次,假设每一次有 p p p概率正面朝上, 直到第 k k k次出现正面的概率,概率函数为
p ( k ) = p ( 1 − p ) k − 1 p(k)=p(1-p)^{k-1} p(k)=p(1p)k1
通过递归方程计算期望
E [ X ] = p + ( 1 − p ) ( E [ X ] + 1 ) mathbb{E}[pmb{X}]=p+(1-p)(mathbb{E}[pmb{X}]+1) E[XXX]=p+(1p)(E[XXX]+1)
期望
E [ X ] = 1 p mathbb{E}[X]=frac{1}{p} E[X]=p1
方差
v a r [ X ] = 1 − p p 2 var[X]=frac{1-p}{p^2} var[X]=p21p

例题

ACW 217. 绿豆蛙的归宿

题目链接

题面

给出一个有向无环的连通图,起点为1终点为 N N N,每条边都有一个长度。绿豆蛙从起点出发,走向终点。
到达每一个顶点时,如果有 K K K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1 / K 1/K 1/K
现在绿豆蛙想知道,从起点走到终点的所经过的路径总长度期望是多少?

解析

不妨设从点 i i i到终点的距离期望为 f i f_i fi,从起点开始一步可达的点为 s i s_i si,距离为 d i d_i di,因此期望表达式为
f s = 1 K ∑ i = 1 k f s i + d i f_s=frac{1}{K}sum_{i=1}^kf_{s_i}+d_i fs=K1i=1kfsi+di
使用记忆化递归算法求解

AC代码

#include <cstring>
#include <iostream>
#include <iomanip>
using namespace std;

const int N=100005;
const int M=200005;

int head[N], dout[N];
int n, m, E=0;
double f[N];
struct{int v, ne, w;}e[M];
inline void add(int a, int b, int c){
    e[E].v=b;
    e[E].ne=head[a];
    e[E].w=c;
    head[a]=E++;
}

double dp(int u){
    if(f[u]>=0) return f[u];
    if(u==n) return f[u]=0;
    f[u]=0;
    for(int i=head[u]; ~i; i=e[i].ne){
        int v=e[i].v;
        f[u]+=(e[i].w+dp(v))/dout[u];
    }
    return f[u];
}

int main(){
    memset(dout, 0x00, sizeof dout);
    memset(head, -1, sizeof head);
    cin>>n>>m;
    for(int i=0; i<m; ++i){
        int a, b, c;
        cin>>a>>b>>c;
        add(a, b, c);
        dout[a]++; // 出度
    }
    memset(f, -1, sizeof f);
    cout<<fixed<<setprecision(2)<<dp(1)<<endl;
    return 0;
}

ACW 218. 扑克牌

题目链接

题面

Rainbow把一副扑克牌(54张)随机洗开,倒扣着放成一摞。然后Admin从上往下依次翻开每张牌,每翻开一张黑桃、红桃、梅花或者方块,就把它放到对应花色的堆里去。
Rainbow想问问Admin,得到 A A A张黑桃、 B B B张红桃、 C C C张梅花、 D D D张方块需要翻开的牌的张数的期望值 E E E是多少?
特殊地,如果翻开的牌是大王或者小王,Admin将会把它作为某种花色的牌放入对应堆中,使得放入之后 E E E的值尽可能小。

解析

关键是定义大小王的状态,不妨设 x x x表示小王, y y y表示大王,则他们有5种状态, 0 ∼ 3 0sim 3 03表示放到四种花色的牌堆中, 4 4 4表示还未被翻出来.
定义状态 f [ a ] [ b ] [ c ] [ d ] [ x ] [ y ] f[a][b][c][d][x][y] f[a][b][c][d][x][y]表示红桃,黑桃,梅花,方片,小王,大王的状态,因此当前已经摆放的牌数为
S = a + b + c + d + ( x ! = 4 ) + ( y ! = 4 ) S=a+b+c+d+(x!=4)+(y!=4) S=a+b+c+d+(x!=4)+(y!=4)
剩余牌数量为 54 − S 54-S 54S
所以可以绘制出以下状态转移表格

花色转移概率
红桃 13 − a 54 − S × f [ a + 1 ] [ b ] [ c ] [ d ] [ x ] [ y ] frac{13-a}{54-S}times f[a+1][b][c][d][x][y] 54S13a×f[a+1][b][c][d][x][y]
黑桃 13 − b 54 − S × f [ a ] [ b + 1 ] [ c ] [ d ] [ x ] [ y ] frac{13-b}{54-S}times f[a][b+1][c][d][x][y] 54S13b×f[a][b+1][c][d][x][y]
梅花 13 − c 54 − S × f [ a ] [ b ] [ c + 1 ] [ d ] [ x ] [ y ] frac{13-c}{54-S}times f[a][b][c+1][d][x][y] 54S13c×f[a][b][c+1][d][x][y]
方片 13 − d 54 − S × f [ a ] [ b ] [ c ] [ d + 1 ] [ x ] [ y ] frac{13-d}{54-S}times f[a][b][c][d+1][x][y] 54S13d×f[a][b][c][d+1][x][y]
大王 min ⁡ 1 54 − S f [ a ] [ b ] [ c ] [ d ] [ x ′ ] [ y ] minfrac{1}{54-S}f[a][b][c][d][x'][y] min54S1f[a][b][c][d][x][y]
小王 min ⁡ 1 54 − S f [ a ] [ b ] [ c ] [ d ] [ x ] [ y ′ ] minfrac{1}{54-S}f[a][b][c][d][x][y'] min54S1f[a][b][c][d][x][y]

AC代码

#include <cstring>
#include <iostream>
#include <iomanip>

using namespace std;

const int N = 15;
const double INF = 1e20;

int A, B, C, D;
double f[N][N][N][N][5][5];

double dp(int a, int b, int c, int d, int x, int y)
{
    double &v = f[a][b][c][d][x][y];
    if (v >= 0) return v;
    int as = a + (x == 0) + (y == 0);
    int bs = b + (x == 1) + (y == 1);
    int cs = c + (x == 2) + (y == 2);
    int ds = d + (x == 3) + (y == 3);
    if (as >= A && bs >= B && cs >= C && ds >= D) return v = 0;

    int sum = a + b + c + d + (x != 4) + (y != 4);
    sum = 54 - sum;
    if (sum <= 0) return v = INF;

    v = 1;
    if (a < 13) v += (13.0 - a) / sum * dp(a + 1, b, c, d, x, y);
    if (b < 13) v += (13.0 - b) / sum * dp(a, b + 1, c, d, x, y);
    if (c < 13) v += (13.0 - c) / sum * dp(a, b, c + 1, d, x, y);
    if (d < 13) v += (13.0 - d) / sum * dp(a, b, c, d + 1, x, y);
    if (x == 4)
    {
        double t = INF;
        for (int i = 0; i < 4; i ++ ) t = min(t, 1.0 / sum * dp(a, b, c, d, i, y));
        v += t;
    }
    if (y == 4)
    {
        double t = INF;
        for (int i = 0; i < 4; i ++ ) t = min(t, 1.0 / sum * dp(a, b, c, d, x, i));
        v += t;
    }
    return v;
}

int main()
{
    cin >> A >> B >> C >> D;
    memset(f, -1, sizeof f);
    double t = dp(0, 0, 0, 0, 4, 4);
    if (t > INF / 2) t = -1;
    cout<<fixed<<setprecision(3)<<t<<endl;
    return 0;
}

最后

以上就是无语小兔子最近收集整理的关于【ALGO】概率和期望基本公式例题的全部内容,更多相关【ALGO】概率和期望基本公式例题内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部