常見概率題類型總結


此類問題主要有期望題,隨機數題、以及概率題,觀察者掌握的信息多少會影響到最終的概率。影響樣本空間的大小。

 期望題關鍵: 找出概率遞推公式

 隨機數題關鍵: 關鍵在於保證每個隨機數出現的概率相等(洗牌算法)

一 拋硬幣問題總結:

  問題1 : 兩個人輪流拋硬幣,規定第一個拋出正面的人可以吃到蘋果,請問先拋的人能吃到蘋果的概率多大?(伯努利分布)

        這個題是否 某國家非常重男輕女,若一戶人家生了一個女孩,便再要一個,直到生下男孩為止,假設生男生女概率相等,請問平均每戶人家有________個女孩?,這個問題具有一定的類似性呢?

        一個樣本空間為反反...正,一個樣本空間為女女女....男

    第一種方法:p=1/2+1/2^3+1/2^5+........=2/3

         第二種:先拋的人吃到蘋果的概率為p1,后拋的人p2若想吃到,只能在第一個人拋反面下才可能,所以樣本空間突然少了一半,所以p2=1/2p1,所以p1=2/3。

         第三種:先拋為p,為反后繼續拋,吃到的概率還是p,所以其實p=1/2(正)+1/2(反)*p,解得p=2/3

         第四種: 我首先想到的就是把 第一次拋到正面的概率 + 第二次拋到的概率 + …..+無窮多次,當然后面的概率幾乎為0了。    結果就是  P = 1/2 + 1/8 + 1/32+ ……  最后的結果就是 P = 2/3 . 這個計算也不難,其實就是等比數列,比為1/4.  簡單的無窮級數 (1/2) / (1-1/4) = 2/3.    1/(1-x)^2=1+2x+3x^2+4x^3+5x^4+… (-1<x<1)

還有一個別人的分析:給所有的拋硬幣操作從1開始編號,顯然先手者只可能在奇數(1,3,5,7…)次拋硬幣得到蘋果,而后手只可能在偶數次(2,4,6,8…)拋硬幣得到蘋果。設先手者得到蘋果的概率為p,第1次拋硬幣得到蘋果的概率為1/2,在第3次(3,5,7…)以后得到蘋果的概率為p/4(這是因為這種只有在第1次和第2次拋硬幣都沒有拋到正面(概率為1/4=1/2*1/2)的時候才有可能發生,而且此時先手者在此面臨和開始相同的局面)。所以可以列出等式p=1/2+p/4,p=2/3。

         第五種: ,i表示先拋的人一共拋了的次數,上面的式子可以求出,P(A)=2/3

 

       問題2:連續扔硬幣,直到 某一人獲勝,A獲勝條件是先正后反,B獲勝是出現連續兩次反面,問AB游戲時A獲勝概率是?

         其實只要出現了正面,A就早晚能贏,所以B獲勝的概率只有那一次,反反:1/4,所以A獲勝的概率為3//4。

       問題3:  小a和小b一起玩一個游戲,兩個人一起拋擲一枚硬幣,正面為H,反面為T。兩個人把拋到的結果寫成一個序列。如果出現HHT則小a獲勝,游戲結束。如果HTT出現則小b獲勝。小a想問一下他獲勝的概率是多少?

         解法1 :   首先,如果第一次拋出了T,那么其實就根沒拋過是一回事,后面怎么繼續都相當於重來了。所以p=1/2p+p(h)

           如果拋出了H,如果上半部分,只能是A贏,下半部分出現T的時候,再出現H又相當於重新來了。

           所以B贏的概率為1/4,再從下面H重新出發的1/4,也就是pb=1/4+1/4^2+1/4^3……,就是1/3,所以A贏的概率為2/3。

    解法2: 隨機過程中的First Step Analysis,設P_s表示狀態為s時'HHT'發生的概率。顯然我們有P_HHT=1以及P_HTT=0。狀態轉移圖如下:


