相关疑难解决方法(0)

为什么这个简单的shuffle算法会产生偏差的结果呢?什么是一个简单的原因?

似乎这个简单的shuffle算法会产生偏差的结果:

# suppose $arr is filled with 1 to 52

for ($i < 0; $i < 52; $i++) { 
  $j = rand(0, 51);

  # swap the items

  $tmp = $arr[j];
  $arr[j] = $arr[i];
  $arr[i] = $tmp;
}
Run Code Online (Sandbox Code Playgroud)

你可以尝试...而不是使用52,使用3(假设只使用3张卡),并运行10,000次并计算结果,你会看到结果偏向某些模式......

问题是......它会发生什么简单的解释?

正确的解决方案是使用类似的东西

for ($i < 0; $i < 51; $i++) {  # last card need not swap 
  $j = rand($i, 51);        # don't touch the cards that already "settled"

  # swap the items

  $tmp = $arr[j];
  $arr[j] = $arr[i];
  $arr[i] = $tmp; …
Run Code Online (Sandbox Code Playgroud)

algorithm math shuffle

18
推荐指数
4
解决办法
9948
查看次数

标签 统计

algorithm ×1

math ×1

shuffle ×1