这是我正在处理的问题的子问题。 一个人站在0的x轴上,并在手机上收到一条字符串以到达目的地。
+表示正向移动1个单位。
-表示沿负方向移动1个单位。
发送给他的字符串和他实际接收的字符串由于外部因素而失真。
他实际收到的字符串包含他不可读的第三个字符,即“?”。如果他读?他随机选择将1个单位向右或向左移动。
我必须找到成功者带着收到的短信到达最终目的地的可能性。
例如:
s1 = +-+-
s2 = +-??
s1的值为0(1-1 + 1-1)。
s2可以具有值(2,0,-2,0)
所以他到达目的地的概率是2/4 = 0.5
到目前为止,我所做的是根据s1计算最终的目标分数,并根据s2中的+ s anf -s计算临时分数,两者之间的差是我想要达到的总和。
现在的问题实质上是,使用y 1s和-1s可以得到多少个x的和。然后用该值除以2 ^ y来计算概率。
private static double calculateProb(String s1, String s2) {
// TODO Auto-generated method stub
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray();
int num_q = 0, temp = 0;
int score = 0;
for(char c: c1){
if(c=='+')
score+=1;
else if(c=='-')
score-=1;
}
for(char c : c2){
if(c=='+')
temp+=1;
else if(c=='-')
temp-=1;
else if(c=='?')
num_q++;
}
return 0.0;
}
这是我到目前为止所拥有的。
答案 0 :(得分:0)
用y 1s和-1s可以有多少种方法求和x
首先出现一些极端情况:如果| x | > y 有零种方法。如果 x 为偶数,而 y 为奇数,反之亦然,则它也为零。否则,您需要 a 1s和 b -1s,其中 a - b = x 和 a + b = y 。所以 a =( y + x )/ 2和 b =( y - x )/ 2。然后,您可以将( y !)/( a !× b !)。这是从 y 中选择 a 元素的方法的数量,该方法使用二项式系数计算,该系数有时写为 yCa ,发音为“ y 选择 a ”。参见https://en.wikipedia.org/wiki/Combination进行进一步的讨论。