Nill表示還沒有拋時的狀態,這時有1/2的概率變成H還有1/2的概率變成T,變成T時相當於又回到Nill。
我們要求的即P_Nill。
由狀態轉移圖,可以列出式子:
P_Nill = 1/2*P_Nill + 1/2*P_H
P_H = 1/2*P_HH + 1/2 * P_HT
P_HH = 1/2*P_HH + 1/2*P_HHT
P_HT = 1/2*P_H + 1/2*P_HTT
p_HHT = 1
P_HTT = 0
最后可以解得 P_Nill = 2/3。
           解法3: 假設b贏得概率為p;則有兩種情況:H,T,T;H,T,H...;第一種情況概率為 ;第二種情況為 ,因為第二種情況H出現后就相當於又回到開始狀態了,這是小b獲勝概率仍為p;所以有等式 ;可解出p;然后1-p即為所求。
         解法4:   a贏的概率有三種情況:
            1. 出現HHT, HHHT, H...HT,該情況的概率為p1=1/8+1/8*1/2+1/8*1/2*1/2+...=1/4
            2. 出現連續HT再出現第一種情況,即(HT...HT)( H...HT),該情況的概率為p2=1/4*1/4+1/4*1/4*1/4+...=1/12
            3. 出現連續的T再出現第一或者第二種情況,即(T...T) (HT...HT)( H...HT),該情況的概率為p3=1/3*1/2+1/3*1/2*1/2+...=1/3
            a贏的概率為pa=p1+p2+p3=2/3
     問題4: A和B2人投硬幣,正面A得1元,反面B得一元.起始時A有1元,B有100元. 游戲持續進行,直到其中1人破產才終止

              問:1.如果硬幣正反概率相同,游戲的期待長度(expected duration)是幾次投擲?

                  2.如果硬幣是不公正的,正面概率為P,反面概率為Q.(P+Q=1), 那么游戲的期待長度(expectedduration)是幾次投擲?

      問題5: 游戲規則為,連續2次拋到硬幣朝上,則游戲結束。問平均拋多少次游戲可以結束?

         平均拋多少次,即是求問題的期望。

        首先先拋一枚硬幣,如果是花,那么需要重頭開始;如果是字,那么再拋一枚硬幣,新拋的這枚如果也是字,則游戲結束,如果是花,那么又需要重頭開始。根據這個過程,設拋硬幣的期望次數為T,可以得到關系:

         T = 1/2(1 + T) + 1/2(1 + 1/2(1+0) + 1/2(1+T)), 得出 T = 6 

     問題6: 連續拋 k 次朝上的解法:

  假設連續k次正面朝上的期望為Ek,在連續出現k次正面朝上后,下次一也為正面的期望為, E(k+1) = 1/2 (Ek + 1) + 1/2(Ek + 1 + E(k+1)),推到出公式 (E(k+1) +2) /(Ek +2) = 2 得出 Ek = 2^(k+1) -2

     問題7: 拋一個六面的色子,連續拋直到拋到6為止,問期望的拋的次數是多少?

  設期望次數為E,那么有:
  [1]1次拋出6的概率為1/6,那么期望次數為1*1/6
  [2]本次拋出非6數字的概率為5/6,因為沒有拋出6,因此期待拋出6還需要執行試驗的次數仍為E,需要注意加上本次(1次)失效的拋擲,即期望次數為(1+E)(5/6)

  綜合可得:
  E = 1*(1/6) + (1+E)(5/6)

  解得: E = 6

    問題8: 若要使骰子(六個面)的每個數都出現至少一次,那么平均需要擲多少次骰子?即求擲骰子次數的期望

  與前一題類似,設擲出第i個數需要拋擲的次數為E(i),i=1,2,3,4,5,6,(需要注意的是第i個數是值之前沒有出現過的數字,而不是具體的值)
  那么E(i)可由兩部分組成:
  E(i) = (i/6)(E(i)+1) + (1-i/6)(E(i+1)+1)

  [1] (i/6)(E(i)+1) : 已經有i個數字出現了,那么當前拋擲出重復數字的概率為 i/6,狀態仍然是E(i),加上當前實驗1次
  [2] (1-i/6)(E(i+1)+1) : 已經有i個數字出現了,那么當前拋擲出新數字的概率為 1-i/6,狀態轉移到E(i+1),即當拋擲出了i+1個數字后,仍需要拋擲次數的期望,別忘加當前試驗 1 次

  E(i) = E(i+1) + 6/(6-i), E(6) = 0

  E(0) = 6/6 + 6/(6-1) + ... + 6/1 + 0

     參考鏈接:https://www.cnblogs.com/fanling999/p/6777335.html

 二 開箱子總結:

 問題1 : 有一個箱子,N把鑰匙,只有一把鑰匙能打開箱子,現在拿鑰匙去看箱子。問恰好第k次打開箱子的概率?

第k次打開的概率=\frac{N-1}{N}*\frac{N-2}{N-1}*\cdot \cdot \cdot *\frac{N-k}{N-k+1}*\frac{1}{N-k}=\frac{1}{N}

 

