@
基礎概念
- 隨機變量:有多種可能的取值的變量
萬物都可以當做隨機變量,包括常數,方便用 \(\sum\) 統計 - P(A):事件 A 發⽣的概率
- E(X):隨機變量 X 的期望值,\(E(X)=Sum[ P(X=i)*i ]\)
- 獨⽴事件:互相不影響的事件
期望不相關可積性
\(E(xy)=E(x)*E(y)\) ,\(x\)和\(y\)互相獨立
常用技巧
- 對於離散變量 X,\(P_{(X=K)}=P_{(X\le K)}-P_{(X\leq K-1)}\)
期望線性性
\(E(x+y)=E(x)+E(y)\) 任意\(x,y\)
j同理
得到
最大值不超過Y的期望
在1~s的數中隨機:
概率為P時期望成功次數
答案:期望為\(\frac{1}{p}\)次后發生
設X為次數
即證明\(E(x)=\frac{1}{p}\)
解一、$$P(x=i)=(1-p)^{i-1}p$$
解二、$$P(x>=i)-P(x>=(i+1))=(1-p)^{i-1}p$$
只用管前幾次都失敗了
對於每個\((1-p)^i\),只有兩個,一個系數i,一個系數i+1
即原式等於
此時運用前面等比數列到+inf的公式
基礎問題
拿球
箱子里有\(n\)個球\(1...n\),你要從中拿\(m\)次球,求取出的數字之和的期望
定義
也即
其中
放回與不放回都一樣感,性理解:每個球沒有區別,抽到的概率一樣
隨機游走
做期望題先找等價點,設置若干問題,再找不同點間E關系(只推下一步)解方程
或者設置一種,把所有情況推完
-
鏈上游走,從一端到另一端的期望步數
\[E(y)=\sum _{i=1}^{n-1}X_i$$ Xi為隨機游走i第一次走到i+1步數 $$E(y)=\sum _{i=1}^{n-1}E(X_i)\]\[E(x_2)=1/2+1/2*(1+E(X_1)+E(X_2)) \]\[E(x_i)=1/2+1/2*(1+E(X_{i-1})+E(X_i))=E(X_{i-1})+2 \]\[E(y)=\sum _{i=1}^{n-1}E(X_i)=1+3+5+7+9+...=(n-1)^2 \] -
完全圖上游走,一個點到另一點的期望步數
\(1/n-1\)概率成功(每次都能走到其他每個點)
跟拋硬幣差不多,即每次\(1/n-1\)拋到正面,期望步數即為\(n-1\) -
2n點 完全二分圖上游走,一個點到另一點的期望步數
A:到同側點步數
B:異側點步數\[B=\frac{1}{n}+\frac{n-1}{n}*(B+2) \]\[A=(1+B) \]然后解一下方程?
-
n點菊花圖游走,根到x的期望步數
\[E=\frac{1}{(n-1)}+\frac{(n-2)}{(n-1)}*(2+E) \]\[\frac{E}{(n-1)}=\frac{(2n-1)}{(n-1)} \]\[E=(2n-1) \] -
\(n\)點樹上游走,\(x\)到\(y\)求期望步數
以\(y\)為根
\(f(x)\)從\(x\)第一次到x父親的期望
\(d[x]\)為\(x\)度數\[f(x)=1/d[x]+1/d[x]*\sum_{i-1}^{d[x],i!=fa[x]}(1+f(son[x])+f(x)) \]然后瞎JB搞DP
-
構造200個點無向圖,使得S到T期望 \(\ge1000000=100^3\)
E1要是\(O(n^2)\),搞100點的鏈從S到T,然后S端點搞100點完全圖即為\(100^3\)
經典問題
-
每次隨機⼀個 [1,n] 的整數,問期望⼏次能湊⻬所有數
\[\sum_i n/i \]每次設已經抽出\(i-1\)個,要抽出沒抽過的,成功概率\((n-i+1)/n\),期望次數為\(n/(n-i+1)\)
然后反過來枚舉就行(式子比較簡單) -
隨機⼀個⻓度為 \(n\) 的排列\(p\),求 \(p[1…i]\) 中 \(p[i]\) 是最⼤的數的概率
首先,\(i\)后面的數不影響答案
然后只要i取到長度為i的排列的最大的數就可以,前面怎么樣都會比他小
顯然\(1/i\) -
問滿⾜上⾯那個題的 i 的個數的平⽅的期望
\[\sum_{i!=j}1/ij+\sum_i 1/i \]設\(X_i\)為i為是否滿足條件的期望
顯然X_i只有兩種取值,0和1
就有$$x=\sum_i^nX_i$$\[E(x^2)=E((\sum _i^nX_i)^2) \]\[=E(\sum_i^n\sum_j^{n,i!=j}X_i*X_j+\sum_i^nX_i^2=X_i) \]拆E,
\[=\sum_i^n\sum_j^{n,i!=j}E(X_i*X_j)+\sum_i^nE(X_i) \]第一項,\(i\)不影響\(j\),直接套用3的概率乘一下
第二項更簡單,直接求和 -
隨機⼀個⻓度為 n 的排列 p,求 i 在 j 的后⾯的概率
\[\frac{1}{2} \] -
隨機⼀個⻓度為 n 的排列 p,求它包含 w[1…m] 作為⼦序列/連續⼦序列的概率
第一問,\[\frac{(n-m)!}{n!}*C(n,m) = \frac{1}{m!} \]第二問:
取m個位置,第一個位置\(n\)種,第二個位置\(n-1\)種,乘到\(n-m+1\)種在這m個位置中選正確\(w_i\)的概率即為$$\prod_{i=n-m+1}^n \frac{1}{i}= \frac{(n-m)!}{n!}$$
然后枚舉開頭位置,顯然\(n-m+1\)個位置\[\frac{(n-m+1)!}{n!} \] -
有 n 堆⽯頭,第 i 堆個數為 a[i],每次隨機選⼀個⽯頭然后把那⼀整堆都扔了,求第 1 堆⽯頭期望第⼏次被扔
\[1+\sum_{i=2}^nP(A[i]<A[1]) \]\(P(A[i]<A[1])=a[i]/(a[i]+a[1])\)
-
隨機⼀個⻓度為 n 的01串,每個位置是 1 的概率是 p ,定義 X 是每段連續的 1 的⻓度的平⽅之和,求E[X]
定義\(X_i,Y_i\)
\(0->Y_{i+1}=0,X_{i+1}=X_i\)
\(1->Y_{i+1}=Y_{i}+1,X_{i+1}=X_i-Y_i^2+(Y_i+1)^2=X_i+2Y_i+1\)
要求的是\(E(X_n)\)
類似的,\[E(X_n)=p*(E(X_{n-1})+2*E(Y_{n-1}+1))+(1-p)*E(X_{n-1}) \]\[E(Y_n)=p*(1+E(Y_{n-1}))+(1-p)*0 \] -
給⼀個序列,每次隨機刪除⼀個元素,問 i 和 j 在過程中相鄰的概率、
即為\(i~j\) 中間的數排列,\(i,j\)在最后的方案數除以總數
\[(j-i-1)!*2/(j-i+1)! \]\[=2/(j-i)*(j-i+1) \] -
給定⼀棵樹,將他的邊隨機⼀個順序后依次插⼊,求 u,v 期望什么時候連通
假設路徑長度為k,求路徑上的邊出現的最后一條的期望時間
假設在第i次加邊時聯通\[\sum _k^{n-1} i*\frac{k!*C_{i-1}^{k-1}*(n-k-1)!}{(n-1)!} \]也可以倒着來求概率期望
-
給 1…n 這 n 個數,每次隨機選擇⼀個還在的數並且刪掉他的所有約數,求期望⼏次刪完
題意:
- 隨機刪x,如果x沒有被標記,把x的約數全部標記
- 求期望選到幾個沒被標記的x
- 注意標記與刪不同,答案一樣,方便求概率
定義\(E(x)\)為是否在沒被標記前被刪掉的期望
被刪掉的概率為\(P(x),E(x)=\frac{1}{P(x)}\)
則\(P(x)=\frac{1}{floor(n/x)}\)(x的倍數要在他之后刪)
然后就套路線性拆開相加就可以了
期望線性性練習題
-
給定 n 個硬幣,第 i 個硬幣的價值為 w[i],每次隨機取⾛⼀個硬幣,獲得的收益是左右兩個硬幣的價值的乘積,求期望總價值
\[E(s)=\sum_{(i<j)}^n \frac{2}{(j-i+1)(j-i)} \] -
有 N 個數 a[1…N],每次等概率選出兩個數,然后合並成⼀個新的數放回來,得到的收益是新的數的值,求總收益的期望
\[E(s)=\sum_i^n E(x_i)*a_i \]\(x_i:a_i\)對答案的貢獻次數
\[E(x_i)=\sum _{j=1}^{n-1} \frac{2}{n-j+1} \]即處理每次合並兩個團時是否選到i所在的團
即在\(n-j+1\)個團中選兩個團,蒟蒻我只能\(n^2\)處理 -
給定⼀個數列 W[1…N],隨機⼀個排列 H,如果 H[i] ⽐ H[i-1] 和 H[i+1] 都⼤,就獲得 W[i] 的收益,求期望收益
定義單次期望\(x_i\)\[E(s)=\sum_i^n x_i \]\[E(x_i)=w_i*P(h_i>max(h_{i-1},h_{i+1})) \]某老師:顯然P是三分之一啊。。。(?
感性理解:每個都平等,至少有一個最大值
-
給出⼀棵樹,⼀開始每個點都是⽩的,每次選⼀個⽩點將他⼦樹⾥所有點染⿊,求期望⼏次染⿊整個樹
\(\sum 1/dep[i]\) 他祖先的點要在之前刪
-
有 N 個⿊球,M個⽩球,每次等概率取出⼀個球(不放回),將取出來的球的顏⾊寫成⼀個01序列,求 ”01” 的期望出現次數
期望次數即為這個球和上一個球不同的次數
在2~n+m這n+m-1個數中,考慮第i個數為1,概率為\(\frac{n}{n+m-1}\)
然后考慮第i-1個為0,概率為\(\frac{m}{n+m}\)
乘起來得到\(m*n/(m+n)\)
(我有點不會,待填坑
例題選講
三維凸包點數期望啥的我就不寫了,我也不會
noip2016換教室
設\(X_i\) 第i節課~第i+1節課的距離
老套路,
設$$E_s= \sum_{i=1}^{n-1}E(X_i)$$
0為不申請,1為申請
每種情況,令
0 0 $$d_1=dis[c_i][c_{i+1}]$$
1 0 $$d_2=(1-k_i)dis[ci][c_{i+1}]+k_idis[d_i][c_{i+1}]$$
0 1 $$d_3=(1-k_{i+1}) dis[c_i][c_{i+1}] +k_{i+1}dis[c_i][d_{i+1}]$$
1 1 $$d_4=(1-k_i)(1-k_{i+1}) dis[c_i][c_{i+1}]+(1-k_i)k_{i+1}dis[c_i][d_{i+1}]+(1-k_{i+1})k_idis[d_i][c_{i+1}]ki+k_i*k_{i+1}dis[d_i][d_{i+1}]$$
設計狀態 \(f[i][j][0/1]\)為第i個教室,換了j次的期望長度,n*m 搞dp
這次換:\(f[i][j][1]=max(f[i-1][j-1][0]+d2,f[i-1][j-1][1]+d4)\)
這次不換:\(f[i][j][0]=max(f[i-1][j][0]+d1,f[i-1][j][1]+d3)\)
d1d2d3d4每次算,floyed預處理dis
區間交
(區間交定義:\(l_2<=r_1\))
考慮枚舉 \(l2\) 算 \(r1<l2\)
令 \(g_r\) 為右端點 \(=r\) 的概率
其中,$$P(l,r)= \frac{1}{n}*\frac{1}{n-l+1}$$
令 \(f\) 為 \(g\) 前綴和,枚舉 \(l_2\) ,則有
於是再對 \(f\) 求和就可以了
0-1邊樹求直徑期望
n<=200,設直徑為s
\(f[x][i]\)表示x點,直徑\(<j\)概率
轉移用樹形\(On^2\) dp
即對於當前子樹,枚舉所有兒子遞歸處理
處理得到每個兒子的f后兩層枚舉兒子的組合,再枚舉深度,求出深度之和以及對應的概率
老師說這四O(n^2)的,可能我沒理解到⑧
球染色
江下題意,
有\(n\)個球,⼀開始顏⾊是\(c[1…n]\),每次隨機⼀對數\((i,j)\) 然
后\(c[j]=c[i]\),求讓\(c\)全部相同的期望步數
\(x->x\) \(p_0\)
\(notx->x\) \(p_0\)
\(x->not x\) \(p_{-1}\)
\(not x ->x\) \(p_1\)
即 每種概率對應情況:
\(p_0\) :不影響
\(p_1\): 多一個
\(p_{-1}\)少一個
考慮\(f(x)\)為已經有\(x\)個匹配,要變成(便乘\(n\)個的期望步數
顯然,\(f(n)=0;\)
對於\(a!=n\),有$$f(a)=p_0(1+f(a))+p_{-1} (1+f(a-1))+p_1(1+f(a+1))$$
然后移項使得可以把\(i-2,i-1\)轉移到 \(i\) \(O(log_n)\) 矩陣快速冪
至於我為什么不寫轉移矩陣呢?懶
(其實我做矩陣題都要先列整齊的式子然后再回顧一下舉矩陣乘法是橫着的還是豎着的然后再舉幾個例子才能推出來
區間翻轉
給定⼀個⻓度為 n 的 01 串,每次隨機⼀個區間將⾥⾯所有
元素翻轉,求 m 次操作后 1 的期望個數
令
其中\(x_i\)為最后位置1或0
套路地運用線性性質,(下次我就不寫這個了,真jr難敲)
設\(P\)為隨機區間包含某數概率,見上面另一個區間題,最上面有目錄
定義狀態 \(f[i][1/0]\) 為第第i次操作1/0的期望個數
邊界就是輸入
\(f[i][v]+=f[i-1][v xor 1]*P\)
\(f[i][v]+=f[i-1][v]*(1-P)\)
有點口胡,但是看上去挺正確的哈
二位&三維凸包點數期望
給 n 個點,隨機選⼀個點集,求⼆維/三維凸包的期望點數
好像聽說可以枚舉邊然后判斷半平面/線段是否只有一邊有點?
不會,壞時代,來臨力!(悲)
單選錯位
有 \(n\) 道題,第 \(i\) 題有 \(a[i]\) 個選項,標號是\(1…a[i]\),現在你認
真做完且完全做對了這 \(n\) 題,但是抄答題卡時錯位了,將
第 \(i\) 題的答案抄到了第\(i%n+1\)題上,現在你想知道,在題⽬正確答案選項隨機的情況下,你期
望能對⼏道
\(n,a[i]\leq10^7\)
如上,\(E(s)= \sum E(x_i)\)
\(X_i\)為交換后第i題對不對,為\(0/1\)
顯然,\(A_i\)中的取值與\(A_{i+1}\)中的取值無瓜,可以乘起來
於是考慮 \(i\) 對答案的貢獻,交換后答案有\(min(A_i,A_j)\)種答案,\(j\) 取\(i \pmod n+1\)
然后求\(\sum E(i)\)就可以了
KILL
⼀個游戲有 n 個⼈,規則是這樣的:
- 隨機選擇⼀個還沒死的⼈,讓他活着離開
- 活着離開之前,他會向剩下所有⼈開⼀槍,有 p 的概率暴斃
重復以上步驟直到所有⼈要么死了要么離開了
求⼀個⼈活着離開且⼀共被開了 k 槍的概率,\(n<=2000\)
定義狀態:\(f[i][j]\) 為現在剩下\(i\)個人,前面有\(j\)個人(即開了 \(j\) 槍)
則有:
1.\(i\) 當場被前面的延遲子彈暴斃,\(j\) 不增加
2.\(i\) 是歐皇,遂開槍殺人
初始:\(f[n][0]=1\),dp \(i\) 從大到小,\(j\) 從小到大枚舉
輸出答案對\(f[i][k]\)取max即可
10/16更新
停課集訓,做了些其他題,有些需要寫的寫一下
CF540D
設\(f[i][j][k]\)為剩下這些人的概率
初始狀態顯然
對於當前狀態,枚舉哪兩種人相遇,轉移
注意同族人相遇的情況要減掉
后記
敲了挺久的吧。。
但是敲一遍確實加深理解了,就是沒時間實現代碼(思考兩小時,代碼5分鍾
還是江一下套路吧
先定義目標狀態期望\(E(s)\)
然后用線性性拆成若干個\(\sum E(x_{0,1,2,...})\)並分類
對於每一類找關系,同類求遞推式或者直接算的式子,有時候解一下方程
次數多的時候用相乘和線性關系分析化簡一下就可以了
最后希望大家康的開心QwQ
敲的這么辛苦,不點個贊or水條評論or關注一下馬?