我需要生成一个从 600k 到 2000k 的大量随机数列表,但是
列表不能有重复项。
我当前的“实现”如下所示:
<?php
header('Content-type: text/plain');
$startTime = microtime(true);
$used = array();
for ($i=0; $i < 600000; ) {
$random = mt_rand();
//if (!in_array($random, $used)) {
$used[] = $random;
$i++;
//}
}
$endTime = microtime(true);
$runningTime = $endTime - $startTime;
echo 'Running Time: ' . $runningTime;
//print_r($used);
?>
如果我保留in_array
测试评论处理时间在1秒左右,所以
这mt_rand
电话和used
数组填充相对“便宜”,但是当我取消注释时
in_array 测试发生了不好的事情! (我只是在等待 - 已经超过 10 分钟 - 脚本终止......)
因此,我正在寻找重复检测方面或生成部分的替代方案(如何在没有重复风险的情况下生成随机数)
我愿意接受任何建议。
对于快速/肮脏的解决方案,使用/检查数组键是否可以提高速度?
$used = array();
for ($i = 0; $i < 600000; ) {
$random = mt_rand();
if (!isset($used[$random])) {
$used[$random] = $random;
$i++;
}
}
$used = array_values($used);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)