三 生孩子問題總結

 問題1 : 某國家非常重男輕女,若一戶人家生了一個女孩,便再要一個,直到生下男孩為止,假設生男生女概率相等,請問平均每戶人家有________個女孩。

    解法1: 首次成功的概率為(1-p)^{k}*p,也就是首次出現男孩的概率,那么發生的次數也就是孩子的個數服從幾何分布,則期望為2,所以女孩是1個。

    解法2:  一個國家人們只想要男孩,每個家庭都會一直要孩子,只到他們得到一個男孩。如果生的是女孩,他們就會再生一個。如果生了男孩,就不再生了。那么,這個國家里男女比例如何?

        分析:一開始想當然的以為男多女少,畢竟都想要男孩。但是注意這句話“如果生了男孩,就不再生了”,一個家庭可能有多個女孩,只有一個男孩。

再仔細分析,我們來計算期望值,只用計算一個家庭就行了。設一個家庭男孩個數的期望值為S1,女孩為S2. 。根據題目條件,男孩的個數期望值S1=1這個是不用計算了。主要計算S2

一個家庭的孩子數量可以為:1,2,3,4,5…..  對應的的男女分布為: “男”,”女男”,”女女男”,”女女女男”,”女女女女男”…  

對應的概率分布為 1/2, 1/4, 1/8, 1/16, 1/32 。其中女孩的個數分別為 0,1,2,3,4……

因此 S2=0*1/2 + 1*1/4 + 2*1/8 + 3*1/16 + 4*1/32 + ………

可以按照題目2用級數求,也可以用錯位相減法:S2=1/4+2/8+3/16+4/32+…  兩邊乘以2,得: 2*S2=1/2+2/4+3/8+4/16+5/32+..

兩個式子相減得 S2=1/2+1/4+1/8+1/16+1/32+…=1. 所以期望值都為1,男女比例是一樣的。

 問題2: 老王有兩個孩子,已知至少有一個孩子是在星期二出生的男孩。問:兩個孩子都是男孩的概率是多大?參考鏈接:https://blog.csdn.net/midailaoqi/article/details/82876207

 參考鏈接: 

   https://blog.csdn.net/u012662688/article/details/52813387

   https://www.nowcoder.com/questionTerminal/030b183f37fd41f7ad4486f56f5ec355?source=relative   
   https://blog.oldj.net/2010/08/21/the-tuesday-boy-problem-2/
  解法1: 傳遞的理念:觀察者掌握的信息多少會影響到最終的概率。
若題目變為已知生的第一個孩子是男孩,問兩個孩子都是男孩的概率是多大?則選C
但此題的已知條件是至少有一個孩子是在星期二出生的男孩,隱含的信息是知道兩個孩子的性別和出生日期信息。若不加限制條件,第一個孩子有14種可能(性別2種*周幾7種),第二個孩子同樣,總樣本空間應為142=196。但加了限制條件后,樣本空間就變少了很多。第一個孩子是男周二,第二個孩子任意,有14種情況;同理第二個孩子是男周二,第一個孩子任意,也有14種情況,但兩個孩子均為男周二的多算了一次,所以樣本空間為14+14-1=27;同理,在容量為27的樣本空間中,兩個孩子都是男孩的有7+7-1=13;所以最后的概率是13/27。
解法2: 貝葉斯公式,設A表示“至少有一個孩子是在星期二出生的男孩”,B表示“兩個孩子都是男孩”,根據貝葉斯公式P(B|A)=P(B)*P(A|B)/P(A), 易知P(B)=1/4,P(A)不太好求,借助上面第一種方法的分析可以知道P(A)=27/196,而P(A|B)即在兩個孩子都是男孩的情況下(7*7=49種情況)至少有一個孩子是在星期二出生的男孩的概率可以通過1-兩個男孩都不是在星期二出生的概率(6*6/49)計算,為13/49,最后帶入貝葉斯公式即可得到13/27。
 參考鏈接: https://blog.oldj.net/2010/08/21/the-tuesday-boy-problem-2/https://blog.oldj.net/2010/08/21/the-tuesday-boy-problem-2/
 問題3:有一對夫婦,先后生了兩個孩子,其中一個孩子是女孩,問另一個孩子是男孩的概率是多大?

答案是2/3.兩個孩子的性別有以下四種可能:(男男)(男女)(女男)(女女),其中一個是女孩,就排除了(男男),還剩三種情況。其中另一個是男孩的占了兩種,2/3. 之所以答案不是1/2是因為女孩到底是第一個生的還是第二個生的是不確定的。

參考鏈接:
https://blog.csdn.net/ymyss4/article/details/11845523
四 錯排問題總結:

問題: 大家都在排隊上飛機,然后金剛來了,他也有票,但是插隊第一個上了飛機,隨便找了個座位坐下了,其余人的策略是:

