请教一道算法题

此去苍茫 2018-09-21 09:13:47
从(0,1)中随机抽取n个实数。问 cnt 的期望值。(新的随机数大于前面所有数的个数的期望)。想了很久没有头绪。想请教下思路。谢谢!

cnt = 0;M = -∞ ;
for i = 1 to n {
xi=rand() ; // float from (0,1)
if (xi>M) then {
M = xi;
cnt + +;
}
}
...全文
184 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
此去苍茫 2018-09-21
  • 打赏
  • 举报
回复
应该不是这个意思。每个随机数都是在(0,1)区间里面取值直到N个随机数。M记录的是当前最大的随机数。问的是在N次取值中会有几次M的值(期望值)会改变(M是递增的)。但是每一次随机数的取值范围都是(0,1), 范围并没有变化。

其实就是说N个数的序列,新加入个数比前面的数都大的个数的期望。比如从(1,10)随机取整数取十个:
2,3,1,2,4,3,6,5,8,7
cnt = 5
沐雨青城 2018-09-21
  • 打赏
  • 举报
回复
楼主这个说白了就是在某个范围内生成随机数吧,只是这个范围的下限不断的在变。比如上限为b,为常值,下限为a也就是楼主说的前面n个数的数学期望,那么randnumber =(rand() % (b - a)) + a;生成的随机数是不是就在(a,b)之间了。
此去苍茫 2018-09-21
  • 打赏
  • 举报
回复
您是对的,最后就是调和级数的和。谢谢!
此去苍茫 2018-09-21
  • 打赏
  • 举报
回复
想偏了哈哈,谢谢!
Yofoo 2018-09-21
  • 打赏
  • 举报
回复
随机数不能单个来说话, 你说0.1, 我说0.9, 你再看看

cnt 的期望值 最后结果是 cnt = log(n) +c
c 是欧拉常数, 具体结果你去用代码验证
  • 打赏
  • 举报
回复
引用 7 楼 luoluo83 的回复:
第二个数大于0.1可以在(0.1,1)区间选取,小于0.1只能在(0.0.1)区间选取。概率肯定不一样啊。这个随机数服从均匀分布啊


你都知道第二个数,就不知道第一个数?
此去苍茫 2018-09-21
  • 打赏
  • 举报
回复
第二个数大于0.1可以在(0.1,1)区间选取,小于0.1只能在(0.0.1)区间选取。概率肯定不一样啊。这个随机数服从均匀分布啊
  • 打赏
  • 举报
回复
什么逻辑,第一个数小于和大于0.1的概率难道一样~~~
此去苍茫 2018-09-21
  • 打赏
  • 举报
回复
为什么第二个满足的概率是1/2呢? 比如第一个数是0.1, 第二个随机数大于和小于0.1的概率不一样吧,随机数大于0.1的概率应该要大于随机数小于0.1的概率。
Yofoo 2018-09-21
  • 打赏
  • 举报
回复
第一个数是满足条件的, 因为前面的个数为0

后续的数据是几率叠加
第2个满足的几率是 1/2
3 1/4
n 1/(1<<n-1)

总几率 f(n) = 1/2 + 1/4 + ....

当n -> ∞ 时 f(n) = 1

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