Исходя из того, как вы сформулировали вопрос, это невозможно сделать.
Вы, по сути, спрашиваете, как обеспечить, чтобы одиночный бросок монет (то есть один случайный исход) составлял ровно 50% голов и 50% хвостов, что невозможно.
Даже если бы вы использовали два случайных числа, где вас ожидают одна голова и один хвост; этот тест потерпит неудачу в 50% всех случаев (потому что вы можете получить две головы или два хвоста).
Вероятность основана на законе больших чисел . Это прямо указывает на то, что небольшая выборка не может точно отражать ожидаемый результат.
LLN важен, потому что он гарантирует стабильные долгосрочные результаты для средних значений некоторых случайных событий. Например, в то время как казино может потерять деньги за одно вращение колеса рулетки, его прибыль будет стремиться к предсказуемому проценту за большое количество вращений. Любая победная серия игрока будет в конечном итоге преодолена параметрами игры. Важно помнить, что закон применяется (как видно из названия), когда рассматривается большое количество наблюдений. Нет принципа, что небольшое количество наблюдений совпадет с ожидаемым значением или что полоса одного значения будет немедленно "сбалансирована" другими (см. Ошибку игрока).
Когда я спросил это как комментарий; Вы ответили:
@ Flater Нет, я делаю N фактических розыгрышей, но с одним случайным числом.
Но это не имеет смысла. Если вы используете только одно случайное значение и продолжаете использовать одно и то же значение, то каждый розыгрыш, очевидно, будет давать вам точно такой же результат (это же число).
Самое близкое, на что я могу истолковать ваш вопрос так, как это невозможно, было бы то, что вы ошибочно ссылались на одно случайное семя как на одно случайное число.
Случайное начальное число (или начальное состояние, или просто начальное число) - это число (или вектор), используемое для инициализации генератора псевдослучайных чисел.
Чтобы начальное число использовалось в генераторе псевдослучайных чисел, оно не должно быть случайным. Из-за природы алгоритмов генерации чисел, если исходное начальное число игнорируется, остальные значения, которые генерирует алгоритм, будут следовать распределению вероятности псевдослучайным образом.
Однако ваши явно упомянутые ожидания, похоже, опровергают это предположение. Вы хотите сделать что-то вроде:
GetSuccesses( n, P, Random.NextDouble())
и вы также ожидаете получить операцию O(1)
, что противоречит закону больших чисел.
Если вы на самом деле говорите об одном случайном семени; тогда ваши ожидания не верны.
- Если вы сделаете N розыгрышей, операция все равно будет иметь сложность
O(N)
. Независимо от того, рандомизированы ли вы после каждого розыгрыша или нет, это не имеет значения, всегда O(N)
.
GetSuccesses( n, P, Random.NextDouble())
даст вам одну ничью , а не одно семя . Независимо от используемой терминологии ваше ожидание кода не связано с использованием одного и того же начального числа для нескольких розыгрышей.
Поскольку вопрос в настоящее время сформулирован; то, что вы хотите, невозможно. Повторные комментарии для пояснения нескольких комментаторов еще не дали более четкой картины.
Как свидетельство, я нахожу очень странным, что вы отвечали на каждый комментарий , за исключением , когда прямо спрашивают, говорите ли вы о семени вместо числа (теперь дважды).