如果自己票上寫的座位沒被占就按照座位坐,被占了就變身成金剛,隨便找地兒坐。問第i個人坐在自己座位的概率是多少?

1..n一共n個座位,為了方便計算起見,我們做一個變換

變換1:金剛的票上的座位是最后一個,也就是第n個,其余人的票和座位再按照原先的順序排列成1..n-1。

這樣並不影響最終的概率,因為如果

1)金剛坐在自己的位置上,那么大家同樣都是肯定坐在自己的位置上。

2)如果金剛坐在第i個位置(非他票上的座位)上,那么前i-1個人會坐在自己的位置上,與變換前相同,而第i個人肯定不會坐在自己的位置上,他會在變換前的金剛的座位再加上i+1..n的集合中隨機挑一個座位,這也有變換前相同,他挑的座位對於后面人的影響也是與變換前相同的。

設F(i,n)為新的n個座位的排列中第i個人坐到自己位置上的概率,那么舊排列中第i個人坐到自己位置的概率就是

F(i,n) i<j;

F(i-1,n) i>j;

j為金剛票上的座位

那么我們現在來計算F(i,n),后面的討論全部基於變換后的排列。

對於乘客i,金剛的選擇會造成3種情況,假設金剛選擇的是j,分別為i<j,i=j,i>j,概率分別為(n-i)/n,1/n,(i-1)/n。

如果i<j,即金剛選擇的座位在i的后面(我們做變換1的目的就在於此,如果不做那么還要考慮金剛坐到自己的位置的情況,而他自己的位置卻是不確定的),那么乘客i必然會坐到自己的位置,概率為1,(n-i)/n*1

如果i=j,概率為0

如果i>j,那么前j-1個人肯定坐在自己的位置上,而第j個人就變身成了金剛,這樣可以看做他就是金剛,他原來的座位就是n。

變換2:前j-1個人是打醬油的,跟后面的事件無關了,因為金剛在j上,所以第j個人變成了金剛2,他的票號是最后一個,j+1..n-1號乘客成了新的受害者,將j+1..n-1從1開始重新編號,座位數變成n-j

故第i個人坐在原來座位的概率為F(i-j,n-j)

所以概率為

綜上

最后的結果是

F(i,n) i<j;

F(i-1,n) i>j;

j為金剛票上的座位

 五 求期望問題總結:

   問題1 :一個木桶里面有M個白球,每分鍾從桶中隨機取出一個球塗成紅色(無論白或紅都塗紅)再放回,問將桶中球全部塗紅的期望時間是多少?  

解法1:

在M個球中取到第1個未着色的取得次數期望是:1

在M個球中取到第2個未着色的取得次數期望是:1/(M-1/M)   ---- 這就是用題目2的模型得出的期望,就像拋色子(只有兩色),第一個着色的點數為1,其它所有未着色的是點數為2。

在M個球中取到第3個未着色的取得次數期望是:1/(M-2/M)

...

在M個球中取到第M個未作色的求所需要的取得次數的期望是:1/(1/M)

整體次數的期望就是 1+ 1/(M-1/M)+1/(M-2/M)+...+M

解法2:

數學期望類的題目,主要是要理解什么是數學期望,數學期望是干什么用的,關於這些問題的解答,大家可以自己去理解,思考或者翻書,我要講的內容是如何利用這些數學期望的特點。

數學期望的遞歸特性:

飛行棋大家都玩過吧,應該知道每次拋到6,就有一架飛機可以出門了,那么問你一架飛機可以出門的時候,拋篩子次數的數學期望是多少?

你估計會毫不猶豫的說是6(P=1/6,E=1/P=6),但是你思考過深一層次的原因嗎?

好吧,我來告訴你,我們記拋6的期望次數是E,如果第一次拋的是6,那么就是1次,概率是1/6;如果第一次不是6呢,那么次數是1+E,概率為5/6;

那么 E = 1 * (1/6) + (1+E) * (5/6),你可以很容易的解出 E = 6

上面加粗的紅色字體用的就是類似一個遞歸的概念,希望你能理解吧,不行的話,那只能自己去努力理解了,呵呵。

現在我們開始解答上面的問題:

令P[i]代表M個球中已經有i個球是紅色后,還需要的時間期望,去將所有球都變成紅色。

So,給出遞歸式:P[i]= (i/M) * P[i] + (1-i/M)* P[i+1] + 1

我相信大家都能理解這個公式的含義,不過還是解釋一下,在P[i]的情況下,我們選一次球,如果是紅球,那么概率是i/M,子問題還是P[i],如果是白球,那么概率是1-i/M,子問題是P[i+1],注意你當前的選球操作要計算在內,即一次

