谢邀。
上一个暑假在西雅图实习的时候,有个在加州实习的小伙伴发给我一道tech招聘会上的程序分析题目:
有这样一段代码,其中randomUniform(0, 1)指的是从(0, 1)的均匀分步中取一个随机数
float sum = 0.0; while(sum <= 1.0) { sum += randomUniform(0, 1); } return sum;
问这个程序返回值的期望值。
既然是招聘会的题目,应该是有巧妙的初等办法,有兴趣的朋友可以想一下,想到了告诉我。然而,作为一个数学专业,我条件反射地用了上学期stochastic calculus的方法解决了,把过程及答案发回给了小伙伴。小伙伴不是数学专业,自然也看不懂过程,不过他通过瞎扯名词让招聘人员相信他做出来了,还得了个奖。据他所说,在场各种MIT哈佛学生,和各种大小公司的实习生,没人做得出来。。。感觉自己好像错过了什么。。。
至少我发现了:数学原来可以帮助找工作。
有兴趣的可以看看stochastic calculus的解法:
令 ,, 定义停时。目的是求。可见 是一个鞅。因为, 满足optional sampling定理条件,可以得到, 也就是说,所以求就可以了。要求一个函数 使得 是一个鞅,且对于 ,。根据鞅性质以及边界条件,解ODE:得到。为什么这样就足够了呢? 因为根据鞅性质,令 ,根据单调以及控制收敛定理,收敛到。因为边界条件,,所以。最终结果就是
看上去好像步骤很多,其实这是这类问题的标准解法,学会的话其实还是挺简单的。学math finance的小伙伴会经常遇到这种题,差不多就是随机过程变成了连续时间的,中间加一步Itô's formula,再列ODE,本质还是一样的。还是不懂为什么这种题会出现在tech的招聘会,可能还是有初等的解法吧。。
Update: 没想到大家对这道题这么感兴趣,这个问题有几个回答都被我带歪了2333。评论里有一两个稍微初等一点点的方法,实际上也不太算初等,我觉得招聘会的题都倾向于脑筋急转弯那种,这题可能比较另类吧。这确实是一道很好的题目,我和我的概率教授提了一下,他就把这道题加进了自己的题库里了。。
Update 2: 没想到大家这么喜欢这道题,从没见过评论这么热烈的数学回答2333,我从评论里也学到不少东西,多谢各位了。有兴趣的同学可以去学一下stochastic calculus,这个学科不仅有用,还挺漂亮的。
Update 3: 告诉我这道题的小伙伴似乎并没有收到出题公司的面试,果然数学还是没啥用......