怎样寻找最佳爱人:一个微积分求解的离散数学问题
概率的计算
最好的那个人在位置1的可能性是多少?跟其他任何位置一样,最好的那个人同样可能在位置1。所有的位置都同样可能,所以每一个位置的概率为p= 1/N。现在,如果最好的那个人在位置1,它被选到的概率是多少?因为第一个k中的任何人我们都不会选择,所以这个概率就是0。所以,在位置1并被选择到的组合概率为:
事实上,对于第一个k的各个位置,P的值都是P= (1/N)·0·0=0。所以,我们有
所以我们又有
在P中,第一个非零项来自位置(k+1)。这个位置上是最佳选择的概率还是为p= 1/N。如果最佳选择在这个位置,那么采用这个程序选择到它的概率为p= 1。在这个点上,
现在,我们需要将这些不同项求和。如果我们能够算出位置k+2的概率,那么我们就能算出其他所有项的概率。于是,让我们来思考位置k+2。
对于这个问题的思考,其中一个办法就是:它怎么才不会被选到。在这种情况下,我们假定最好的选择在位置k+2,于是第一个k中没有一个比它好。然而,如果位置k+1的那个选择比第一个k中任何一个都好,那么在你达到位置k+2之前它就会被选到。我们认为不存在并列最佳,所以在第一个k+1位置中就会出现最好的一个选择。如果这个最佳选项在第一个k+1个位置中,并且居于第一个k之中,那么位置k+1那个选项就不可能比之前的任何一个更好,并且进而我们就会达到位置k+2然后选出这个选项。如果最佳选项在位置k+2之内,我们成功地选出它的概率是p=k/(k+1)。(在数学计算推进中,这是最重要的一点。你要确保自己已经理解这个概率为什么是正确的。)
所以,这时我们有,
接着我们发现,最佳选择在位置k+3的概率仍然是p= 1/N。
如果在第一个k+2位置中的最佳选项居于第一个k之中,那么我们就会选出它。这发生的概率是p=k/(k+2)。所以,
其他选项的可能性都可以同样地确定。所以,我们有,
简化为
或
这里有一个重要的地方我们要注意,上边的两个方程不是等价的。在第一个中,定义域是k=0,1,2…N-1。然而在第二个中,它被限制为k=1,2…N-1。我们应该考虑,定义域中一个元素的丢失是否会导致重大的问题。当我们考虑k=0的情况,这就表示选出了第一个选项。这个选项为最佳的概率是p= 1/N。我们的函数丢失了这个值,不过我们丢失的这个东西它的值我们已经知道。所以,我们仍然可以把函数
作为我们的模型。
让我们来看一个例子。假设N=5,并且定义域为k=1,2,3,和4,我们有,
在这个例子中我们看到,k=2是最佳的那个值。它给予我们的成功率是0.4333。下表是N的其他几个值的结果。
我们看到,成功的最大概率在稳步下降。这是可以预料的。比起从11或111开始选择,从3开始我们应该有更好的选出最佳选项机会。随着N的增大,这个概率最终会接近值1/N?不列出所有这些值,并且不去看看哪一个最大,那么我们怎样确定k的最佳值?我们能够设计一种算法吗,用它来找到正确的那个值更容易一些?
我们可以借助于微积分吗?为什么我们不用关于k的函数P求导,令这个导数等于零,然后求解?记住重要的一点,P(k)不是一个连续函数。它的定义域仅仅为k= 1,2,3…N。所以标准的演算技术不是我们的选择。不过,后边我们会再次考虑到微积分。
从上边的这个表和图,我们注意到,概率在1/N连续增加到一个最大值,然后回落到1/N。图表上的最大值是怎么回事,我们能够弄清吗?找到最大值的一个方法就是去思考P(k)函数值的连续序列。k如果是我们想要的那一个,那么对于这个k来说,下一个的概率比前一个的概率更小——这个k就是这样的第一个。即是说,P(k +1)- P(k)<0。这个过程类似于微积分中使用的一阶导数检定法。
所以,
如果我们累积求和,那么不同的k值计算可得
为负值的第一个和将会给予我们求解的答案。下表举例说明了N=15的这一求解过程。
在离散数学的优化问题中,求解的算法常常产生出那个解决方法。但是,它不是某一个具体而清晰的解决方法。通常,我们对这种“解决方法”不满意。不过,写一个程序十分简单。当
的时候,它会运算到程序结束。所以对于任意给定的N,我们也能够容易地找到清晰具体的解决方法。下边就是这样一个简短的计算程序,可以用它来找到那个k:
程序名:寻找最佳配偶
:Disp “INPUT N”
:Input N
:0.S
:N-1.X
:While S<1
:1/X+S.S
:X-1.X
:End
:Disp X+1
:X+1.K
:(K/N)(sum(seq(1/T,T,K,N-1)) ).P
:Disp P
微积分求解
我 们不能直接用微积分解决这个问题,不过我们可以用微积分得到一个近似值。对于微积分,离散数学模型的运用原则为人熟知。这也包括近似连续模型方法的使用。 在微分方程中,也可以利用欧拉方法近似求解。以及,莱曼求和或者定积分逼近的梯形原则也涉及到这个问题。对于这个问题我们的思路是反向的,我们有一个离散 函数但我们用连续函数来求它的近似值。对于连续逼近来说,微积分是一种更强有力的手段。
设这个概率的函数为
在x=k到x=N的取值范围中,曲线y=1/x下对应一个面积。对于这个面积,微积分可以被视为是近似求和。
同样,对于
,
的微积分被视为是一种近似值。所以,我们可以用函数
来求函数P(x)的近似值。从上图可以看到,当N和k很小时,这个近似值很差。不过,随着N值的增大,k也增大。一旦取值超过N=15和k=5,我们看到曲线下矩形面积代表的就不是那么“差”的值。现在,我们令变量为比率k/N=x,那么我们就得到近似的连续函数
于是,我们可以借助微积分进行计算。
我们有
所以
设
我们发现
常数e在问题中露面了,这叫人很兴奋。这即是说,我们应该放过位置k/N=1/e≈0.368,然后才开始选择我们的配偶。我们也应该核查一下从那个程序计算所得的值,看看这是否是一个合理的近似值。
成功的概率是多少?它减小到1/N了吗?现在,我们可以用下边这个函数计算成功率的近似值:
结论
随着k增大到大约0.368,成功率也逐渐向下平落。利用这一计算过程,我们发现,我们可能成功地从数量为N的一群人中选出最好的那个。方法是,放过前边供以选择的大约37%的选项,然后在37%的几率中选择比之前所看到的都好的第一个。无论N的值多大,这都是真的!这是一个引人注目的高概率。通过这种办法,你能够以几乎37%的几率从5000个人中选出最好的那一个。即,对最先的1839个人不做选择,然后选择比那1839个都更好的那第一个。
对于学生而言,这里可以得到一个建议。与你中学的心上人结婚不是一个特别好的策略。不要太过认真,不要太匆忙。走出去,与大量的人的接触。去看看你喜欢谁,谁喜欢你。然后,做出你的选择。
附:当N大于15时,这个近似值相当精确。所以,至少约会过15个对象,你的择偶决定才会更靠谱一些。一 般而言,我们一生择偶对象的量不会很大。所以,刚开始的几个情侣可以彻底放开心地相处,因为那才是最好的爱情练习。然后,情侣数、阅历以及年龄到了一定程 度后,碰到一个比之前都要好的人就赶紧婚了吧。意中人可能多如金黄的麦田,但你只能摘其中一支麦穗。(另:否决项当译为放弃项)
参考文献:
Shultz, Harris和Bill Leonard〈文秘雇佣策略〉,《本科数学及其应用杂志》,1987年冬季卷8第4号。
Paulos, John Allen《数学盲》,纽约,纽约Hill and Wang出版社1988年。
作者:
Dan Teague teague@ncssm.edu