Я не уверен, как работают rng в настоящее время, но я знаю, что они используют время как семя ... Итак, почему бы просто не использовать разные простые числа каждый раз? Насколько я знаю, простые числа - это единственная реальная случайная вещь, известная нам, так, например, каждый раз, когда программа запрашивает случайное число, вы даете ему n-е правое и увеличиваете n на единицу. Разве это не было бы чисто случайным? Потому что различия между nth и n + 1th!Почему бы не использовать простые числа для генераторов случайных чисел?
ответ
Хорошо, но есть две проблемы с этим подходом к созданию генератора псевдослучайных чисел.
1] Безопасность ГСЧ частично зависит от неспособности злоумышленника узнать, какое именно семя использовалось. В то время как расстояние между одним простым и следующим случайным образом, последовательность простых чисел не является случайной. Другими словами, 3 является простым, и я не могу предсказать, какое следующее правление будет основано на том, что 3 является простым. Но я уже знаю, что 5 является следующим простым (так как известны все числа с малым числом чисел). Исходя из вашего алгоритма, если я определяю, что семена для последних случайных чисел были 3, а затем 5, я могу догадаться, что следующее семя, которое вы будете использовать, будет 7. Таким образом, это не будет работать для низких простых чисел. Список простых чисел от 1 до 10 006 721 хорошо известен и опубликован.
2] Поиск простых чисел является сложным (вычислительно дорого). Хотя он дешевле для низких чисел, он становится очень дорогим для больших простых чисел. Большая часть кода, который использует случайные числа, предполагает, что число будет возвращено системой очень быстро, поэтому оно используется, например, в жестких петлях для игр. Этот алгоритм нарушит эти варианты использования.
Так что это не будет хорошим способом создания генератора случайных чисел.
Я прекрасно понимал, что сложно вычислить большие простые числа, и я знал, что это очень непрактично. Теперь я вижу, что неправильно сформулировал вопрос ... Моя основная идея заключается в том, что с этим вы можете получить истинные случайные числа. Но спасибо за ответ! – corazza
Что бы это сделало, помимо увеличения времени для генерации числа экспоненциально с временем выполнения программы?
Простые числа могут быть случайными .. но с учетом того же числа N i все равно будет генерировать одно и то же n + 1-е правое число, поэтому нет никакой разницы с нашими текущими псевдослучайными алгоритмами, но время простоя, генерирующее n + 1-е число, равно нулю постоянное время работы.
Использование времени в качестве семени - очень удобный способ сделать детерминированный быстрый алгоритм кажущимся случайным. Но это не так и ваш предложенный метод.
Подумайте о времени, когда ваше n и оба работают практически одинаково.
- 1. Поведение сброса для генераторов генераторов случайных чисел
- 2. Генератор генераторов случайных чисел
- 3. Генератор генераторов случайных чисел
- 4. Сколько генераторов случайных чисел я должен использовать?
- 5. Посев Несколько генераторов случайных чисел
- 6. Взять пул генераторов случайных чисел с генератором случайных чисел
- 7. C++ 11 Безопасность потоков генераторов случайных чисел
- 8. Использование пакета генераторов случайных чисел в Python
- 9. Python простые числа генераторов в терминале
- 10. Использование генератора генераторов случайных чисел с OpenMP
- 11. Java Конфигурирование генераторов случайных чисел в многопоточной среде
- 12. Почему бы не использовать генератор псевдослучайных чисел для создания тестовых данных?
- 13. Увеличение числа случайных чисел
- 14. увеличить случайную библиотеку чисел, использовать тот же генератор случайных чисел для различных генераторов случайной величины
- 15. Используйте один или несколько генераторов случайных чисел для генетических алгоритмов?
- 16. Какие семена используются для генераторов случайных чисел на общих языках?
- 17. C++ генерировать хорошее случайное семя для генераторов случайных чисел psudo
- 18. Использование собственных генераторов случайных чисел с Ruby Array # shuffle/sample
- 19. Использование случайных чисел для определения длины списка случайных чисел
- 20. Использование генераторов случайных чисел C++ в чистом виде
- 21. Как сохранить состояние генератора генераторов случайных чисел как const char *?
- 22. Минимальные стандартные генераторы случайных генераторов
- 23. Нет защищенных генераторов случайных чисел, доступных в JDK
- 24. Пролог список генераторов чисел
- 25. C++ 2D-массив и генератор генераторов случайных чисел
- 26. используя привязку против использования указателей с генераторов случайных чисел
- 27. 64 бит Семена для случайных генераторов
- 28. Рисование случайных чисел возвращает только целые числа
- 29. случайные числа пузырьков случайных чисел C++
- 30. SIMPLE генерирование случайных чисел
Хорошая идея. Напишите функцию, которая эффективно возвращает следующее простое число. Кроме того, выясните, как разделить это число, чтобы все приложения не получали одинаковое простое число. (Как это работает сейчас, у них есть большой список «случайных» чисел, и начальная позиция выбирается на основе текущего времени в тиках или миллисекундах.) – Ryan
Нет, это не было бы случайным: на самом деле это было бы быть достаточно предсказуемым. – dasblinkenlight
Генераторы lcm часто используют штрих как их мультипликативный фактор .... –