近年的acm
競賽中,數學期望問題常有涉及,在以前也常讓本人感到很頭疼,近來突然開竅,掌握了基本的分析方法,希望對大家有幫助。寫得淺薄,可能數學上不夠嚴謹,只供理解。
首先,來看下期望有啥基本的公式。
對離散型隨機變數
x,其概率為
p,有對隨機變數a、
b,有第二條式子是今天的主角,他表明了期望有線性的性質,簡單理解就是期望之間可根據關係,簡單運算(不嚴謹的理解)。
這就為我們解決乙個期望問題,不斷轉化為解決另外的期望問題,最終轉化到乙個已知的期望上。
舉乙個求期望最簡單的例子,見下圖。
假設有個人在
1號節點處,每一分鐘他會緣著邊隨機走到乙個節點或者在原地停留,問他走到
4號節點需要平均幾分鐘?
這是個簡單的期望問題,我們用
ei(i=1,2,3,4)
表示從i
號節點走到
4號節點的數學期望值。根據題意對
1號節點有
e1=(
1/3)
*e1+
(1/3
)*e2+
(1/3
)*e3+1 ①表示
他下一分鐘可以走到2或者
3或在原地
1,每個可能概率是
1/3 ,
注意是下一分鐘,故要加上1.
同理我們對節點2,
3同樣可以列出
e2=(1/3)*e1+(1/3)*e2+(1/3)*e4+1
②e3=(1/3)*e1+(1/3)*e3+(1/3)*e4+1 ③
那e4等於多少呢? 很明顯e4=0 ④,因為他就是要到點4
這樣上面1234式其實就是組成了一組方程組,解方程組就可得出e1!!,用高斯消元,複雜度是o(n^3)
從上述例子,我們可總結出如何解決期望類問題,根據題意,表示出各個狀態的期望(上例的ei,1234),根據概率公式,列出期望之間的方程,解方程即可。
下面看用上述思路如何解決一道題(poj2096)
原題見附件1。
題意簡述: 乙個人受僱於某公司要找出某個軟體的bugs和subcomponents,這個軟體一共有n個bugs和s個subcomponents,每次他都能同時隨機發現1個bug和1個subcomponent,問他找到所有的bugs和subcomponents的期望次數。
我們用e(i,j)表示他找到了i個bugs和j個subcomponents,離找到n個bugs和s個subcomponents
還需要的期望次數,這樣要求的就是e(0,0),而e(n,s)=0,對任意的e(i,j),1次查詢4種情況,沒發現任何新的bugs和subcomponents,發現乙個新的bug,發現乙個新的subcomponent,同時發現乙個新的bug和subcomponent,用概率公式可得:
e(i,j)=1+(i*j/n/s)*e(i,j)+(i*(s-j)/n/s)e(i,j+1)+
((n-i)*j/n/s)*e(i+1,j)+(n-i)*(s-j)/n/s*e(i+1,j+1);
這樣根據邊界就可解出所有的e(i,j),注意因為當我們找到n個bugs和s個subcomponents就結束,對i>n||j>s均無解的情況,並非期望是0.(數學上常見問題,0和不存在的區別)
那這題是否也是要用高斯消元呢? 用高斯消元得話複雜度是o(n^3),達到10^18 根本是不可解的!!
但其實,注意觀察方程,當我們要解e(i,j)的話就需要e(i+1,j),e(i,j+1),e(i+1,j+1), 一開始已知e(n,s),那其實只要我們從高往低乙個個解出i,j就可以了! 即可根據遞推式解出所有的e(i,j) 複雜度是o(n),10^6 ,完美解決。程式見附件2
從上面這道題,我們再次看到了解決期望問題的思路,而且是用到了遞推解決問題,其實可遞推的原因,當我們把各個狀態當成是乙個個節點時,概率關係為有向邊,我們可看到,可遞推的問題其實就是這個關係圖是無環的!!那必須要用方程組解決的問題其實就是存在環!!!! 而且我還要指出的是用高斯消元的時候,要注意誤差的問題,最好把式子適當的增大,避免解小數,否則誤差太大,估計也會卡題。
本文到此結束,簡單講解了期望類問題的解決思路,更加深入的學習可參考wc2009兩篇的**,希望能幫到大家!!
kicd
2009.7.31
簡說期望類問題的解法
近年的acm競賽中,數學期望問題常有涉及,在以前也常讓本人感到很頭疼,近來突然開竅,掌握了基本的分析方法,希望對大家有幫助。寫得淺薄,可能數學上不夠嚴謹,只供理解。首先,來看下期望有啥基本的公式。對離散型隨機變數x,其概率為p,有 e x ipix i 對隨機變數a b有 e a b e a e b...
學習筆記 期望問題
數學期望 簡稱期望 是試驗中每次可能結果的概率乘以其結果的總和,它反映了隨機變數平均取值的大小。對於隨機變數 x 它有 n 種可能的取值,取值為 x i 的概率為 p x i 那麼它的數學期望 e x sigma x i p x i 舉個例子 給定乙個隨機變數 x 它有六種可能的取值,分別是 1,2...
約瑟夫問題的數學解法
我們用較為簡潔的語言描述一下約瑟夫問題 有n個人從0 n 1進行編號,然後進行0 m 1的報數,報數到m 1的人出列,然後從下乙個人繼續開始新一輪的報數,最後剩下乙個人為勝者。其實我們可以重新看待一下約瑟夫問題,當沒刪除乙個人之後,我們從這個人後面的那個人重新開始0 n 2的編號,然後刪除 m 1 ...