问题: 有n个数字,要求你在线的选择其中一个最大的,在选择第i个之前,你知道前i-1次的数字是什么,但是无法知道你将要选择的数字和以后待选的数字的大小。
一个很自然的策略是选定一个K,先看一下前k个的大小,不做任何选择,然后继续看,知道遇到一个比这之前的k个人还好。可以证明k= n/e 的时候,能够获得最好的选择,能够选择到最大的那个。证明其实是比较简单的。假设在我们的某次选择中,选择第i个是最优选择,那么很显然第i个必须是这n个数中最大的,那么此时的概率是1/n,第二个要求是前k个数中存在这i个数中次大的数,否则是不会选择第i个的。此时的概率是k/i-1,所以把第k个到第n个累加起来就OK了,然后取得次数的最大数,可以计算获得k=n/e。
很显然这个问题是一个在线算法的问题,无法预知之后的情况,边输入边进行处理。而离线算法是要求当输入完成之后,然后进行输出。 在线算法的目的就是能够达到离线算法的一样好的效果。
题目来源:
http://zhiqiang.org/blog/science/tcs-classroom-notes-the-best-dating-strategy.html
http://www.cnblogs.com/fll/archive/2008/06/01/1211569.html