由《炮灰模型——女生選擇追求者模型》到“微軟鑽石題”

很好玩的一個算法 微軟鑽石題

引言

前段時間在ADSP課上,作爲課間小插曲,老師提出了一個微軟的鑽石面試題,題目的描述是如下:

一樓到十樓的每層電梯門口都放着一顆鑽石,鑽石大小不一。你乘坐電梯從一樓到十樓,每層樓電梯門都會打開一次,只能拿一次鑽石,問怎樣才能拿到最大的一顆?

課堂上有人給出了一種策略:前五層的鑽石都不拿,而只是記錄下最大的那一顆,在後面的五層裏,只要遇見比所記錄大的就拿。若沒有大的,就拿最後一顆。還有人根據鑽石的大小事服從正態分佈進而進行參數估計,從而得出預期的最大的層數。其本質是根據已有的資料預計後面的大小從而做出選擇。適逢上週有空,看到關於男生追求女生的一個數學模型《炮灰模型——女生選擇追求者模型》,細想後發現此問題與微軟這道面試題挺像的,可以將其模型和結論擴展到此問題上,並且結果也挺有意義的。首先從“炮灰模型”說起。

網上廣泛轉載的《炮灰模型——女生選擇追求者模型》據說是Tsinghua University的一個學生Geng Quan寫的,後有網友的潤色和加工和開拓。其所提問題個人覺得與數學家Merrill M. Flood 在1949年“未婚妻問題”類似。而這個問題的精妙之處在於,在微積分界叱吒風雲的自然底數e,竟也出人意料地出現在了這個看似與它毫不相關的問題中。還是從我們熟悉的某類節目說起。

背景介紹

在每期由兩個光頭主持的很火爆的某節目上,面對一位位男嘉賓,24 位單身女生要做出不止一次“艱難的決定”:到底要不要繼續亮燈?把燈滅掉意味着放棄了這一次機會,繼續亮燈則有可能結束節目之旅,放棄了未來更多的選擇。

每一個女生都渴望找到自己心中的白馬王子,找到自己一生的幸福。但是面對追求者們,女生應該是選擇還是拒絕,怎樣才能以最大的可能找到自己的Mr. Right呢?如果遇到了一個優秀的男生,應該接受還是拒絕呢?如果接受了他,萬一下一個更好的話那可就虧大了;可如果爲此而拒絕掉一個又一個好男人,也會面對着“過了這個村就沒這個店”的風險。說不定白馬王子們都已經擦肩而過,到最後就只剩下。。。,當初的拒絕明顯得不償失。

由於沒人能知道真正的緣分何時到來,沒人能知道下一個來表白的男生會是什麼樣子,接受表白的時機早晚實在很難決定。而運用數學中概率論的知識對女生選擇追求者的這一過程進行數學建模,得到女生的選擇的最優策略以作參考。

模型假設(Geng 和 Flood)

假設一個女生願意在一段時間中和一位男生開始一段感情,並且在這段時間中有N個男生追求這位女生。說明:這裏的N不是事先確定的,每個女生根據自身條件,並結合以往的經歷和經驗,猜測確定這個數字N。比如其它各方面都相同的兩個女生,一般來說,PP氣質佳的女生就要比不PP的女生N值相對要大一些。在適合這個女生的意義上,假設追求者有好有壞,任何兩個男生都是可以比較的,而且沒有相等的情況。這樣我們對這N個男生從1到N進行編號,其中數字越大表示越適合這個女生。這樣在這段時間中,女生的Mr. Right就是男生N了。現在問題變成面對這N個追求者應該以怎樣的策略才能使得在第一次選擇接受的男生就是N的可能性最大,注意到這N個男生是以不同的先後順序來追求這位女生的。

爲了將實際複雜的問題進行簡化,我們做出下面幾條合理的假設:
1、 N個男生以不同的隨機順序向女生依次表白,即在任一時刻不存在兩個或兩個以上 的男生向這位女生表白的情況的發生,而且任何一種順序都是完全等概率的。
2、 面對表白後的男生,女生只能做兩種:接受和拒絕,不存在曖昧或者其它選擇。
3、 任一時刻,女生最多隻能和一位男生談戀愛,不存在腳踏多船的情況。
4、 已經被拒絕的男生不會再次追求這位女生。

