[转]最大概率选择到“最好女孩”的算法

人们常常希望能够获得一个最可爱的人作为自己的伴侣。但是,由于老天爷在你的生命中安排的异性并不是同时出现任你挑选,因此无论你在何时选择结婚都是有机会成本的。也许你很早就结婚了,但是结婚之后却又不断发现还有不少更好更适合结婚的异性,这就是结婚太早的机会成本。那么,是不是晚一点结婚就可以避免这个问题呢?不是的!当结婚太晚,你错过最好的异性的可能性也就更大。那么,一个人究竟应采取什么样的策略才能最大可能地遇到最适合的异性,从而使结为伴侣的机会成本最低呢?我们不妨建立一个模型来考察。 

假设你是一个男孩子,而老天爷在你20岁到30最之间安排了20位适合你的女孩子。这些女孩子都愿意作为你的伴侣,但是你只能选择其中的一位。对于你来说,这20位女孩子的质量是可以排序的,也就是说事后你可以对她们的质量排名,质量排第一的对你来说就是最好的,排第20的对你来说就是最差的。可惜的是,由于20位女孩不是同时出现在你的生命中,而是按时间先后出现,每出现一个你都要决定是否留下她或拒绝她。如果留下她则她成为你的伴侣,你将再没有权利选择后面的女孩子;如果拒绝她,则你还可以选择后面的女孩子,但是对前面已经拒绝的女孩子将没有机会从头再来。 

20个女孩子的排名虽然可以在事后决定,但是在观察完20个女孩子之前,你并不知道全部女孩子的排名,你只知道已经观察过的女孩子谁比谁会更好。而且,上帝是完全随机地安排每个时间段出现的女孩子的,也就是说出现时间的先后与女孩子的质量是完全没有关系的。那么,你应该在什么时候决定接受一个女孩子,并且使得被接受那个女孩子属于最好女孩的概率最大呢? 

当然,你完全可以在碰到第一个女孩子时就接受她。她确有可能刚好就是最好的,但也有可能是最差的。当你接触到第二个女孩子,你可以知道她和第一个女孩子谁更好,但却不知道她们与剩下的18个女孩比又如何——前两个分别是最差的、次差的概率当然有,但前两个刚好是最好的、次好的可能性也是存在的,其他的概率情况也是有的。看来,你要尽可能挑到最好的女孩做伴侣还真是费神哦。 

现在让我们来设计几种挑选策略,以便在不确定性中尽可能找到最好的女孩子。 

策略1:事先抽签,抽到第几个就第几个。比如,抽到第10位,那么第10个在你生命中出现的女孩就事前被确定为你的伴侣。而她刚好是最好的女孩之概率是多少呢?答案是1/20=0.05。这种策略使你有5%的可能性获得最好的女孩。这样的概率显然太小,很难发生。 

策略2:把全部女孩分成前后两段,最先出现的10位均不接受,但了解了这10位女孩的质量,然后在后来出现的10位女孩当中,第一次碰到比以前都可爱的女孩子,就立马接受。这是一种等一等、看一看的策略。这样的策略中,你得到最好的女孩子的概率是(10/20)*(10/19)=0.263。这个概率已经不算太小。 

补充说明一下策略2中概率的算法:这样的规则下,确保得到最好的女孩子必然要求最好的女孩子在后10名女孩子中出现——否则你怎么也得不到最好的了 ——其概率是(10/20),同时,还要求第二好的女孩子出现在前10名,其概率为(10/19)——为什么是(10/19)?因为除了最好的,剩下人数 19个,第二好的女孩出现在前10名的概率就是(10/19)——这样就确保了你会得到最好的女孩子。 

但是,策略2得到最好女孩子的概率真的是0.263吗?可能不是,因为这只是第二好的女孩刚好在前10个出现的情况;实际上,即使第二好女孩子没有出现在先前的10个,但只要在最好的女孩出现之前的所有女孩中质量最高的出现在前10个,那么策略2也可确保得到最好的女孩子(这一点要想通,否则就难以明白接下来的内容)。也就是说,策略2获得最好的女孩子的概率实际上是超过0.263的(实际上我们在后面会发现这个概率应是0.3594。哇!这的确已经是一个不小的概率了)。 

但是,还有更好的方法吗?或者我们可以问,放弃先出现的10个女孩是否是最优的?如果不是,那么应该放弃几个先出现的女孩子呢? 

事实上,我们确有更好的策略(你应该先把前面的内容看懂,如果前面没看懂,下面可能就更看不懂了)。既然20个质量不同的女孩子其质量在你生命里是随机出现的,没有任何规律,那么,第k个女孩刚好是最好女孩的概率是1/20,而刚好把这个最好的女孩子选择到的概率是多少?对此的考虑应该是:既然给定了第k个女孩子质量最好,而我们决定放弃前面n-1个女孩子,从第n个开始执行策略2的规则,那么必须要求在k之前的女孩子中质量排名最高的那个必须出现前 n-1个女孩子中,这样才能确保k被选中,其概率就是(n-1)/(k-1)。从而第k个女孩子刚好是最好的女孩子而且又一定被选中的概率就是(1 /20)*[(n-1)/(k-1)]。这里,k的取值范围显然应该是[n,20]中的整数。所以,放弃n-1个女孩子而一定会得到最可爱的那个女孩子的概率实际上就是(1/20)*[(n-1)/(n-1)]+ (1/20)*[(n-1)/(n)]+ (1/20)*[(n-1)/(n+1)]+…+(1/20)*[(n-1)/(20-1)]。这个概率可以用Mathematica软件来计算,或者用 Excel来计算也可以,读者会发现,当n*=8时,该概率有最大值0.3842。也就是说,如果我们放弃前7个女孩子,先看一看,心里有个谱,然后只要看到比前7个女孩子中最好的女孩还要好的女孩子,那么我们就立即选择接受。而这个被接受的女孩子刚好属于最好女孩的概率是0.3842。这比我们放弃10 个女孩(n*=11)的策略2要好,按照策略2根据上述公式计算得到获得最好女孩的概率为0.3594。 

我们用Mathematica软件绘出获得最好女孩子的概率图形(纵轴是概率,横轴表示从第几个开始认真考虑接受。最大概率出现在n*=8,即放弃前7个,从第8个开始认真考虑接受)。 

根据这样的结果,我们可以这样结论:如果一个人确定结婚对象在20-30岁之间,而这20个女孩子以每年两个的平均分布出现,那么你应当在24岁才开始认真考虑终身大事。 

这个例子也可任意改动数据后用同样的方法求解。比如,如果是30个女孩子,那么你应该从第11个女孩子开始认真考虑终身大事。 

这个例子也可以改成其他的版本,比如:在20层楼中,每层楼都放着一颗宝石,每颗宝石的大小不一。现在你从第一楼开始上楼,每到一层楼你都可决定要不要该层楼中的宝石。如果不要,不能回头。如果要,则以后不能再取。问:你应该如何才可以有最大的机会获得最大那颗宝石?这个问题,据说是微软公司的面试题。但它的道理,与最大可能获得女孩子的道理是一样的。

posted @ 2012-08-22 14:41  josephchan  阅读(1193)  评论(0编辑  收藏  举报