Использование Memento в генераторе псевдослучайных чисел

Я хотел бы спросить, как именно используется сувенир в генераторе псевдослучайных чисел? У меня есть высокий уровень знаний о генераторе псевдослучайных чисел, но я не вижу там никакого сувенира (даже я читал, что он там). Большое спасибо за ваш ответ:)

1 ответ

Решение

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

  • оригинатор - генератор случайных чисел,
  • смотритель - это вызывающий абонент, который получает числа с помощью генератора случайных чисел,
  • memento - это генератор случайных чисел, на основе которого создается следующее случайное значение

Стандартный rand() в C++ не поддерживает получение его состояния, поэтому единственная операция восстановления - просто сохранить начальное значение, которое вы устанавливаете, с помощью srand() в начале, а затем использовать его для восстановления генератора до исходного состояния.

Тем не менее, вы можете переопределить его, чтобы он поддерживал запросы состояния и затем последующее восстановление в любое, а не только начальное состояние. Чтобы узнать, как этого добиться, смотрите этот SO ответ. Также в том же потоке упоминается, что новые генераторы случайных чисел в C++11 по умолчанию предлагают эту функцию.

Другие вопросы по тегам