基於上述假設,我們想要找到這樣一種策略,使得女生以最大的概率在第一次選擇接受的那個男生就是N=Mr. Right。

模型建立

先考慮最簡單的一種策略,如果一旦有男生向女生表白,女生就選擇接受。這種策略下顯然女生以1/N的概率找到自己的Mr. Right。當N比較大的時候,這個概率就很小了,顯然這種策略不是最優的。

基於上面這些假設和模型,聰明的 MM 會想到一個好辦法:先和前面幾個男生玩玩,試試水深;大致摸清了男生們的底細後,再開始認真考慮,對於最先表白的M個人,無論女生感覺如何都選擇拒絕;以後遇到男生向女生表白的情況,只要這個男生的編號比前面M個男生的編號都大,即這個男生比前面M個男生更適合女生,那麼女生選擇接受,否則選擇拒絕。從數學模型上說,就是先拒掉前面M個人,不管這些人有多好;然後從第M+1個人開始,一旦看到比之前所有人都要好的人,就毫不猶豫地選擇他。不難看出,k 的取值很講究,太小了達不到試的效果,太大了又會導致真正可選的餘地不多了。這就變成了一個純數學問題:在男生總數N已知的情況下,當M等於何值時,按上述策略選中最佳男生的概率最大?

下面以N=3爲例說明:

三個男生追求女生,共有六種排列方式:

1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1

如果女生採用上述最簡單的策略,那麼只有最後兩種排列方式選擇到Mr. Right,概率爲2/3!=1/3。

如果女生採用上面我們提出的策略,這裏我們取M=1,即無論第一個人是否優秀,女生都選擇拒絕。然後對於之後的追求者,只要他比第一個男生更適合女生就選擇接受,否則拒絕。 基於這種策略,“1 3 2”、“2 1 3”、“ 2 3 1”這三種排列順序下女生都會在第一次做出接受的選擇時遇到“3”,這樣我們就把這種概率增大到3/3!=1/2。

現在我們的問題就歸結爲,對於一般的N,什麼樣的M纔會使這種概率達到最大值呢?(在這種模型中,前面M個男生就被稱爲“炮灰”,無論他們有多麼優秀都要被拒絕)

