zoukankan      html  css  js  c++  java
  • 怎样寻找最佳爱人:一个微积分求解的离散数学问题

    怎样寻找最佳爱人:一个微积分求解的离散数学问题

        概率的计算

        最好的那个人在位置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的其他几个值的结果。

        

        我们看到,成功的最大概率在稳步下降。这是可以预料的。比起从11111开始选择,从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=kx=N的取值范围中,曲线y=1/x对应一个面积。对于这个面积,微积分可以被视为是近似求和。

        

        同样,对于

        

        的微积分被视为是一种近似值。所以,我们可以用函数

        

        来求函P(x)的近似值。从上图可以看到,当Nk很小时,这个近似值很差。不过,随着N值的增大,k也增大。一旦取值超过N=15k=5,我们看到曲线下矩形面积代表的就不是那么“差”的值。现在,我们令变量为比率k/N=x,那么我们就得到近似的连续函数

        

        于是,我们可以借助微积分进行计算。

        我们有

        

        所以

        

        

        

        我们发现

        

        常数e在问题中露面了,这叫人很兴奋。这即是说,我们应该放过位置k/N=1/e0.368,然后才开始选择我们的配偶。我们也应该核查一下从那个程序计算所得的值,看看这是否是一个合理的近似值。

        成功的概率是多少?它减小到1/N了吗?现在,我们可以用下边这个函数计算成功率的近似值:

        

        结论

        随着k增大到大约0.368,成功率也逐渐向下平落。利用这一计算过程,我们发现,我们可能成功地从数量为N的一群人中选出最好的那个。方法是,放过前边供以选择的大约37%的选项,然后在37%的几率中选择比之前所看到的都好的第一个。无论N的值多大,这都是真的!这是一个引人注目的高概率。通过这种办法,你能够以几乎37%的几率从5000个人中选出最好的那一个。即,对最先的1839个人不做选择,然后选择比那1839个都更好的那第一个。

        对于学生而言,这里可以得到一个建议。与你中学的心上人结婚不是一个特别好的策略。不要太过认真,不要太匆忙。走出去,与大量的人的接触。去看看你喜欢谁,谁喜欢你。然后,做出你的选择。

        附:N大于15时,这个近似值相当精确。所以,至少约会过15对象,你的择偶决定才会更靠谱一些。一 般而言,我们一生择偶对象的量不会很大。所以,刚开始的几个情侣可以彻底放开心地相处,因为那才是最好的爱情练习。然后,情侣数、阅历以及年龄到了一定程 度后,碰到一个比之前都要好的人就赶紧婚了吧。意中人可能多如金黄的麦田,但你只能摘其中一支麦穗。(另:否决项当译为放弃项)

        参考文献:

        Shultz, HarrisBill Leonard〈文秘雇佣策略〉,《本科数学及其应用杂志》,1987年冬季卷84

        Paulos, John Allen数学盲》,纽约,纽约Hill and Wang出版社1988

        作者:

        Dan Teague   teague@ncssm.edu

  • 相关阅读:
    rubygems ruby国内源
    怎么修改Elasticsearch的对外ip 默认是本地IP 127.0.0.1
    Logstash怎么导入csv
    MongoDB创建索引(不锁库方法)
    怎么样快速完整备份和压缩 很大的 sqlserver 1TB 数据库 -摘自网络
    JAVA class 编译jar。 控制台使用jar
    离线安装 Ambari Hadoop
    [js高手之路]深入浅出webpack教程系列8-(postcss-loader,autoprefixer,html-loader,less-loader,ejs-loader)用法
    [js高手之路]深入浅出webpack教程系列7-( babel-loader,css-loader,style-loader)的用法
    [js高手之路]深入浅出webpack教程系列6-插件使用之html-webpack-plugin配置(下)
  • 原文地址:https://www.cnblogs.com/zcwvictor-2012/p/3300054.html
Copyright © 2011-2022 走看看