面试题中的概率问题 - 数学期望(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相关文章推荐
- 面试中的概率问题 - 数学期望(2) - 武器升级需要的宝石数
- 面试中的概率问题 - 数学期望(2) - 武器升级需要的宝石数
- 排序数列中元素出现次数问题
- 【整理】一堆磨人の数学概率期望
- POJ3682King Arthur's Birthday Celebration(数学期望||概率DP)
- 数学问题——调整概率
- [程序员面试题精选100题]5.查找最小的k个元素
- 程序员面试题100题第05题——查找最小的K个元素
- 面试题精选(84):使序列有序的最少交换次数(minimum swaps) + 删除序列中所有重复的元素
- 数据结构面试题总结3——数组:求数组中两个元素的最小距离
- 对一道面试题的总结与扩展思考(关于一笔画问题的数学分析)
- 51Nod 1381 硬币游戏 | 概率(数学期望)
- 算法入门:最少比较次数求最大/最小/第二大元素
- 最小生成树问题的常规分析过程
- UVa 10288(Coupons) 数学期望(概率+递推) Java
- 程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】
- HDU 5245 Joyful (数学概率求期望)
- 在数组中限制次数的取最大值和最小值问题
- 排序,求几个最值问题,输入n个整数,输出其中最小的k个元素。
- [BZOJ4775][点分树][概率与期望][数学][卡精度]网管