您的位置:首页 > 职场人生

面试题中的概率问题 - 数学期望(3) - 求最小值过程中元素替换次数的期望

2012-10-24 11:54 2616 查看

问题描述:

这是今年微软的一道面试题,考究的要点,仍然是我之前博文【面试中的概率问题-数学期望】中提到的数学期望的递归特性。

给定一个数组arr[0..N-1],其中每个元素值均不相同,让你求最小值,一个非常典型的做法是这样的:

int minVal= MAXINT;
for (i = 0;i < N; i ++) {
if (arr[i] < minVal) minVal =arr[i];
}


现在问你,minVal = arr[i]的执行次数的期望是多少?

问题分析:

依旧使用数学期望中的递归特性来解决这个问题。我们令数组元素个数为n时,对应的数学期望为f(n)。

那么f(n)可以进行如下分解:
如果最小值是arr[0],概率为1/n,执行次数为1次
如果最小值是arr[1],概率为1/n,执行次数为1次+f(1)
如果最小值是arr[i],概率为1/n,执行次数为1次+f(i)

如果最小值是arr[n-1],概率为1/n,执行次数为1次+f(n-1)

综上f(n) = (1/n)*((1) +(1+f(1)) + (1+f(2)) + … + (1+f(n-1))),化简后为
f(n) = (0+f(1)+f(2)+…+f(n-1))/n+ 1

如果我们令f(0) = 0,那么
f(0) = 0
f(n) = (f(0)+f(1)+f(2)+…+f(n-1))/n+ 1

最终可以得到:f(n) = 1 + 1/2 + 1/3 + … + 1/n

最终答案:

f(n) = 1 + 1/2 + 1/3 + … + 1/n
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: