acm競賽中數學期望問題

近年的acm競賽中,數學期望問題常有涉及,在以前也常讓本人感到很頭疼,近來突然開竅,掌握了基本的分析方法,希望對大家有幫助。寫得淺薄,可能數學上不夠嚴謹,只供理解。

            首先,來看下期望有啥基本的公式。

對離散型隨機變量x,其概率爲p,有簡說期望類問題的解法 - Kicd - Kicds

對隨機變量AB, 簡說期望類問題的解法 - Kicd - Kicds

第二條式子是今天的主角,他表明了期望有線性的性質,簡單理解就是期望之間可根據關係,簡單運算(不嚴謹的理解)。 這就爲我們解決一個期望問題,不斷轉化爲解決另外的期望問題,最終轉化到一個已知的期望上。

舉一個求期望最簡單的例子,見下圖。

假設有個人在 1號節點處,每一分鐘他會緣着邊隨機走到一個節點或者在原地停留,問他走到4號節點需要平均幾分鐘?

簡說期望類問題的解法 - Kicd - Kicds

 

這是個簡單的期望問題,我們用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.

同理我們對節點23同樣可以列出

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)

 

從上述例子,我們可總結出如何解決期望類問題,根據題意,表示出各個狀態的期望(上例的Ei1234,根據概率公式,列出期望之間的方程,解方程即可。

 

下面看用上述思路如何解決一道題(poj2096

原題見附件1

題意簡述: 一個人受僱於某公司要找出某個軟件的bugssubcomponents,這個軟件一共有nbugsssubcomponents,每次他都能同時隨機發現1bug1subcomponent,問他找到所有的bugssubcomponents的期望次數。

我們用E(i,j)表示他找到了ibugsjsubcomponents,離找到nbugsssubcomponents還需要的期望次數,這樣要求的就是E(0,0),E(n,s)=0,對任意的E(i,j),1次查找4種情況,沒發現任何新的bugssubcomponents,發現一個新的bug,發現一個新的subcomponent,同時發現一個新的bugsubcomponent,用概率公式可得:

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),注意因爲當我們找到nbugsssubcomponents就結束,對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

 

從上面這道題,我們再次看到了解決期望問題的思路,而且是用到了遞推解決問題,其實可遞推的原因,當我們把各個狀態當成是一個個節點時,概率關係爲有向邊,我們可看到,可遞推的問題其實就是這個關係圖是無環的!!那必須要用方程組解決的問題其實就是存在環!!!! 而且我還要指出的是用高斯消元的時候,要注意誤差的問題,最好把式子適當的增大,避免解小數,否則誤差太大,估計也會卡題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章