【发布时间】:2015-09-30 12:49:26
【问题描述】:
我在这个练习中遇到了平均距离问题。它应该接近 N 步的 sqrt,但它更低。你能帮我找出我的错误在哪里吗?
2D 随机游走。 二维随机游走模拟粒子在点网格中移动的行为。 在每一步,随机游走者以 1/4 的概率向北、向南、向东或向西移动, 独立于之前的动作。确定随机游走者在 N 步后离起点有多远(平均)。 (理论答案:在 sqrt(N) 的数量级上。)
public class RandomWalk{
public static void main(String[] args){
int N = Integer.parseInt(args[0]);
double nextStep = 0;
double averageDistance = 0;
int COUNT = 1000;
for (int j = 0; j < COUNT; j++){
int moveWest = 0;
int moveEast = 0;
int moveSouth = 0;
int moveNorth = 0;
double distance = 0;
for (int i = 0; i < N; i++){
nextStep = Math.random()*4;
if (nextStep <= 1) ++moveWest;
else if (nextStep <= 2) ++moveEast;
else if (nextStep <= 3) ++moveSouth;
else if (nextStep <= 4)++moveNorth;
}
moveEast = moveEast - moveWest;
moveNorth = moveNorth - moveSouth;
distance = Math.sqrt((moveEast * moveEast) + (moveNorth * moveNorth));
averageDistance += distance;
System.out.println("Walker is " + distance + "\t steps away of from the starting point");
//System.out.println("Sqrt of N is " + Math.sqrt(N));
}
System.out.println("Average distance is " + averageDistance/COUNT + " steps away of from the starting point");
}
}
【问题讨论】:
-
的范围大于 (3,4> 所以我会开始制作它们,即使在任何地方都使用小于比较。我测试了它但没有做出重大改变,还是……从这里开始。
-
我认为它不应该收敛到 sqrt(N) 或类似的东西。它应该在 sqrt(N) 或类似的数量级上。或 mb O(sqrt(N))。数学...
-
那我猜我的解决方案是对的?