根據上面的模型假設,我們先找到對於給定的M和N(1,女生選擇到Mr. Right的概率的表達式。

把1到N個數字進行排列共有N!種可能。對於某個固定的M,如果最適合的人出現在了第P個位置(M< P≤N),要想讓他有幸正好被MM選中,就必須得滿足前P-1個人中的最好的人在前M個人裏,這有M/(P-1) 的可能。即可歸納爲下面的亮點:

當數字N出現在第P位置(M≤N),如果使上述策略在第一次選擇接受時遇到的是N,排列需要滿足下面兩個條件:

1、N在第P位置
2、從M+1到P-1位置的數字要比前M位置的最大數字要小

考慮所有可能的P,我們便得到了試探前M個男生之後能選中最佳男生的總概率P(M):

這裏寫圖片描述

模型求解

這個問題可以方便的通過計算機進行數值求解。
用 x 來表示 M/N 的值,並且假設N充分大,則上述公式可以寫成:
這裏寫圖片描述

對 -x · ln x 求導,並令這個導數爲 0,可以解出 x 的最優值,它就是歐拉研究的神祕常數的倒數—— 1/e !即此時
M=N/e。

結果分析:由上述分析可以得到如下結論:爲了使一個女生以最大的概率在第一次選擇接受男生時遇到的正是Mr. Right,女生應該採用以下的策略:

拒絕前M=[N/e]或者[N/e]+1個追求者,當其後的追求者比前M個追求者更適合則接受,否則拒絕。

也就是說,如果你預計求愛者有 n 個人,你應該先拒絕掉前 n/e 個人,靜候下一個比這些人都好的人。假設你一共會遇到大概 30 個,就應該拒絕掉前 30/e ≈ 30/2.718 ≈ 11 個求愛者,然後從第 12 個求愛者開始,一旦發現比前面 11 個求愛者都好的人,就果斷接受他。由於 1/e 大約等於 37%,因此這條愛情大法也叫做 37% 法則。
不過,37% 法則有一個小問題:如果最佳人選本來就在這 37% 的人裏面,錯過這 37% 的人之後,她就再也碰不上更好的了。但在遊戲過程中,她並不知道最佳人選已經被拒,因此她會一直癡癡地等待。也就是說,MM將會有 37% 的概率“失敗退場”,或者以被迫選擇最後一名求愛者的結局而告終。

37% 法則“實測”!

37% 法則的效果究竟如何呢?我們在計算機上編寫程序模擬了當 n = 30 時利用 37% 法則進行選擇的過程(如果 MM 始終未接受求愛者,則自動選擇最後一名求愛者)。編號越小的男生越次,編號爲 30 的男生則表示最佳選擇。程序運行 10000 次之後,竟然有大約 4000 次選中最佳男生,可見 37% 法則確實有效啊。

這裏寫圖片描述
計算機模擬 10000 次後得到的結果

不知道了解此問題的女生,會不會多了一種分手的理由:不好意思,你是那 37% 的人⋯⋯對於男生,該模型殘酷的,指出了炮灰存在的現實意義,正如偉大哲學家薩特所說“存在即是合理”,炮灰的不可避免性也許是對已經和即將成爲炮灰的男生的寬慰。But,However,What’s more(^__^) ……,該模型的量化指標都是採自女生主觀臆斷,各個指標的合理性希望廣大MM慎思之。

微軟鑽石問題

是時候回到原問題——“微軟鑽石題”上了。我們可以把每個鑽石看做是前來表白的男生,MM坐電梯上樓對其進行選擇,這樣該問題就可以化爲MM選擇最佳追求者的問題了。即有10個追求者,要求MM拒掉的男生的人數M爲多少時,纔可以以最大概率找到Mr. Right?

因此將N=10代入(1)式,由於是離散化的且N不是很大,我們可以用遍歷搜素進行求值,當然本問題用手工計算或計算器計算下就好了。經過計算可知M=3。

那麼對於較大的N,我們給出MATLAB的結果:

這裏寫圖片描述

仿真後可得隨着N的增長,按此方案選擇最優值在1/e附近。

結論:因此對於微軟鑽石選擇問題的策略是:前3層都不拿鑽石,並記錄下最大的鑽石的大小,然後從第四層開始,只要遇到比前三層都大的鑽石就拿。

結論推廣與討論

1、衆所周知生活中涉及到感情的事情是很複雜的,而且也是很微妙的,把所有可能影響的因素都考慮到幾乎是不可能的。不過也說明了數學的強大。

2、設女性最爲燦爛的青春爲18-28歲,在這段時間中將會遇到一生中幾乎全部的追求者(之前之後的忽略不計),且追求者均勻分佈,則女性從18+10/e=21.7即22歲左右開始接受追求對自己最有利,這告訴我們,想談戀愛找大四或研一的(有木有默默中槍的O(∩∩)O)。推而廣之,若只考慮時間段研究生2.5年的話,則T/e=0.9197。也就是說,對於研究生,男生表白的最佳時刻在第二個學期的期末。若不考慮進入實驗室後狹小的圈子的研二階段,那麼T=1/e=0.367.莫非是這學期12月份?--!

3、在文章中只考慮了N個男生表白的先後順序是完全隨機的,並沒有考慮相鄰兩次之間的時間隔。如果把時間因素也考慮進去的話,在一個相對較短的時間中,可以近似的假設爲齊次泊松過程,這樣不僅可以得出女生應該選擇上面的第M個男生的結論,而且找到男生表白的最佳時間在t=T/e時刻。 例如如果取時間段爲大學四年的話,則T/e=1.4715。也就是說,在大學四年裏,男生表白的最佳時刻在第三個學期的期末或寒假。但是這個模型假設 還沒有考慮:女生分辨N 能力是在增長的,並不是一開始就能無失誤的迅速判斷;在大學階段 18至22如果把她能接觸到的男生放進一個集合A,那麼max{A}會不斷減小的,等到她審閱到N/e的時候恐怕已經沒的選了(也就是說原模型不可以在時間段上任意推廣)。而且如果這個時間段較長的話,那麼男生追求可近似假設爲了一個非齊次泊松過程,或者分段齊次泊松過程。

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