2014-09-11 2 views
0

У меня есть большой вопрос, на мой взгляд:Роль семян в генерации случайных чисел

я могу использовать несколько семян для генерации случайных чисел:

Random rand = new Random(34666666); 

Но дело в том, что я не могу понять это роль этого семени. Например, что разница

Этот код следующим:

Random rand = new Random(); 
+0

Http: //en.wikipedia. org/wiki/Random_number_generation # Computational_methods – GriffeyDog

+0

http://docs.oracle.com/javase/7/docs/api/java/util/Random.html –

ответ

5

Когда вы передаете конкретную, жестко запрограммированный семя, в one-arg Random constructor, случайные числа, которые будут генерироваться всегда будет при каждом запуске программы. Это необходимо, когда вам нужен предсказуемый источник случайных чисел.

Однако, если вы не поставляете семена, тогда Random constructor выберет для вас семена, основанные на System.nanoTime. Случайные числа будут отличаться при каждом запуске программы, потому что семя будет отличаться каждый раз.

Создает новый генератор случайных чисел. Этот конструктор устанавливает семя генератора случайных чисел на значение, которое, вероятно, будет отличаться от любого другого вызова этого конструктора.

Это важно, потому что генератор случайных чисел Java является псевдослучайным; каждое новое псевдослучайное число влияет на семя, которое используется для следующего псевдослучайного числа, которое генерируется.

1

Семя позволяет получить определенную последовательность случайных чисел.

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

Без семян конструктор выбирает один для вас в зависимости от времени, когда объект Random инстанцируется.

0

Я бы предложил прочитать документацию по Java на случайном. http://docs.oracle.com/javase/7/docs/api/java/util/Random.html

Некоторые важные биты:

If two instances of Random are created with the same seed, and the same sequence of method calls is made for each, they will generate and return identical sequences of numbers.

public Random() 
Creates a new random number generator. This constructor sets the seed of the random number generator to a value very likely to be distinct from any other invocation of this constructor. 
0

случайная функция Java заключается в следующем:

numberi+1 = (a * numberi + c) mod m 

Число семя твое.

Случайное на самом деле не случайное число, если я знаю ваш текущий номер, тогда я могу узнать все цифры, которые вы получите в будущем. (поэтому вы всегда должны использовать статический случайный случай и никогда не создавать новый случайный случай (вы получите тот же самый номер))

Если вам нужен более безопасный случайный случай, используйте класс безопасности SecureRandom.

Он предоставляет вам более безопасный случайный случай, который использует такие вещи, как количество движений мыши, текущее местоположение мыши, количество секунд с момента последнего ввода и т. Д. ...