Мне нужно создать большой список случайных чисел от 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 минут - сценарий завершится ...)
Так что я ищу альтернативы на стороне обнаружения дубликатов или в части генерации (Как я могу генерировать случайные числа без риска получения дубликатов)
Я открыт для любых предложений.