以下代码是Buffon';什么样的针实验? import java.util.Random; 公开课考试{ 公共静态void main(字符串[]args){ 双和=0; 双sum2=0; 随机数=新随机数(); 对于(int i=0;i
,此代码肯定不会模拟。以下是证明:以下代码是Buffon';什么样的针实验? import java.util.Random; 公开课考试{ 公共静态void main(字符串[]args){ 双和=0; 双sum2=0; 随机数=新随机数(); 对于(int i=0;i,java,algorithm,Java,Algorithm,,此代码肯定不会模拟。以下是证明: a) 使用,您可以根据生成介于0(包含)和bound(排除)之间的随机int。使用bound=5的可能结果是{0,1,2,3,4} b) 由于我们使用均匀分布,每个结果都有相同的概率Pr(x=0)=Pr(x=1)=Pr(x=2)=Pr(x=3)=Pr(x=4)=1/5 c) x=1和x=3的事件是相互排斥的,因此Pr(x=1∪ x=3=Pr(x=1)+Pr(x=3)=1/5+1/5=2/5 d) 使用c),我们可以推断E(sum)等于10000*P(x=1)
- a) 使用,您可以根据生成介于
(包含)和0
(排除)之间的随机bound
。使用int
的可能结果是bound=5
{0,1,2,3,4}
- b) 由于我们使用均匀分布,每个结果都有相同的概率
Pr(x=0)=Pr(x=1)=Pr(x=2)=Pr(x=3)=Pr(x=4)=1/5
- c)
和x=1
的事件是相互排斥的,因此x=3
Pr(x=1∪ x=3=Pr(x=1)+Pr(x=3)=1/5+1/5=2/5
- d) 使用c),我们可以推断
等于E(sum)
。类似地,可以显示10000*P(x=1)∪ x=3)=10000*2/5=4000
E(sum2)=6000
- e) 使用上述信息,可以看到
,这不等于Pi=e(2*sum2/sum)=3
3.14159…
import java.util.Random;
public class Test {
public static void main(String[] args) {
double sum = 0;
double sum2 = 0;
Random randomNum = new Random();
for(int i = 0; i<10000; i++) {
int random = randomNum.nextInt(5);
if (random == 1 || random == 3 || random==5) {
sum++;
}
else {
sum2++;
}
}
System.out.println(2*(sum2)/sum);
}
}
define createandcheckpine:
输入:双[]行X,双透镜
输出:布尔
//x的位置必须位于地板宽度范围内
double x=randouble(0,linesX[长度(linesX)-1])
//针的方向为rad
双方向=随机双方向(0,π*2)
//另一个方向的位置
双x2=x+cos(方向)*透镜
返回包含(linesX,l->min(x,x2)l
性能注意事项:是否有理由在每次迭代中生成一个新的Random
对象?将此变量从循环中拉出会更有效。是的,不是每次都必须生成一个随机数吗?否则,我们将只使用1个numberNo。Random randomNum
是随机生成器。callingnextInt(…)
生成(下一个)随机值。哦,谢谢你会注意到这一点!这里有一个很好的例子。这在java中是什么样子的?@VishvakSeenichamy拜托,这应该不会太难翻译成java,你自己试试。好吧,我明白了,我只是想澄清一下。现在看看代码,我明白了!只是好奇,那是什么语言?@VishvakSeenichamy这是伪代码。它用于显示算法背后的基本思想。这不是可以由软件编译或解释的实际实现“x=1和x=3的事件是独立的”-对不起,什么?它们显然是相互排斥的事件,因此它们在定义上不可能是独立的。此外,您似乎将|
用作“或”,这至少是误导性的,因为在概率上它被用作“给定”。因此P(x=1 | x=3)=0
,因为如果x
是3
,那么它就不可能是1
。我也怀疑用6段来解释,如果你多次从0到4(含)取一个随机数,那么你会有大约2/5个奇数。你是对的。编辑了答案。关于语法……我补充道解释|
的注释。如果有乳胶风格的符号,我会添加一个\cup
。但是,对于计算机科学家来说,我认为|
(逻辑or)表示最接近我所指的语义(出现x=1\cup x=3
).关于长度:因为这对OP的作者来说并不微不足道,所以我采取了详细解释的方法。让我们看看有人抱怨公式中大写的u(u)需要多长时间∪代码>,外观[几乎]相同)。=)
define createAndCheckNeedle:
input: double[] linesX , double len
output: bool
//the position of x must lie in the range of floor-width
double x = randomDouble(0 , linesX[length(linesX) - 1])
//the orientation of the needle as rad
double orientation = randomDouble(0 , PI * 2)
//the position of the other orientation
double x2 = x + cos(orientation) * len
return contains(linesX , l -> min(x , x2) < l AND max(x , x2) > l