Использование C # System.Random для вероятностного алгоритма - PullRequest
0 голосов
/ 15 ноября 2011

Позвольте мне предвосхитить этот вопрос, заявив, что я не являюсь разработчиком C #. Я разработчик C по профессии и выбору. Но я должен использовать Visual C # для класса, который я беру.

Я читал о различиях между криптографически безопасными генераторами псевдослучайных чисел и System.Random. Все, кажется, довольно ясно, что RNGCryptoServiceProvider гораздо сильнее случайным, но и медленнее.

Для нашего алгоритма в групповом проекте мы будем использовать 3 случайных узла из заданного (фиксированного) списка столько раз, сколько мы сможем за 25 секунд, чтобы оценить ребра на путях между ними.

Чтобы наш алгоритм был «завершен», мы должны быть уверены, что каждый узел будет выбран так же близко, как и каждый другой узел. Чтобы наш алгоритм был «оптимальным» (или настолько близким, насколько это возможно, поскольку с аппроксимацией у нас все в порядке), нам нужно выполнить проход оценки как можно больше раз в течение этого 25-секундного (или любого другого произвольного) срока. 1007 *

Учитывая, что мы будем использовать один экземпляр Random, но мы будем запускать цикл, который будет вызывать Random.Next () 3 раза подряд и который будет повторяться столько раз, сколько возможно, Случайные производят достаточно равномерное распределение? Или нам нужно будет понести дополнительные расходы на RNGCryptoServiceProvider, чтобы убедиться, что у нас нет узлов, которые полностью пропускаются?

1 Ответ

1 голос
/ 15 ноября 2011

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

...