首页 新闻 会员 周边

求算法大神!!!

0
悬赏园豆:50 [已解决问题] 解决于 2022-10-09 11:10

一组数据有M(M>2)个字符, 由随机的0或1组成. 从第1个数字到第N(2<N<=M)个数字, 求出现1的概率最大值X。
条件:

  1. 最大概率小于给定的R, 则跳过计算
  2. 如果计算的最大概率值X=1,且N<5((即前面四个数字全是1),则取第其他最大概率值,而不是1; 否则取1

示例数据:
甲 10011 11001 00000
已 00011 01001
丙 11110 11000 00

现假设 R=1/2;
如甲组数据:有15个数字(M=15),当N=5时,从第1个数字开始数到第5个, 1出现的概率x= 3/5; N=6,1出现的概率是x= 4/6,N=7,概率是x=5/7...一直到 N=15,概率是x= 6/15, 返回最大概率值x= 5/7
乙组数据, M=10, 不论N为几, 概率都小于R, 不用计算
丙组数据, M=12, N为3或4时, 计算的概率都是1, 但不满足第二个限制条件, 则不能取值1,而是往后继续计算最大值X=6/7

求最优算法,语言不限. 注意: M的值可能非常大,请考虑性能

不务正业的Coder的主页 不务正业的Coder | 初学一级 | 园豆:20
提问于:2022-09-27 18:02
< >
分享
最佳答案
0

无论使用哪种方式,最优的结果也至少要遍历一遍数组,所以他的时间复杂度最低也是O(n)。
var max = 0;
var len0 = 0;
var len1 = 0;
for(var i=0;i<arr.length;i++)
{
if(arr[i]==0)
len0++;
else
len1++;
var result = len1 / (len1+len0);
if(result > max && ((result!=1 && i<5) || i>=5))
max = result;
}
if(max>R)
print(max);

收获园豆:50
a1010 | 菜鸟二级 |园豆:301 | 2022-09-28 10:33

某些情况下不用遍历所有数组元素,比如前6个都是1,那最大占比就是1了

会长 | 园豆:12401 (专家六级) | 2022-09-28 10:38

@会长: 对的,这里还要加一个条件,如果i>5 && max==1 break跳出循环,但是这是条件,对于算法时间复杂度来说就是O(n)

a1010 | 园豆:301 (菜鸟二级) | 2022-09-28 10:40
其他回答(1)
0

我想到一个减少计算占比次数的方法:假设现在占比最高点在i,现在遍历到了j:

如果 j和i相邻,此时,如果j点是'1",占比必然变大,无需计算,只需要把i赋值j;如果j点是0,占比必然减少,什么也不做

如果j和i不相邻,需要计算j点和i点哪个占比大,如果j点占比大,i赋值j

遍历过程中需要记录”1“出现的次数,方便计算占比。

会长 | 园豆:12401 (专家六级) | 2022-09-27 19:34

不是很明白其中"最高点","相邻"这种说法怎么呈现, 能烦请用代码展示看下吗?

支持(0) 反对(0) 不务正业的Coder | 园豆:20 (初学一级) | 2022-09-28 10:27

@Pawpsicle: 等我有空的啊,现在有点忙

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2022-09-28 10:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册