Чи може генератор випадкових чисел коли-небудь давати різний вихід із даними однакових насіння?


10

Назва підсумовує це. Мені цікаво знати, чи існує алгоритм, здатний виробляти змінний вихід з однаковим входом, не покладаючись на інші джерела для випадкових випадків, таких як DateTime.Now або число, що генерується від датчика світла тощо. Крім того, алгоритм не може бути запущений послідовно, лише два чіткі, неспоріднені прогони, які дають різний вихід.


Те, про що ви говорите, це генератор псевдовипадкових чисел, щоб бути конкретним.
Марсель

Більшість мов дозволяють створювати генератор випадкових чисел без необхідності вказувати насіння, щоб насіння також було "випадковим". Є причина, чому використовують насіння.
Ніл

1
@Neil: у тих випадках все ще є насіння, це просто неявне, як правило, системний час.
Майкл Боргвардт

@MichaelBorgwardt, я просто сказав, що насіння також буде випадковим. Звичайно, нічого не є справді випадковим, але зазвичай системний час забезпечує гідне насіння, доки ви не часто інстанціюєте генератор випадкових чисел, не передаючи насіння, і в цьому випадку ви можете отримати одне і те ж «випадкове» насіння двічі.
Ніл

Є цікава область дослідження неточної апаратури, яка має статистично чітко визначену неточність. Потенційна вигода - це менше споживання електроенергії. Просто обчислення 2.0 + 2.0такої системи не дало б однакових результатів. Він не потребує іншого джерела випадковості.
MSalters

Відповіді:


15

Мені цікаво знати, чи існує алгоритм, здатний виробляти змінний вихід з однаковим входом, не покладаючись на інші джерела для випадкових випадків, таких як DateTime.Now або число, що генерується від датчика світла тощо.

Ні, це принципово неможливо, тому що саме визначення алгоритму полягає в тому, що він є чітко визначеним і детермінованим, тобто, якщо давати один і той же вхід, завжди буде видаватися однаковий результат. Існують рандомізовані алгоритми, але вони вимагають випадковості в якості введення.

Крім того, детермінізм найбільш важлива мета дизайну комп'ютерного обладнання. Центральний процесор, який не виробляє однаковий вихід з одним і тим же входом, був би абсолютно марним для більшості цілей.


14

Ні, алгоритм генерації псевдовипадкових чисел завжди буде виробляти той же результат дав ті ж насіння (звідси псевдо -Випадкові).

Мені цікаво, що ви використовували термін "алгоритм", а не "програма". Це виключає певний клас відповідей "так" (м'які помилки в оперативній пам'яті, різні переплетення потоків у багатопотоковій RNG тощо). Якщо ви вважаєте, що кожен запуск вашого алгоритму приймає один і той же вхід для кожної ітерації, яка точно вказана без випадковості, то вона буде генерувати однаковий вихід на кожному запуску.

Незважаючи на це, навіть базові речі, такі як температура процесора, є непередбачуваними, щоб діяти як джерело ентропії, якщо вони нормалізуються належним чином. Отже, не думайте, що це означає, що генератор випадкових чисел "криптографічно захищений" можна передбачити, якщо знати, в який час він був запущений; багато з них використовують системний канал ентропії.


Алгоритм був правильним словом :) Я спеціально намагаюся усунути зовнішні джерела ентропії, помилки пам'яті, порядок потоку, непередбачуваний вхід, наприклад джерело світла тощо. Я думаю, що моє запитання випливає з мого нерозуміння випадкових алгоритмів і, можливо, Я міг би зробити питання більш загальним. Мені справді цікаво, чи можна створити будь-яку функцію, яка б повертала різні результати за однакового вводу (включаючи всі джерела ентропії). Здається, відповідь ні
ConditionRacer

7

Чи знаєте ви, що люди дуже наполегливо працюють над тим, щоб, даючи одне і те ж насіння, щоразу утворюється однакова послідовність випадкових чисел? Це бажана властивість для таких речей, як моделювання в Монте-Карло, оскільки це означає, що результати можна повністю відтворити. Якщо ви не вказали насіння, буде використано щось на кшталт часу, але точної відтворюваності дуже хочеться.

Єдині RNG, де це справді небажано, - це ті, які використовуються для криптографії, і вони, як правило, досягають цього, використовуючи власне джерело випадкових чисел операційної системи (яке не підлягає перезавантаженню за звичайних обставин і яке може використовувати фантазійне обладнання), щоб забезпечити їх насіння.


Так, я розумію, що ти кажеш. Я не намагаюся реалізувати нічого нового, це була просто цікавість пізньої ночі.
ConditionRacer

1

Я гадаю, що якщо ви реалізували алгоритм на різних апаратних платформах і використовували такі методи, як взяття середніх N бітів з цілого числа, ви могли б отримати різні відповіді, якби кодування цілого числа було іншим (big / little / mid-endian). Ви також можете зіткнутися з проблемами, запущеними на машинах з FPU, порівняно з тими, які не виникають, якщо ви маніпулюєте числами з плаваючою комою. Можливо, це не проблема на машинах настільного класу, але це може бути проблемою на телефонах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.