常見概率題

從n個數中生成m個不重複的隨機數

import random
for i in range(n):
	x = random.randint(i, n)
	if x < m:
		print(i)
	m -= 1

由這個for循環循環n次,且在滿足條件時才輸出i,可知,輸出m個不同值的要求已滿足,因爲每次輸出的都是i值,而i值每次都是不一樣的,m–保證了程序在輸出了m個值後就停止循環。
在i=0時,randint()的取值範圍爲0到n-1,共n個數,此時要輸出0只需要x小於m,故i=0被輸出的概率爲m/n;
在i=1時,randint()的取值範圍爲0到n-2,共n-1個數,若i=0沒有被輸出,則m–未被執行,此時i=1被輸出的概率爲m/(n-1),若i=0已經被輸出了,則m變爲m-1,此時i=1被輸出的概率爲(m-1)/(n-1);由概率論的知識,可知此時i=1被輸出的概率爲
P=(1-m/n)(m/(n-1))+m/n((m-1)/(n-1))=m/n;以此類推,可知每個數被輸出的概率都爲m/n

瘋子坐飛機問題

轉自
100人坐飛機,第一個乘客在座位中隨便選一個坐下,第100人正確坐到自己坐位的概率是?
他們分別拿到了從1號到100號的座位,這些乘客會按號碼順序登機並應當對號入座,如果他們發現對應號座位被別人坐了,就會在剩下空的座位隨便挑一個坐.現在假設1號乘客瘋了(其他人沒瘋),他會在100個座位中隨便選一個座位坐下,問:第100人正確坐到自己坐位的概率是多少?(也可推廣到n名乘客n個座位的情況)

我們把這個問題叫做「瘋子問題」。瘋子問題是指:有 n 位乘客坐飛機,第一位乘客是瘋子,會胡亂坐;後邊的 n-1 位則按照自己的位置坐,如果被佔就再隨機選擇另一個。求最後一個乘客坐對的概率。其中 n>1 。

我們看看瘋子問題是如何轉化的:

1.瘋子坐對了

問題結束,所有人都可以坐對位置。

2.瘋子坐錯了,但並沒有佔據最後一個人的位置

假設瘋子坐在了 k 號位置(1<k<n),那麼從 2到 k-1 號都可以坐對位置,這個時候 k 號乘客進來了。他看到自己的位置被佔了,於是重新選擇一個位置就座。

注意!

也就是說,在這種情況下,除了 n 變小了,這個問題依然是一個瘋子問題!只是 n 變成了 n-k+1 ,而這個第 k 號乘客就是新的「瘋子」;而對於每一個瘋子,他坐對的位置都是第一個瘋子的那個位置。

3.瘋子坐錯了,而且坐在了最後一個人的位置上

問題結束,最後一個人不能坐在自己的位置上。

所以,第二個選項是無效的,它只是把問題中的n變小了,實質上等於沒有做任何選擇;且這個過程要麼結束,要麼會變成 n=2 的情況,這個情況下沒有選項 2。

而只有 1 和 3 兩個等概率的選項決定了最終結果,它們的概率分別爲二分之一。

因此答案是二分之一。

——————————————————更深入的思考結果

其實這個問題還可以更簡單。注意到在中間,如果任何一個隨機選座位的人坐到了第一個瘋子的位置,那麼後邊的所有人——當然包括最後一個人——就可以坐對。

因此最後一個人的位置只有兩種可能:第一個瘋子的,他自己的。

這兩個位置又沒有什麼區別,也就是說在各種情況下都是對稱的,所以它們的概率相等。

如果還是有問題,下邊這個模型你一定能明白。

考慮一枚硬幣,正面向上的概率爲 1/n ,反面也是,立起來的概率爲 (n-2)/n 。我們規定硬幣立起來重新拋,但重新拋時,n會至少減小1。求結果爲反面的概率。

這樣很顯然結果爲 1/2 。而「正面向上」對應的是下一個瘋子坐最後一個人的座位(選項 I);「反面向上」對應下一個瘋子坐對的情況(選項 III );「立起來」則對應坐在中間的情況(選項 II)。

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