首页 > 其他 > 详细

期望学习笔记

时间:2019-11-06 11:17:34      阅读:76      评论:0      收藏:0      [点我收藏+]

定义

  1. 数学期望(mean)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和,是最基本的数学特征之一。它反映随机变量平均取值的大小。
  2. 需要注意的是,期望值并不一定等同于常识中的“期望”——“期望值”也许与每一个结果都不相等。期望值是该变量输出值的平均数。期望值并不一定包含于变量的输出值集合里。
  3. CSP基本上只出现离散型。
  4. 如果随机变量只取得有限个值或无穷能按一定次序一一列出,其值域为一个或若干个有限或无限区间,这样的随机变量称为离散型随机变量。
    离散型随机变量的一切可能的取值与对应的概率乘积之和称为该离散型随机变量的数学期望(若该求和绝对收敛)。它是简单算术平均的一种推广,类似加权平均。

性质

  1. 设C为常数,则E(C)=C。
  2. 设X,Y是任意两个随机变量,则有E(X+Y)=E(X)+E(Y)。(X,Y有一个发生)
  3. 设X,Y是相互独立的随机变量,则有E(XY)=E(X)E(Y)。(X,Y共同发生)
  4. 设X是随机变量,C是常数,则E(CX)=CE(X)。
  5. E(aX+bY)=aE(x)+bE(y)

例题

crossing-river

分析

对于一条河,最小期望通过时间是L/vi,这时人刚到岸边船就来了;最大的期望通过时间是3L/vi,这时人刚到岸边船刚开走。由于期望线性性,平均时间是2L/vi。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
#include<cstring>
#include<algorithm>
#define lson x<<1
#define rson x<<1|1
#define ll long long
#define rint register int
#define mid  ((L + R) >> 1)
using namespace std;
template <typename xxx> inline void read(xxx &x) {
    char c = getchar(),f = 1;x = 0;
    for(;c ^ '-' && !isdigit(c);c = getchar());
    if(c == '-') c = getchar(),f = -1;
    for(;isdigit(c);c = getchar()) x = (x<<1) + (x<<3) + (c ^ '0');
    x *= f;
}
template<typename xxx>void print(xxx x)
{
    if(x<0){putchar('-');x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
const int maxn = 100010;
const int inf = 0x7fffffff;
const int mod = 1e9 + 7;
int n,D;
struct river{
    int ks;
    double L,vi;
}rv[maxn];
int main()
{
    int mk = 0;
    while(1) {
        ++mk;
        read(n);read(D);
        if(!n && !D) break;
        int tem = 0;
        double ans = 0;
        for(rint i = 1;i <= n; ++i) {
            scanf("%d%lf%lf",&rv[i].ks,&rv[i].L,&rv[i].vi);
            ans += 2*rv[i].L/rv[i].vi;
            tem += rv[i].L;
        }
        printf("Case %d: %0.3lf\n\n",mk,ans + D - tem);
    }
    return 0;
}
/*
*/

LOOPS

分析

设dp[i][j]表示从(i,j)到(n,m)的期望消耗,f[i][j][0]/[1]/[2]表示不动,向右,向下的概率。
\(dp[i][j] = f[i][j][0] * dp[i][j] + f[i][j][1] * dp[i][j+1] + f[i][j][2] * dp[i+1][j] + 2\)
整理后为\(dp[i][j] = (dp[i + 1][j] * f[i][j][2] + dp[i][j + 1] * f[i][j][1] + 2) / (1.0 - f[i][j][0])\)

#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
#include<cstring>
#include<algorithm>
#define lson x<<1
#define rson x<<1|1
#define ll long long
#define rint register int
#define mid  ((L + R) >> 1)
using namespace std;
template <typename xxx> inline void read(xxx &x) {
    char c = getchar(),f = 1;x = 0;
    for(;c ^ '-' && !isdigit(c);c = getchar());
    if(c == '-') c = getchar(),f = -1;
    for(;isdigit(c);c = getchar()) x = (x<<1) + (x<<3) + (c ^ '0');
    x *= f;
}
template<typename xxx>void print(xxx x)
{
    if(x<0){putchar('-');x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
const int maxn = 1010;
const int inf = 0x7fffffff;
const int mod = 1e9 + 7;
int n,m;
double f[maxn][maxn][3];
double dp[maxn][maxn];
int main()
{
    while(~scanf("%d%d",&n,&m)) {
        for(rint i = 1;i <= n; ++i) {
            for(rint j = 1;j <= m; ++j) {
                scanf("%lf%lf%lf",&f[i][j][0],&f[i][j][1],&f[i][j][2]);//不动,向右,向下 
            }
        } 
        memset(dp,0,sizeof(dp));
        for(rint i = n ; i; --i) {
            for(rint j = m; j; --j) {
                if(f[i][j][0] == 1) {
                    continue;//这个点不能动,到达不了(n,m)
                }
                dp[i][j] = (dp[i + 1][j] * f[i][j][2] + dp[i][j + 1] * f[i][j][1] + 2) / (1.0 - f[i][j][0]);
            }
        }
        printf("%0.3lf\n",dp[1][1]);
    } 
    
    return 0;
}
/*
*/

期望学习笔记

原文:https://www.cnblogs.com/Thomastine/p/11803939.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!