如何从n个数中找出概率最大的一个?

sunny3106 2009-03-04 09:03:10
一个数组,n个数,如何从中挑选出出现概率最大的一个?
最大概率>50% 和 >10% 两种情况下。

我之能想到比较笨的方法,哪位高手给点指点?
...全文
403 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
陽洸膂珵 2009-06-01
  • 打赏
  • 举报
回复
帮顶!
xiaokunshuai 2009-03-23
  • 打赏
  • 举报
回复
每个元素设一个引用计数,每次判断时,对引用计数遍历就是了。
kostion 2009-03-11
  • 打赏
  • 举报
回复
i=0;j=0;
1,a[i]和a[i+1]比较,如果不等,i+=2,继续;如果相等a[j]=a[i];i+=2;j++;继续;直到所有数据比较完毕;
2,如果j==2或j==1,则a[0]为所求;
如果j>2,继续上面的操作
luxiaoxun 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nineforever 的回复:]
概率大于50%时可以不用计数,时间O(n),空间O(1)
[/Quote]

和微软的发帖水王是不是一样的道理?

如果每次删除两个不同的元素(不管是否包含概率大于50%的),那么,在剩下的元素列表中,概率大于50%的出现的次数仍然超过总数的一半。
arong1234 2009-03-11
  • 打赏
  • 举报
回复
你这个优化有时还是必要的
[Quote=引用 9 楼 KevinYuen 的回复:]
引用 5 楼 oo 的回复:
大于50%可以这样:
i=0;j=0;
1,a[i]和a[i+1]比较,如果不等,i+=2,继续;如果相等a[j]=a[i];i+=2;j++;继续;直到所有数据比较完毕;
2,如果j==2或j==1,则a[0]为所求;
如果j>2,继续上面的操作(1)

那10%的呢?大概结果不只有一个两个,用遍历计数的方法能统一算法,在里面能做一些优化,比如给处理过的数量加个记录,如果处理过的数大于了总数,就退出,效率能高些,特别是重复数字…
[/Quote]
KevinYuen 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 oo 的回复:]
大于50%可以这样:
i=0;j=0;
1,a[i]和a[i+1]比较,如果不等,i+=2,继续;如果相等a[j]=a[i];i+=2;j++;继续;直到所有数据比较完毕;
2,如果j==2或j==1,则a[0]为所求;
如果j>2,继续上面的操作(1)
[/Quote]
那10%的呢?大概结果不只有一个两个,用遍历计数的方法能统一算法,在里面能做一些优化,比如给处理过的数量加个记录,如果处理过的数大于了总数,就退出,效率能高些,特别是重复数字越多的时候效率越高。
arong1234 2009-03-11
  • 打赏
  • 举报
回复
is it really better than counting the elements?
直接对元素计数还是应该比较好吧

[Quote=引用 5 楼 oo 的回复:]
大于50%可以这样:
i=0;j=0;
1,a[i]和a[i+1]比较,如果不等,i+=2,继续;如果相等a[j]=a[i];i+=2;j++;继续;直到所有数据比较完毕;
2,如果j==2或j==1,则a[0]为所求;
如果j>2,继续上面的操作(1)
[/Quote]
sunny3106 2009-03-11
  • 打赏
  • 举报
回复
是排序啦,拍完之后看中间那个,或者每10%的看,但是排序只能做到O(NlogN)
[Quote=引用 2 楼 fhtingtian 的回复:]
比较笨的办法是对数组里出现的每个元素计数吗
[/Quote]
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 oo 的回复:]
大于50%可以这样:
i=0;j=0;
1,a[i]和a[i+1]比较,如果不等,i+=2,继续;如果相等a[j]=a[i];i+=2;j++;继续;直到所有数据比较完毕;
2,如果j==2或j==1,则a[0]为所求;
如果j>2,继续上面的操作(1)
[/Quote]
学习了..
oo 2009-03-05
  • 打赏
  • 举报
回复
大于50%可以这样:
i=0;j=0;
1,a[i]和a[i+1]比较,如果不等,i+=2,继续;如果相等a[j]=a[i];i+=2;j++;继续;直到所有数据比较完毕;
2,如果j==2或j==1,则a[0]为所求;
如果j>2,继续上面的操作(1)
nineforever 2009-03-05
  • 打赏
  • 举报
回复
概率大于50%时可以不用计数,时间O(n),空间O(1)
arong1234 2009-03-04
  • 打赏
  • 举报
回复
还有别得方法?
真得模拟取n次算概率?
[Quote=引用 2 楼 fhtingtian 的回复:]
比较笨的办法是对数组里出现的每个元素计数吗
[/Quote]
bfhtian 2009-03-04
  • 打赏
  • 举报
回复
比较笨的办法是对数组里出现的每个元素计数吗
arong1234 2009-03-04
  • 打赏
  • 举报
回复
不就是对数组中相同元素进行计数么?干吗换这么个怪名次出来

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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