化簡如上遞歸式得:P[i] = P[i+1] + M/(M-i),顯然P[M] = 0;

所以:

P[M-1] = P[M] + M/1

P[M-2] = P[M-1] + M/2

P[0] = P[1] + M/M

綜上:P[0] = 0 + M/1 + M/2 + … + M/M,至此問題已經解決,不過我希望大家學到的不是這個答案,而是分析這個題目的過程

最終答案:

0 + M/1 + M/2 + M/3 + … + M/M

括號里的式子在M比較大的時候約等於lnM,所以整個期望值大約是MlnM
(因為lnx = ∫(x,1) 1/tdt,1 + 1/2 + ... + 1/M >= ∫(2,1) 1/tdt + ∫(3,2) 1/tdt + ... + ∫(M+1,M) 1/tdt = ∫(M+1,1) 1/tdt = ln(M+1), 1 + 1/2 + ... + 1/M <= 1 + ∫(2,1) 1/tdt + ∫(3,2) 1/tdt + ... + ∫(M,M-1) 1/tdt = ln(M) + 1,因此有
ln(M+1) <= 1 + 1/2 + ... + 1/M <= ln(M)+1,又有ln(M+1) >= ln(M),所以…… )

       問題2: 你有一把寶劍。每使用一個寶石,有50%的概率會成功讓寶劍升一級,50%的概率會失敗。如果寶劍的級數大於等於5的話,那么失敗會使得寶劍降1級。如果寶劍的級數小於5的話,失敗沒有效果。問題是:期望用多少個寶石可以讓一把1級的寶劍升到9級?

用a[i]表示從第i-1級升到第i級期望使用的寶石數量。

當i<=5時,因為不會降級,則期望的數量均為2,即a[2] = a[3] = a[4] = a[5] = 2

當i>5時,因為會降級,成功時一個寶石就夠了,不成功時需要倒退一級,需要先使用a[i-1]個寶石先回到i-1級,再使用a[i]個寶石升到第i級,即

a[i] = 1 * 1/2 + (1 + a[i-1] + a[i]) * 1/2

即 a[i] = a[i-1] + 2

可知,a[6]= 4, a[7] = 6, a[8] = 8, a[9] = 10

則1級到9級需要的寶石數為 a[2]+…+a[9] = 36。

 問題3: 平均要取多少個(0,1)中的隨機數才能讓和超過1。答案: e 次, 其中e是自然對數的底

  

  問題3: 金剛坐飛機問題: 

現在有一架飛機要起飛,乘客們正准備按機票號碼(1,2,3...,N)一次排隊登機。突然來了一只大猩猩(金剛)。他也有機票,但是他插隊第一個登上了飛機,然后隨意的選擇了一個座位坐下了。根據社會的和諧程度,其他的乘客有兩種反應:

1.乘客們都義憤填膺,“既然金剛同志都不守規矩,為什么我要遵守?”他們也隨意的找位置坐下,並且堅決不讓座位給其他乘客。

2.乘客們雖然感到憤怒,但是還是以“和諧”為重,如果自己的位置沒有被占領,就趕緊坐下,如果自己的位置已經被別人(或者金剛同志)占了,就隨機的選擇另一個位置坐下,就開始閉目養神,不在挪動。

問題:在這兩種情況下,第i個乘客(出去金剛同志外)做到自己原機票位置的概率分別是多少?

問題解答

第一問:該問題相當於排序問題,總的排序總數是n個人的全排列為N!,如果第i個人做到第i個位置上,那么其余n-1個人的全排列為(N-1)!,綜上所求概率為(N-1)!/N!=1/N。

第二問:《編程之美》講得比較復雜,沒怎么看懂,在網上找了幾個博文對該問題的解答,綜合一下,這樣理解比較容易:

假設:F(i,n)表示在有n個座位的前提下,第i個人恰好做到第i個座位的概率;

P(K=j)表示金剛剛好坐在位置j上的概率;

P(i|K=j)表示在金剛做到位置j的前提下,第i個人恰好做到第i個位置上的概率。

