Как реализовать функциональность «Lucky Draw» в C #? - PullRequest
0 голосов
/ 16 марта 2011

Я работаю на веб-сайте электронной коммерции (в asp.net & c #), на котором я хочу реализовать функцию «счастливого розыгрыша». Поток управления будет таким: - пользователи будут покупать конкретный продукт надень, и мне нужно выбрать пользователя из тех, кто приобрел этот продукт, в качестве победителя розыгрыша на этот день.

Моя первоначальная мысль о реализации счастливого розыгрыша состояла в том, чтобы использовать функции Random, предоставляемые C #.мне пришло в голову множество мыслей, как ..

  1. Насколько это было бы эффективно, если бы я использовал случайные функции только в c #?
  2. Было бы лучше, если бы я реализовалкакие-либо алгоритмы генерации случайных чисел для этой цели?
  3. Есть ли алгоритмы для случайного выбора из группы?

Я открыт для ваших ценных комментариев и предложений.

Спасибо
Алекс

Ответы [ 3 ]

4 голосов
/ 16 марта 2011
  1. C # не имеет случайных функций.Это дает вам доступ к библиотекам .NET.

  2. Не используйте Math.Random.Используйте один из крипто-ГСЧ, предоставляемых .NET BCL.Если вы делаете это один или два раза в день, дополнительная сложность криптостойкого ГСЧ не будет проблемой.

2 голосов
/ 17 марта 2011
  1. Стандартный класс Random должен быть достаточным, просто убедитесь, что вы используете уникальное семя каждый день (скажем, хэш из каждой информации о покупке). Использование времени в качестве начального числа (вызов конструктора Random без параметра) может быть плохим, если ваше приложение всегда запускается в одно и то же время каждый день.
  2. Стандартная библиотека .NET достаточно хороша для статистического процесса. Если вам нужна более сильная версия, используйте стандартную библиотеку RNGCrypto из .NET. Если вы не получаете тысячи покупателей каждый день, я не думаю, что вам действительно нужна криптовалюта. Не реализуйте алгоритм самостоятельно. Есть причина, по которой люди используют стандартизированную случайную библиотеку, потому что она уже проверена на соответствие статистическим требованиям случайности.
  3. Хм ... если вам нужно выбрать нескольких счастливчиков с равной вероятностью, просто поместите их в список, сгенерируйте целое число от 0 до длины списка. Полученное целое число - это первый счастливый клиент, сохраните его где-нибудь, удалите из списка, промойте и повторите для следующего счастливого клиента. Если вам необходимо повысить вероятность в зависимости от количества покупок, сохраните детали покупки вместо покупателя в Списке. Если вам нужен пользовательский вес в соответствии со стоимостью покупки, используйте Пропорция пригодности , в которой вы суммируете всю стоимость покупки за день, а затем присвойте каждому клиенту совокупную стоимость от его покупки. например, если в тот день было совершено 350 долларов, первый покупатель, получивший 75 долларов, получил 75, второй покупатель, получивший 20 долларов, получил 95 (75 + 20), третий покупатель, получивший 10 долларов, получил 105 (95 + 10) и т. д. Затем выберите случайное целое число между 0 и общей продажей, и счастливый победитель - клиент с наименьшим значением, которое все еще выше, чем полученное целое число. Удалите первого победителя из списка (как его общее количество, так и позицию), промойте и повторите для следующего клиента.
0 голосов
/ 17 марта 2011

На мой взгляд, это количество человек, которого вы можете выбрать. Если это всего лишь один, я бы использовал Random () или, как предложил Бен Фойгт.

Если это более сложное счастливое дро, вам может понадобиться помощь в алгоритмах комбинаций и перестановок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...