2014-02-05 2 views
3

Я хочу взять набор из 4 миллиардов положительных целых чисел и вывести их в псевдослучайной последовательности, чтобы число не повторялось до тех пор, пока не будут выведены все 4 миллиарда. Я хочу, чтобы эта последовательность была повторяемой и предсказуемой для данного семени. Есть ли хороший алгоритм для создания такой последовательности, не прибегая к помещению упорядоченной последовательности в память, а затем выполняя псевдослучайную операцию сортировки по всему предмету? Случайность может быть очень слабой, если это облегчает ситуацию. БлагодаряГенерация псевдослучайных неповторяющихся целых чисел из 32-битного конечного набора

+1

Является ли 'return i ++' слишком слабым? ;-) – assylias

+0

Вы можете использовать ответные слова assylias, а затем xor выход с фиксированным значением (семя). –

+0

Вы должны иметь возможность использовать побитовые операторы в определенной последовательности для создания, казалось бы, случайного шаблона, но на самом деле совершенно неслучайный. Я бы ожидал, что некоторые рекурсии также будут задействованы. – Scottie

ответ

1

Вы можете использовать простой линейный конгруэнтный генератор с соответствующими значениями для a (= 214013), c (= 2531011), m (= 2^32) сделать это полный период.

X(n+1) = (a*X(n) + c) mod m 

Это произведет все 2^32 значений без замены и повторите ту же последовательность после этого.

Смежные вопросы