由以上的假設根據全概率公式有:

  由於金剛坐到每一個位置上的概率是相等的,容易知道P(K=j)=1/n;

  接下來我們只需要考慮后一項條件概率的值即可。

  (1)如果j=1,則表明金剛坐到第一個位置,則i坐到i位置的概率為1;如果j>i,前面的人必然按位置坐,所以概率也為1.所以我們只需要考慮1<j<i的情況,見下。

  (2)在1<j<i的情況下,即金剛坐在第j(1<j<i)個位置上,則j個乘客除非坐在金剛的位置上,否則同樣要同樣要搶占其他人的座位。這和金剛的行為是相似的(因為金剛除非坐在自己的位置上,否則搶占別人的座位),所以我們可以講第j個乘客當做新的金剛,此時還剩余n-j個座位,同時把剩余乘客的編號也都減去j,則先前的第i個乘客座位號變為i-j,此問題和原問題相似,只是規模更小,所以該種情況下,條件概率為F(i-j,n-j).

  所以有如下等式:

   然后可以從上面的公式推出遞推式:F(i,n)=F(i-1,n-1).(筆者驗證了一下,公式是對的,但是不會推導,希望有會的網友指點)。

  有上面的遞推公式,我們可以到:nF(i,n)=(n-i+1)+(i-2)F(i,n),則問題的最終答案為:

  

問題4: 100人坐飛機,第一個乘客在座位中隨便選一個坐下,第100人正確坐到自己坐位的概https://www.zhihu.com/question/35950050率是?

他們分別拿到了從1號到100號的座位,這些乘客會按號碼順序登機並應當對號入座,如果他們發現對應號座位被別人坐了,就會在剩下空的座位隨便挑一個坐.現在假設1號乘客瘋了(其他人沒瘋),他會在100個座位中隨便選一個座位坐下,問:第100人正確坐到自己坐位的概率是多少?(也可推廣到n名乘客n個座位的情況)
     參考鏈接:https://www.zhihu.com/question/35950050
6 截木棒問題總結: 一根木棒,截成三截,組成三角形的概率是多少?
解法1:    1, 0.25

假設整體長度為1(因為這個值不影響概率的計算,所以可以這樣假設),第一段的長度是x,第二段為y,第三段為1-x-y。

x,y值要想成為木棍切出來的長度必須要滿足的條件為 0<x<1, 0<y<1,0<x+y<1,這些點構成了下圖1中紅色的部分。

而這三段要構成三角形還必須滿足:

x+y>1-x-y => x+y>0.5

x+1-x-y>y => y<0.5;

y+1-x-y>y => x<0.5

這些點構成圖2中黃色區域。黃色區域與紅色區域面積的比值就是,所有切割中能構成三角形的切割方式和所有切割方式的比值。也就是題目的答案。

解法2: 

假設我們選擇的兩個點的坐標是x和y(先假設x < y): 
那么由三角形兩邊和大於第三邊的性質,有: 
x+y-x>1-y 
x+1-y>y-x 
1-y+y-x>x

由上述不等式得到:x < 0.5, 0.5 < y < x+0.5 
然后畫個圖就能得到聯合概率為1/8,不要忘了這個結果是在假設x < y時得來的,所以再乘以2,得到1/4。
參考鏈接:

https://www.cnblogs.com/fanling999/p/6777335.html

https://www.cnblogs.com/fanling999/p/6777335.html

六 隨機數題:(洗牌算法)

關鍵在於保證各個隨機數出現的概率相等。

1. 已知有個rand7()的函數,返回1到7隨機自然數,怎樣利用這個rand7()構造rand10(),隨機1~10。

因為rand7()可以等可能的產生 1~7 之間的數字,因此 (rand7() - 1)等可能隨機產生 0~6 的數,那么(rand7() - 1) * 7 + rand7() 可以等可能的產生 1~49 之間的數,因為上式中兩個rand7()的組合數是唯一的。

可以將1~49分成 1~40 和 41~49兩個區間,選擇 1~40這個區間平均划分成10段,每一個分段被隨機到的概率相等,每個分段的長度為40/10 = 4,每個分段分別對應1~10。

具體過程為:按公式 (rand7() - 1) * 7 + rand7() 隨機一個數,若隨機數落入41~49這個區間則丟棄,若隨機數落入1~40這個區間,進一步確定分段對應的數值 (x-1)/4 + 1

2. 已知有個randM()的函數,返回1到M隨機自然數,怎樣利用這個randM()構造randN(),隨機1~N。

前一題的推廣。分兩種情況:
[1] 當 N <= M 時,可以直接使用 randM() 獲取隨機數,>N的隨機數丟棄,<=N 的隨機數輸出即可。
[2] 當 N > M 時候,需要構造 randM2 = (randM() ) * M + randM() 隨機 1 ~ M2 的數值,

  rand_m(m) * m + rand_m(m) 的意思是先等概率生成 0, m, 2m, .. (m-1)*m,然后在加上 rand_m(m);最終效果相當於等概率生成 [0, m*m) 之間的數
