脚本宝典收集整理的这篇文章主要介绍了php阵列生成挑战,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
$igra[]=array(0,1,2,3,4,5,6,7,8,9); $igra[]=array(6,9,8); $igra[]=array(2,5.................... $igra[]=array(1,7..................... $igra[]=array(5,4................... $igra[]=array(4,2................... $igra[]=array(9,0..................... $igra[]=array(8,3..................... $igra[]=array(7,6.................... $igra[]=array(3,8....................
哪里
`$igra[x][z]!=$igra[y][z]` (x={0,9},y={0,9});
如你所见它就像一个数字矩阵,它的每一行和列也由数字0-9组成,并且每行或每列中从不有一个数字.
如何生成这样的数组,并且每次都是随机的.
$n = 10; $v1 = range(0,$n-1); $v2 = range(0,$n-1); shuffle($v1); shuffle($v2); foreach ($v1 as $x => $value) foreach ($v2 as $y) $array[$y][$x] = $value++ % $n;
这应该是一个非常快速的算法,因为它只涉及生成两个随机数组,并且根本不涉及任何交换.它也应该是随机的,但我无法证明. (至少我不知道如何证明这样的事情.)
首先以这种方式创建非随机矩阵(想象我们只需要5 * 5,而不是10 * 10):
0 1 2 3 4 1 2 3 4 0 2 3 4 0 1 3 4 0 1 2 4 0 1 2 3
在这个矩阵中,我们现在随机交换列.由于我们不更改列本身,您的规则仍然遵守.然后我们随机交换行.
现在,正如您所看到的,上述算法不会交换任何内容,也不会生成上述矩阵.那是因为它生成cols和行以提前交换($v1和$v2),然后直接写入结果数组中的正确位置.
编辑:刚做了一些基准测试:对于$n = 500,需要0.3秒.
EdIT2:用foreach循环替换for循环后,只需0.2秒.
以上是脚本宝典为你收集整理的php阵列生成挑战全部内容,希望文章能够帮你解决php阵列生成挑战所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。