筆記-數學指望

指望真是個很神奇的東西啊,雖然利用方程移項能夠證實,但總感受很妙html

定義

設數\(x\)\(n\)種取值,每種取值\(a_i\)對應機率爲\(p_i\),則\(x\)的數學指望爲\(E(x)=\sum a_ip_i\)算法

  • 好比說拋擲一枚硬幣,定義正面爲\(1\),反面爲\(0\),則拋一枚硬幣的指望爲\(E(x)=0.5\times 1+0.5\times 0=0.5\)
  • 擲骰子的指望爲\(\frac 16\times 1+\frac 16\times 2+\cdots+\frac 16\times 6=\frac 16\sum_{i=1}^6i=3.5\)
  • 彩票一張\(1\)元,中獎機率爲\(\frac 1{10^6}\),獎金\(10^5\),則買一張彩票的收益指望爲\(\frac 1{10^6}\times 10^5=0.1\)

雖然這些指望都是小數,是取不到的值,但指望表示的並非一個可能發生的狀況,而是狀況的一個平均,能夠形象地理解爲當實驗進行愈來愈多的時候,平均狀況會趨於接近指望(好比擲骰子\(100\)次的時候,平均狀況會接近\(3.5\),而當擲\(10^6\)次的時候,會更加接近\(3.5\)優化

更通常的,若\(x\)的取值並非離散的,那麼能夠用積分表達指望 換湯不換藥spa

基礎指望

一枚硬幣,拋到正面的機率爲\(p\),問指望拋幾回獲得一個正面.net

先設答案爲\(x\)次,根據指望的定義能夠列出式子\(x=p\cdot 1+(1-p)(x+1)\),能夠移項得出\(x=\frac 1p\)code

解釋一下那個式子的右邊,考慮擲一次有兩種狀況:htm

  • \(p\)的機率爲正面,這個時候只須要一次操做(即當前此次),取值\(1\),機率\(p\),因此第一項爲\(p\cdot 1\)
  • \(1-p\)的機率爲反面,因爲拋到反面即返回最初的狀況,因此還須要拋\(x\)次,加上這一次,取值\(x+1\),機率\(1-p\),因此第二項爲\((1-p)(x+1)\)

列出這個方程能夠解出其中某一項,可能這就是指望題目的大體玩法吧blog


給定一個有\(n\)個面的骰子,問指望多少次能擲出全部面(SPOJ-FAVDICEip

發現這題不能像上一題那樣只設一個變量,因此須要利用dp思想,設\(f_i\)表示還剩\(i\)面未被擲到時指望還需多少次完成get

利用上一題的思想枚舉全部後繼狀況,假設當前還剩\(i\)面未被擲到

  • 這一次擲到了還未被擲到的面,機率爲\(\frac in\),剩餘次數爲\(f_{i-1}+1\)
  • 這一次擲到了已經被擲到的面,機率爲\(\frac {n-i}n\),剩餘次數爲\(f_i\)

而這兩個之和爲\(f_i\),即\(f_i=\frac in(f_{i-1}+1)+\frac {n-i}n(f_i+1)\),移項可得\(f_i=f_{i-1}+\frac ni\)

\(f_0=0\),則遞推出\(f_n\)即爲答案

從這題能夠看出一種解題方法,設置狀態,列出方程,解出其中某一項,進行dp轉移


你有一個戰鬥力\(v\),有\(n\)扇門,天天隨機抽取一扇門\(i\),若\(v\leq c_i\),則會用\(t_i\)天的時間離開,不然\(v\)增長\(c_i\),求離開天數的指望(ZOJ-3640

這題也差很少,算是一個小練習,設\(f_i\)表示當戰鬥力爲\(i\)時離開的指望天數

\(i\leq c_i\)\(f_i+=\frac 1nf_{i+c_i}\),不然\(f_i+=\frac 1nt_i\)

綜合這最後這兩題能夠看出,若是用Dp解簡單的指望題,狀態的設置須要知足可重複利用(好比當戰鬥力爲一個確值\(x\)時,指望天數必定是個定值)

double f(int x){
    if(x>max_c)return sum_t/n;
    if(dp[x]>-0.5)return dp[x];
    double res=0;
    for(int i=1;i<=n;++i)
        if(x<=c[i])res+=1+f(x+c[i]);
        else res+=t[i];
    return dp[x]=res/n;
}

循環轉移

有些題目是沒有像上面題目那樣的單項轉移的,好比說下面這題

一個\(n\)\(m\)邊無向連通圖,在圖上進行隨機遊走,初始時在\(1\)號頂點,每一步以相等的機率隨機選擇當前頂點的某條邊,沿着這條邊走到下一個頂點,得到等於這條邊的編號的分數。當到達\(n\)號頂點時遊走結束,總分爲全部得到的分數之和。 要求對全部邊進行編號(\(1\)~\(m\)),使得總分的指望值最小。(HNOI-2013遊走

很明顯的貪心思路:求每條邊的訪問次數指望,按照指望大小次序給定邊權,再給邊權賦值

可是求邊的指望又能夠由邊兩邊的點的指望獲得,因此這題的主要難度在於求每一個點的訪問次數指望

用以前的方法進行設置。設\(f_i\)表示走到\(i\)節點的次數指望

因爲任意兩點間都有可能互相訪問,因此對於任意一條邊\((u,v)\)\(f_u+=\frac 1{deg_v}f_v,f_v+=\frac 1{deg_u}f_u\)

發現這裏不能像以前幾道題來解方程了,由於這裏存在循環(\(f_1\)要用\(f_2\)推導,\(f_2\)要用\(f_1\)推導)

能夠利用高斯消元求解,時間複雜度\(O(n^3)\)

相似的題還有不少,好比HNOI-2011XOR和路徑

循環轉移的非高斯消元解法

下面介紹兩種循環轉移的非高斯消元解法(複雜度\(O(n)\)

線性狀況

有三個骰子,分別有\(k_1,k_2,k_3\)面,每次同時投擲得\(x_1,x_2,x_3\),分數增長\(x_1+x_2+x_3\),若三者的值分別爲\(a,b,c\),則分數清零,若分數大於\(n\),則結束操做。求指望多少次投擲後結束操做(zoj-3329

嘗試用上一題的作法來解,設\(f_i\)表示當前分數爲\(i\)時的指望還要進行多少次,令\(p_k\)表示三個骰子分數和爲\(k\)的機率

則能夠列出方程:\(f_i=\sum_kp_k(f_{i+k}+1)\)

\(1\)提出來,把\(p_0\)單獨提出來,獲得\(f_i=1+f_0p_0+\sum_{k\not =0}p_kf_{i+k}\)

捨棄以前說的高斯消元作法,介紹一種更優秀的作法

因爲全部式子都要用到\(p_0\),因此不妨假設\(f_i=a_ip_0+b_i\)

而後將\(f_{i+k}=a_{i+k}p_0+b_{i+k}\)套到以前的式子裏去,獲得

\(f_i=1+f_0p_0+\sum_{k\not =0}p_k(a_{i+k}f_0+b_{i+k})\\=(p_0+\sum_{k\not =0}p_ka_{i+k})f_0+\sum_{k\not =0}p_kb_{i+k}+1\)

對比式子:\(f_i=a_ip_0+b_i\),發現兩個式子結構相同,可得:

\(a_i=p_0+\sum_{k\not =0}p_ka_{i+k}\\b_i=1+\sum_{k\not =0}p_kb_{i+k}\)

因爲\(a_i,b_i=0(i>n)\),而上面的式子中全部量是能夠遞推而得,沒有循環轉移關係的,因此能夠遞推獲得\(a_0,b_0\)

\(i=0\)代入,獲得\(f_0=a_0f_0+b_0\),即\(f_0=\frac {b_0}{1-a_0}\),得解


樹上狀況

一棵 \(n\) 個結點的樹,從點 \(x\) 出發,每次等機率隨機選擇一條與所在點相鄰的邊走過去。\(Q\) 次詢問,每次詢問給定一個集合 \(S\),求若是從 \(x\) 出發一直隨機遊走,直到點集 \(S\) 中全部點都至少通過一次的話,指望遊走幾步。(pkuwc2018隨機遊走

這題以前就寫過題解,在這,能夠看看中間如何將樹上狀況的循環轉移優化成遞推

基本思路也是設每一個節點從父親轉移,遞推求得係數\(a_i,b_i\),這樣是\(O(n)\)


分層圖狀況&通常圖狀況

這個待填坑吧,分層圖好像能夠玩,據說去年pkuwc上有人想出了一個在通常圖上高斯消元的高效算法

相關文章
相關標籤/搜索