Python教你找到最心儀的對象

規(guī)則
單身妹妹到了適婚年齡,要選對象。候選男子100名,都是單身妹妹沒有見過的。百人以隨機順序,從單身妹妹面前逐一經(jīng)過。每當(dāng)一位男子在單身妹妹面前經(jīng)過時,單身妹妹要么選他為配偶,要么不選。如果選他,其余那些還沒有登場的男子就都遣散回家,選配偶的活動也 ?over 了。如果不選,當(dāng)下這名男子就離開,也就是 pass 掉此人,下一人登場。被pass ? 掉的,單身妹妹不可以反悔再從選。規(guī)則是,單身妹妹必須在這百人中選出一人做配偶,也就是說,如果前99人單身妹妹都看不中的話,她必須選擇第100名男子為配偶,不管他有多么丑陋。
任務(wù)
給單身妹妹設(shè)計選擇方法,讓她有最高概率選到百人中最英俊的男子為配偶。說明一點是,沒有任何選擇方法能夠保證單身妹妹一定選擇到最帥的帥哥。對于任何選擇方法,總存在某些出場的順序,讓單身妹妹與帥哥錯過。所以,題目所問的,不是必勝的選法(因為不存在),而是概率最高的選法。
算法
因為并不是要討論數(shù)學(xué),我這里就直接給出答案了:最佳選法是
pass 掉最開始的 100/e 名男子(e = 2.718… 是自然對數(shù),即 ?100/e 約等于 37)。但是記錄下這 37
名男子中最英俊者。之后魚貫而來的男子中,出現(xiàn)的第一位英俊程度超越所有前 37 ?人者,即為配偶。如果人都走光了,也沒出現(xiàn)這么一位 Mr.
Right,那么就只好選擇第 100 位男子。
如果你是這百名男子中的一名,并且你能夠決定自己出場的名次,你會選擇在什么時候出場,以最大提高自己被選的概率?
答案是第 38 名。你不會選擇在38名之前,因為你被選的概率是零(假設(shè)我們的單身妹妹學(xué)過高等數(shù)學(xué),知道最佳選法)。你也不會選擇后于38,因為你前面每多一個人,就意味著多了一分單身妹妹選上他的機會。
如果你有一位意中人,你當(dāng)然要努力去追求幸福,但你可能也要想一下,這是否是最好的時機?
37% 法則“實測”!
37%
法則的效果究竟如何呢?我們在計算機上編寫程序模擬了當(dāng) n = 30 時利用 37% ?
法則進行選擇的過程(如果MM始終未接受求愛者,則自動選擇最后一名求愛者)。編號越小的男生越次,編號為 30 的男生則表示最佳選擇。程序運行 ?
10000 次之后,竟然有大約 4000 次選中最佳男生,可見 37% 法則確實有效啊。
建模測試圖
變了幾個參數(shù)試驗次數(shù)n,number配偶人數(shù),但結(jié)果相同,最優(yōu)秀的30號配偶被選中概率最高。
e確實是宇宙數(shù),e無所不在。。。

我們用python來建模,以下是全部代碼。這里要導(dǎo)入numpy,math模塊用于數(shù)學(xué)計算。Pylab用于數(shù)據(jù)可視化。Random模板用于產(chǎn)生隨機數(shù)。
建模代碼







歡迎各位學(xué)習(xí)更多相關(guān)知識<呆瓜半小時入門python數(shù)據(jù)分析>
