• 期望自学


    最近觉得期望特别玄学,特地放个博客慢慢整理

    仅仅是给自己看,所以文中可能有很多概念性的(+就是错了)的错误,如果有大佬看见还望指出。。。

    期望的实际意义

    实验重复无数次的平均权值,随着发生次数的上升,最终平均值会无线接近一个数,期望

    我的理解

    加权平均数。。。

    [E(x) = sum p_i v_i ]

    由于这个性质,期望具有线性性,也就是 和的期望 = 期望的和

    [E(x_1 + x_2 + ...+ x_n) = E(x_1) +~ E(x_2) + ... +E(x_n) ]

    还有 (E(kx) = k E(x))

    这里的 (x_i) 是互不影响的事件

    注意, (E(x_1 x_2) != E(x_1)E(x_2))

    放到式子里就很好理解

    [E(x_1 x_2) = sum p_i v_{x_1}(i)v_{x_2}(i) ]

    [E(x_1)E(x_2) = sum p_i v_{x_1}(i) sum p_i v_{x_2}(i) ]

    比原来多出来一沓

    有一些题目算要求期望,概率很不好算,但是却可以用期望+走一步的概率倒着推出来,这个地方我觉着玄学的一批,很有道理又很没道理,放到以后解决吧

    要说期望还顶有概率,关于概率,除了有不连续的还有连续的

    关于连续有几个积分式子和定义

    一些定义

    (P(x), ans = x) 的概率
    (p(x) = f'(x), p(x)) 叫连续性随机变量的概率密度函数((p(x)) 越大说明随机变量是 (x) 的概率相对较大)
    (f(x), ans <= x) 的概率,叫连续形随机变量的概率分布函数

    • (tps:) 如果您要阅读请直接看下面的全概率公式(严谨证明)

    (thinking)

    如果我要求连续性随机变量落在 ([l, r]) 的概率,(P(l:r) = f(r) - f(l))

    有一个式子

    [f(x) = int_{-infty}^xp(x) dx ]

    [P(x) = f(x + dx) - f(x) ]

    [p(x) = frac {P(x)} {dx} = frac {f(x + dx) - f(x)} {dx} = f'(x) ]

    [f(x) = int_{-infty}^x df(x) = f(x) ]

    假如随机变量的范围是区间 ([l, r]) 落在 (x) 的权值就是 (x),这就更有意思了

    [E(x) = int_{l}^{r} i P(i) ]

    [= int_{l}^{r} x p(x) dx ]

    [= int_{l}^{r} x f'(x) dx ]

    [= int_{l}^{r} x d(f(x)) ]

    [= [xf(x)]_ l ^ r - int_{l}^{r} f(x) dx ]

    最后一步转化要怎么证呢 ? 一个想法是求出原函数

    [(xf(x))' = xf'(x) + f(x) ]

    [int_l^r (xf(x))'\, dx = int_l^r x f'(x) dx + int_l^r f(x) dx ]

    [int_l^r x d(f(x)) = [xf(x)]_l^r - int_l^r f(x) dx ]

    tps:后来才知道上面那玩意是全概率公式。。。

    还是简述一下(其实就是上面的东西,可跳过)


    全概率公式

    随机变量 (x) 的权值是 (x) 且随机落在区间 ([l, r]),设 $f(x) = $ 答案 (ge x) 的概率, 当 ([x(-f(x))]_l^{r+dx} = 0) 时有

    [E(x) = int_l^r f(x) dx ]

    (P(x)) 为随机变量恰好为 (x) 的概率,(p(x))(x) 的概率密度函数

    证明1

    [f(x) = int_x^r P(x) = int_x^rp(x)dx ]

    [P(x) = f(x) - f(x + dx) = -df(x) ]

    [p(x) = frac {P(x)} {dx} = -f'(x) ]

    [E(x) = int_l^r x P(x) ]

    [= int_l^r x p(x)dx ]

    [= int_l^r x(-df(x)) ]

    [(x(-f(x))' = -f(x) - xf'(x) ]

    [int_l^r (x(-f(x))' dx = -int_l^rf(x)dx + int_l^rx(-df(x)) ]

    [int_l^rx(-df(x)) =[x(-f(x))]_l^r + int_l^r f(x)dx ]

    考虑到积分余项,当 ([x(-f(x))]_l^{r+dx} = 0)(E(x) = int_l^r f(x) dx)

    证明2(有点抽象且不严格,看看就好)

    [E(x) = int_l^r x P(x) ]

    [=int_l^rx(f(x) - f(x + dx)) ]

    把这个式子一项一项展开

    [=int_l^r f(x) dx ]

    这个对于 (dx = 1) 的情况同样适用

    证毕


    下面放一道题

    P3343 [ZJOI2015]地震后的幻想乡

    题目大意: 每个边有一个 ([0, 1]) 的随机权值,求整张图联通的期望时间

    (P(t)) 为联通时间为 (t) 的概率,(p) 是概率密度函数,(f) 是概率分布函数 (f(t)) 表示联通时间 (> t) 的概率

    很显然题目要求

    [E(x) = int_0^1 x p(x) dx ]

    [=int_0^1 x (-df(x)) ]

    根据全概率公式

    [E(x) =int_0^1 f(x) dx ]

    问题来了,怎么求呢?

    我们将 (f(x)) 再加个定义 (f_s(x)) 表示几何为 (s) ((s) 是原图的子集,且 (1 in s)) 的子图联通时间 (> t) 的概率

    首先 (f_{{1}} = 0)

    [f_s(t) = sum_{s_0 subseteq s} (1 - f_{s_0}(t))(1 - t)^{|T(s_0, s - s_0)|} ]

    这里 (|T(s_0, s - s_0)|) 表示 (s_0)(s - s_0) 联通的边数,((1 - f_{s_0}(t)))(t) 时刻 (s_0) 已经联通的概率

    (all) 表示全集,这样可以把原式子写成

    [E(x) = int_0^1 f_{all}(x) dx ]

    [=int_0^1 sum_{s_0 subseteq all} (1 - f_{s_0}(x)) (1 - x)^{|T(s_0, all - s_0)|} ]

    [=sum_{s_0 subseteq all} int_0^1 (1 - x)^{|T(s_0, all - s_0)|} - int_0^1 f_{s_0}(x) (1 - x)^{|T(s_0, all - s_0)|} ]

    [=sum_{s_0 subseteq all} frac 1 {|T(s_0, all - s_0)| + 1} - int_0^1 f_{s_0}(x) (1 - x)^{|T(s_0, all - s_0)|} ]

    这显然是一个递归形式,它的边界是 (int_0^1 f_{{1}}(t) dt = 0)

    下面我们来看更一般的形式

    [int_0^1 f_s(t) (1 - t)^k dt ]

    [=sum_{s_0 subseteq s} (frac 1 {k + |T(s_0, s - s_0)| + 1} - int_0^1 f_{s_0}(t)(1 - x)^{k + |T(s_0, s - s_0|}) ]

    然后这道题就做完了

    初始情况为

    [int_0^1 (1 - t)^0 f_{all}(t) dt ]

    (code)

    #include <bits/stdc++.h>
    using namespace std;
    #define rg register
    // #ifdef ONLINE_JUDGE
    // char ss[1 << 17], *A = ss, *B = ss;
    // inline char gc(){ if(A == B){ B = (A = ss) + fread(ss, 1, 1 << 17, stdin); if(A == B) return EOF; } return *A++; }
    // #define getchar gc
    // #endif
    inline int read(){
        #define G ch = getchar()
        rg char G;
        rg int x = 0, f = 0;
        while(!isdigit(ch)) f |= (ch == '-'), ch = getchar();
        while(isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
        return f ? -x : x;
    }
    #define rep(i, a, b) for(int i = a; i <= b; ++i)
    #define pre(i, a, b) for(int i = a; i >= b; --i)
    const int N = 11, M = N * N;
    double f[1 << 10][M];
    int link[N], sz[1 << 10];
    int n, m;
    signed main(){
        n = read(), m = read();
        rep(i, 1, m){
            int x = read(), y = read();
            link[x - 1] |= 1 << (y - 1);
            link[y - 1] |= 1 << (x - 1);
        }
        int top = 1 << n;
        for(int i = 1; i < top; ++i) sz[i] = sz[i & (i - 1)] + 1;
        // rep(i, 0, m) f[1][i] = 0;
        for(int i = 2; i < top; ++i) if(i & 1){
            for(int s = (i - 1) & i; s; s = (s - 1) & i) if(s & 1){
                rg int ecnt = 0;
                rep(k, 0, n - 1) if((i >> k & 1) & ((~s) >> k & 1)) ecnt += sz[link[k] & s];
                rep(j, 0, m - ecnt) f[i][j] += 1. / (j + ecnt + 1) - f[s][j + ecnt];
            }
        }
        printf("%.6lf", f[top - 1][0]);
        // cout<<fixed<<setprecision(6)<<f[top - 1][0]<<endl;
        getchar(); getchar();
        return 0;
    }
    
  • 相关阅读:
    Smart Client智能客户端技术
    SaaS介绍
    SaaS介绍
    开源软件介绍
    SaaS介绍
    SaaS介绍
    开源软件介绍
    开源软件介绍
    GPUCUDA安装
    Linux 下的段错误(Segmentation fault)调试方法
  • 原文地址:https://www.cnblogs.com/XiaoVsun/p/13054147.html
Copyright © 2020-2023  润新知