zoukankan      html  css  js  c++  java
  • 公主选驸马问题的思维分析过程

    原始问题:波斯公主到了适婚年龄,要选驸马。候选男子100名,都是公主没有见过的。百人以随机顺序,从公主面前逐一经过。每当一位男子在公主面前经过时,公主要么选他为驸马,要么不选。如果选他,其余那些还没有登场的男子就都遣散回家,选驸马的活动也over了。如果不选,当下这名男子就离开,也就是pass掉此人,下一人登场。被pass掉的,公主不可以反悔再从选。规则是,公主必须在这百人中选出一人做驸马,也就是说,如果前99人公主都看不中的话,她必须选择第100名男子为驸马,不管他有多么丑陋。

    那我们的任务就是,给公主设计选择方法,让她有最高概率选到百人中最英俊的男子为驸马。

    问题转换为:假设有100个数字,随机无放回的抽取K个数字(每次一个)。寻找一种策略使得第K次抽取到最大数字概率最大化

    问题理解:并没有一种策略可以确保每进行一轮抽取都能在第K次抽到最大的数字,我们的目的只是让第K次抽到最大的数字概率最大化。

    假设:为了方便说明,假设最大数字只有一个。

    粗糙的解法:随机选择一个K值,则第K次抽到最大数字概率明显就是0.01。所以到目前为止,baseline=0.01. 我们需要寻找一种策略使得这个概率大于0.01. 

    正解:因为最大值出现的位置是不确的,其不确定性其实是可以度量的(通过信息熵,此处略...)。我们需要寻找一种策略降低其不确定性。用贝叶斯的角度看就是我们需要寻找先验知识,从信息论的角度看就是需要信息增益。策略最关键地方就是寻找先验知识。

    重新阅读一下问题的条件:“随机无放回的抽取K个数字”。假设我们已经抽取了m个数字(m<k),我们可以得到什么先验知识吗?显然我们可以得到这m个数字的分布状况的吗,比如均值,最大,最小值,众数和中位数等。这m个数字可以看作总体(100个数字)的一个抽样,一定程度上反应了总体的分布。 

    这m个数字的分布状况就是我们得到的先验知识,进一步说m个数字中的最大值是我们得到的先验知识。因为目的是寻找100个数字中的最大值,所以第K次抽样的数字必须大于m中的最大值。m个数字中的最大值(定义为mx)是进一步抽取的基准,也就是说从第m+1次开始,只有抽到的值(max)比mx大,就可以停止抽取了(因为没有更多地先验知识可以支持我们继续抽样,这里我们假设mx是总体中第二大的数字。当然如果mx不是总体中第二大的数字,那么我们的策略就失败了。记住我们的目的只是找到一种策略使得第K次抽取到最大数字的概率最大化,而不是找到必胜策略)。如果第m+3次抽取到了max,则K=m+3.

    策略:抽取了m个数字(m<k),以m个数字中的最大值(定义为mx)做进一步抽取的基准,继续抽取直到抽到比mx大的数字停止,停止时候抽到的值就是策略认为的最大值。现在问题则是:如何确定m? 等同于如何确定m以确保前m个数最大概率包含前K-1个数的最大值?

    [P(m)=sum_{k=m+1}^n frac{1}{n}cdot frac{m}{k-1}= frac{m}{n}cdot sum_{k=m+1}^nfrac{1}{k-1}]

     使用x替换m/n,并假设n无限大。得到下面式子,并且对其求导是导数等于0。得到x=1/e. m=100/e=37.

    [p(xn)=xint_{x}^{1}frac{1}{t}dt=-xlnx]

    最终策略:先抽样37个数,记下最大值mx。然后继续抽样,如果抽到比mx大的数就停止。这样抽抽到最大值的概率是最大的。

  • 相关阅读:
    软件工程基础
    第一个微信小项目
    数据库实践
    爬虫
    模拟体育竞技
    自己的第一个网页
    科学计算和可视化
    结队项目
    自动生成小学四则运算
    自动生成小学四则运算
  • 原文地址:https://www.cnblogs.com/1zhk/p/4934273.html
Copyright © 2011-2022 走看看