何为数学期望
E ( x ) E(x) E(x)表示某个东东的数学期望,该东东共有n种情况,每种情况的值为 v i v_i vi,出现的概率为 p i p_i pi,则 E ( x ) = ∑ i = 1 n p i v i E(x)=\sum_{i=1}^n p_iv_i E(x)=∑i=1npivi
这样,对于等概率的问题,我们就有一种暴力的思路,枚举每一种情况,算出其值,记录方案总数,然后将值的总和除以方案数便可以得到期望值了。
但有一个很重要的问题:会超时
于是我们要引入这样一句话:和的期望=期望的和
怎么理解呢?
我们来考虑一个问题(这是我在某场模拟赛里面看到的,略有改动)
有A,B两支队伍,都有n人,A中每个队伍的人的战力值为 A i A_i Ai,B中每个队伍的人的战力值为 B i B_i Bi,共有n场比赛,每场比赛中胜方为能力值较大的人,得到的分数定义为 A ⇐ ⇒ B A \Leftarrow\Rightarrow B A⇐⇒B,A表示A队参加的人,B表示B队参加的人。
每个人只能参加一场比赛,每个人的对手都是随机而等概率的,例如A队有A1和A2两个人,B队有B1和B2两个人,那么(A1 vs B1,A2 vs B2)和(A1 vs B2,A2 vs B1)的概率都是均等的50%。
求A队得分减去B对得分的期望值。
(
n
≤
1000
,
A
i
,
B
i
≤
40000
)
(n\le 1000, A_i, B_i \le 40000)
(n≤1000,Ai,Bi≤40000)
emm,依照上面的思路,我们可以枚举每一种组合方式,然后计算,时间复杂度为 O ( n ! ) O(n!) O(n!),明显超时。
首先, E A − B E_{A-B} EA−B其实是等于 E A − E B E_A-E_B EA−EB, E A E_A EA表示A队得到的分数,这里体现了粗体字的那句话。
而且,我们发现,对于某种情况 A i ⇐ ⇒ B j A_i \Leftarrow\Rightarrow B_j Ai⇐⇒Bj,发生的情况有 ( n − 1 ) ! (n-1)! (n−1)!,且共有 n ! n! n!种情况,所以其贡献为 A i ⇐ ⇒ B j × ( n − 1 ) ! n ! ⇒ A i ⇐ ⇒ B j n {A_i \Leftarrow\Rightarrow B_j \times (n-1)!\over n!}\Rightarrow {A_i \Leftarrow\Rightarrow B_j\over n} n!Ai⇐⇒Bj×(n−1)!⇒nAi⇐⇒Bj
那么 E A = ∑ i = 1 n ∑ j = 1 n A i ⇐ ⇒ B j n ( A i > B j ) E_A=\sum_{i=1}^n \sum_{j=1}^n {A_i \Leftarrow\Rightarrow B_j\over n} (A_i > B_j) EA=∑i=1n∑j=1nnAi⇐⇒Bj(Ai>Bj)
E
B
E_B
EB也是同理。
这里也是粗体话一种体现。
其实这道题的 A i ⇐ ⇒ B j A_i \Leftarrow\Rightarrow B_j Ai⇐⇒Bj,是 ( A i − B j ) 2 (A_i-B_j)^2 (Ai−Bj)2,然后 n < = 5 × 1 0 5 n<=5\times 10^5 n<=5×105,有兴趣的dalao可以想一下。
题目描述
再来想一个问题,一个商店开展一个促销活动,要你集齐n种印章,每次购买商品有几率获得n种中的一种,每种获得的概率都相同,有可能会重复获得一种印章,问集齐n中印章所需要的购买次数的数学期望值。
数据范围
n ≤ 1 0 5 n \leq 10^5 n≤105
这道题讨厌在——不能水分,因为你不能枚举每一次的可能,然后统计(有可能要无限次)
所以我们可以用动态规划解决。
用 f ( i ) f(i) f(i)表示还剩下i中印章需要集齐,所需要的次数的数学期望。
-
f ( n ) = 0 f(n)=0 f(n)=0,原因不解释
-
对于 ∀ i ≤ n \forall i \le n ∀i≤n,考虑购买一次的情况,有 i n {i \over n} ni的慨率得到一个新,即没有得到过的印章,剩下 n − i n {n - i\over n} nn−i的概率得到之前得到过的印章。所以得到等式
f ( i ) = i n f ( i + 1 ) + n − i n f ( i ) + 1 f(i)={i\over n}f(i+1)+{n-i\over n}f(i)+1 f(i)=nif(i+1)+nn−if(i)+1⇒ n × f ( i ) = i × f ( i + 1 ) + ( n − i ) × f ( i ) + n \Rightarrow n\times f(i)=i\times f(i+1)+(n-i)\times f(i)+n ⇒n×f(i)=i×f(i+1)+(n−i)×f(i)+n
⇒ i × f ( i ) = i × f ( i + 1 ) + n \Rightarrow i\times f(i)=i\times f(i+1)+n ⇒i×f(i)=i×f(i+1)+n
⇒ f ( i ) = f ( i + 1 ) + n i \Rightarrow f(i)=f(i+1)+{n\over i} ⇒f(i)=f(i+1)+in
这样就能够解决这个问题了,当然,化简之后就能得到一条n个分数和的式子,之后说不定有更快的方法,但本人太菜,想不到了。
当某些数学期望的问题难以进行枚举情况并计算的,我们可以考虑dp
说到动态规划,来想一个更难的问题:
题目描述
有 c c c种颜色, n n n个位置,每个位置的初始颜色为1,有 k k k次操作,每次操作选择一个区间 [ l , r ] [l, r] [l,r]中的某些位置,可以不选,为之涂上随机的颜色,若颜色为 a a a的位置涂上了颜色 b b b,则变为 a b m o d    c ab\mod c abmodc,求k次涂色后,所有位置的颜色编号之和的期望值
数据范围
n , k , c ≤ 100 n,k,c \leq 100 n,k,c≤100
依然按dp方向想,很容易想到是 f ( i , j , k ) f(i, j, k) f(i,j,k)表示第 i i i个位置第 j j j次染色,染为 k k k颜色的概率。此方法时间复杂度太高,不能接受。
但是,我们发现:任意两个位置,涂相同的次数,最后转为相同的颜色,其概率是相同的,所以第一维的状态并不需要,所以状态改为 f ( i , j ) f(i,j) f(i,j)表示操作i次,最后颜色变为j的概率。
-
f ( 0 , 1 ) = 1 f(0,1)=1 f(0,1)=1,这是毫无疑问的
-
∀ i + 1 > 0 \forall i+1>0 ∀i+1>0,有两种情况,要么就是没有选到,要么就是选到之后改为一种新的颜色,两种情况概率都为 1 2 {1\over 2} 21,而第二种情况中,有 1 c {1\over c} c1的概率涂成某种颜色 k k k,于是得到式子(不能讲状态转移方程):
- f ( i + 1 , j ) + = 1 2 f ( i , j ) f(i+1,j) \ += \ {1\over 2}f(i,j) f(i+1,j) += 21f(i,j)
- f ( i + 1 , j × k m o d    c ) + = 1 2 c f ( i , j ) f(i+1,j\times k\mod c)\ +=\ {1\over 2c}f(i,j) f(i+1,j×kmodc) += 2c1f(i,j)
用 c n t i cnt_i cnti表示第i个位置可能被操作的最多次数,则最后的答案便是:
∑ i = 1 n ∑ j = 1 c f ( c n t i , j ) × j \sum_{i=1}^n \sum_{j=1}^c f(cnt_i, j)\times j ∑i=1n∑j=1cf(cnti,j)×j
本人数学不好,若有讲得不对的,欢迎各位dalao指正