[3] 如果randM2仍然小於N,那么對 randM2 繼續重復[2] 操作,如果randM2大於 N 則停止跳到 [1]

3. 已知一隨機發生器,產生0的概率是p,產生1的概率是1-p,現在要你構造一個發生器,使得它產生0和1的概率均為1/2

由題目有:
0 : p
1 : 1-p

連續產生兩個數,其組合以及概率如下:
00 : p2
01 : p*(1-p)
10 : (1-p)*p
11 : (1-p)2

可以發現 01 和 10 組合的概率是相等的,只需要將其分別映射到0和1即可。即每次隨機產生兩個數,如果組合為00或11則丟棄,若為01則映射到1,若為10則映射到0,這樣一來產生0和1的概率均為 1/2 。

4. 已知一隨機發生器,產生的數字的分布不清楚,現在要你構造一個發生器,使得它產生0和1的概率均為1/2。

使用該隨機發生器產生隨機數a,b,有以下3種情況:(1)a<b, (2) a == b, (3) a>b,其中情況(1)和(3)是對稱的,發生的概率相等,只需要將這兩種情況分別映射到0和1即可,其中遇到a==b時忽略。

(也可以找另外一個概率相等的閾值)

5. 已知一隨機發生器,產生0的概率是p,產生1的概率是1-p,構造一個發生器,使得它構造1、2、3的概率均為1/3;…。更一般地,構造一個發生器,使得它構造1、2、3、…n的概率均為1/n。

隨機等可能的產生n個數,需要構造n個等可能的事件,每一個事件的發生映射到一個數值上即可。

我們可以產生一個由0和1組成的序列,序列中0和1的個數相等,即各出現一半的情況下每種排列出現的概率都是相等的。

隨機產生長度為2x的序列,那么0和1各占x個,組合數有 C(2*x, x) >= n ,解出最小的x。對其中的n種等可能情況分別映射到1~n的數字上即可。

6. 給出從n個數中隨機選擇m個數的方法。n很大,可以認為是億級別。m可以很小,如接近1;也可以很大,如接近n。(n已知)

兩個有待改進的思路:
(1) 以 1/n 的概率一直重復隨機,直到獲取了m個數為止
缺陷:[1]難以知道后面隨機的數是否與前面的隨機數重復,因為數據量很大,不一定能在內存中進行比較。[2] 當m很大時,尤其是無限接近n時,后面產生的數字很多都已經在前面出現過。
(2)每個數字被選中的概率是 m/n,可以遍歷所有數字,在遍歷的同時以 m/n的概率決定是否選擇當前值。當遍歷結束時,選擇數字的個數在平均意義上來說是m,均值會隨着數據量的增大會更好的趨向於m,但值得注意的是該過程仍不能精確的精確到m。

改進后的思路:
遍歷第1個數時,選擇的概率為 m/n
遍歷第2個數時,[1]如果選擇了第一個數,則選擇的概率為 (m-1)/(n-1);[2] 如果沒有選擇第1個數,則選擇的概率為 m/(n-1)
遍歷第i個數時,[1]如果此時已經選擇了k個數,那么選擇第i個數的概率為 (m-k)/(n-i+1)
這樣一來可以保證在剩下的數字中選擇適當的數使得總體的數字是m個。對於選擇概率 (m-k)/(n-i+1) ,當k=m時概率為0,即所有數字已經選擇完畢不再選擇,當k=0時,分母會不斷減小,以至於概率取向於1。最終得到的結果始終精確到m個數。證明見之前的文章

7. 給出從n個數中隨機選擇1個的方法。注意,n非常大,並且一開始不知道其具體值。數字是一個一個給你的,當給完之后,你必須立刻給出隨機的結果。

由於n非常大並且需要立即給出答案,因此無法把所有數字都保存起來然后進行隨機。
再者n的具體值未知,因此任意時刻都需要有當前的結果。

於是第1個數字肯定選。那么問題就變成了當第i個數字到來時,是保留當前數字還是選擇第i個數字的問題,i=2,3,...,n。此過程必須保證截止目前為止所見到的數字被選中的概率都相等。

假設當第i個數字到來時,前i-1個數字被選中的概率相等,此時只需要第i個數字被選中的概率為1/i即可保證當前的i個數字被選中的概率相等。因為截止目前見到的數字總共有i個,可以分成兩個部分,即前i-1個數和第i個數,第i個數被選中的概率為1/i,那么不被選中的概率就為 (i-1)/i ,這時被選中的應該是前i-1個數中的一個,由假設可知前i-1個數被選中的概率相等,那么前i-1個數字任一一個被選中的概率為 ((i-1)/i)/(i-1) = 1/i。

