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

问题描述:

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

 

给定一个数组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

你可能感兴趣的:(笔试面试)