8. 給出從n個數中隨機選擇m個的方法。注意,n非常大,並且一開始不知道其具體值。數字是一個一個給你的,當給完之后,你必須立刻給出隨機的結果。(n未知)

本題是上一題的擴展。
首先前m個數是必須取的,問題就變成了,當第i(i>m)個數到來時,是丟棄這個數還是保留這個數,如果保留這個數(第i個數),那么就需要從已選的m個數中選中一個丟棄。

具體做法是,選取前m個數,依次讀取第i(i>m)個數,並以 m/i 的概率決定是否選擇這個數,如果選擇了這個數,則隨機的替換掉當前m個數中的任意一個。

具體解釋如下:
假設前i-1個數字任一個被選中的概率相等,為 m/(i-1)。
當第i個數字到來時被選中的概率為m/i(由定義可知),現在計算前i-1個數字中任一一個數字 k 被保留的概率,有兩種情況:[1]第i個數字沒被選中,那么k直接被保留,概率為(1-m/i); [2] 第i個數字被選中(m/i),並且刪除當前m個數字中的一個,被刪除的數字不是k(1-1/m),於是k仍然被保留的概率為 (m/(i-1)) * [ (1-m/i) + (m/i) * (1-1/m) ] = m/i

由數學歸納法依次類推,當遍歷完n個數,選中m數中,每個數被選擇的概率都是相等的。

七: 遞推題:

問題1: 五個海盜搶到了100顆寶石,每一顆都一樣大小和價值連城。他們決定這么分:  
抽簽決定自己的號碼(1、2、3、4、5)  
首先,由1號提出分配方案,然后大家表決,當且僅當超過半數的人同意時,按照他的方案進行分配,否則將被扔進大海喂鯊魚  
如果1號死后,再由2號提出分配方案,然后剩下的4人進行表決,當且僅當超過半數的人同意時,按照他的方案進行分配,否則將被扔入大海喂鯊魚,依此類推  
條件:每個海盜都是很聰明的人,都能很理智地做出判斷,從而做出選擇。  
問題:第一個海盜提出怎樣的分配方案才能使自己的收益最大化?

逆向思維,從45看,無論4分配多少給5,都可能被搞死,所以4不希望3死。

從345看,4肯定會投贊成,所以不用管5,分配100,0,0就好了

從2345看,3肯定希望2死,所以2別管3了,2就是爭取45倆人,所以就98,0,1,1

從12345看,2希望1死,所以1別管2了,1就是爭取345仨人,所以就97,0,1,0,2或者97,0,1,2,0。

問題2、小組賽,每個小組有5支隊伍,互相之間打單循環賽,勝一場3分,平一場1分,輸一場不得分,小組前三名出線。平分抽簽。問一個隊最少拿()分就有理論上的出線希望:

還是逆向思維。假設A得一分,那么肯定是輸三場平一場,則另外三個隊伍勝利至少拿3分,A不會出線。

假設A得兩分,那么就是平兩場,輸兩場,另外兩個隊伍勝利拿3分肯定出線,另外倆隊伍,eg:B C,如果ABC之間打平手,BC和其他打輸,那就ABC均為2分,DE為9分,那么A就有出線的希望。所以最少2分。

幾個關鍵概念

以上分析過程涉及到的三個重要概念如下:

1. 伯努利實驗
事件E只有兩種可能結果:發生和不發生,概率分別為p和(1-p)。E獨立重復進行n次可以稱為n次伯努利試驗。

2. 二項分布
n次伯努利試驗發生k次的可能性服從二項分布:
c(n,k) * p^k * (1-p)^(n-k)

3. 幾何分布
幾何分布有是指以下任一一種情況的離散型概率分布:
[1] 1次成功需要執行伯努利試驗的次數X,(X=1,2,3...)
[2] 1次成功之前失敗的次數 Y = X-1 =, (Y=0,1,2....).

注意區分以上兩種情況,以上兩種情況的概率分布為:
[1] P(X=k) = (1-p)(k-1) * p , k = 1,2,... (第k次是第一次成功)
[2] P(X=k) = (1-p)k * p , k = 0,1,2,... (失敗了k次以后第一次成功)

以上兩種情況下的幾何分布的均值和方差:
[1] E(X) = 1/p , D(X) = (1-p)/p2
[2] E(X) = (1-p)/p, D(X) = (1-p)/p2

舉例:
一個六面的骰子,平均需要投擲多少次可以擲出數字6:
p = 1/6, 1-p = 5/6
E(X) = 1/p = 6 次

參考鏈接:https://www.cnblogs.com/fanling999/p/6777335.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM