|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.04.2011, 14:01 | #1 |
Новичок
Джуниор
Регистрация: 09.04.2011
Сообщений: 1
|
Random с неоднородной вероятностью выпадения событий
Доброго времени суток всем.
Пишу программу для тренировки быстрого подсчета шансов в покере. Для этого мне нужен генератор случайных чисел, но... "случайные числа" от 6 до 13 должны выпадать чаще, чем 14..17 и 3..6 и уж тем более чаще, чем 17..22 и 1..2. Как это можно реализовать? |
09.04.2011, 17:12 | #2 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
А внутри каждого из этих интервалов ([6,13],[14,17],[3,5],[1,2],[18,22])? Вероятность одинаковая? Я в покер не играю, потому и спрашиваю.
|
09.04.2011, 21:54 | #3 |
C++
Форумчанин
Регистрация: 27.03.2011
Сообщений: 803
|
Просто это делается, на самом деле.
Код:
Код:
Ищете информацию по C++?
cplusplus.com |
09.04.2011, 23:33 | #4 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
После того как 30 с лишним лет назад Форсайт, Малькольм и Моулер выставили на посмешище авторов культовой, как сейчас бы сказали, IBM-овской RANDU(), я очень осторожно отношусь к слову "просто" в применении к датчикам случайных чисел Я, для повышения эрудиции, хотел бы понять сначала - откуда в условии взялось "22"?..
|
09.04.2011, 23:52 | #5 |
:D
Форумчанин
Регистрация: 26.09.2010
Сообщений: 570
|
ну, смотрите, rand%2 вернет либо 1, либо 0, следовательно, следующий ранд так же вернет либо 1, либо 0, перемножаем вероятности - получаем 25%, или 1/2 * 1/2 = 1/4 = 0.25
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery |
10.04.2011, 00:13 | #6 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
kaljan775, если это Ваше объяснение - для меня, то спасибо, конечно! То, что вероятность выпадения двух "орлов" после двух подбрасываний монеты равна 1/4, я знаю Но только датчик случайных чисел возвращает не вероятность! На его выходе обычно - [псевдо]случайная величина, лучше или хуже подчиняющаяся тому или иному закону распределения. Так я хотел бы понять для начала, какой закон распределения нужен ТС (который куда-то исчез, кстати)?
|
10.04.2011, 00:40 | #7 |
C++
Форумчанин
Регистрация: 27.03.2011
Сообщений: 803
|
Vago, просто я рассматриваю в данном случае функцию rand() как самую эффективную в получении случайных чисел (пренебрегая тем, что они - псевдослучайные). Если автору понадобится заменить ее на другую - так никто ж не против.
Ищете информацию по C++?
cplusplus.com |
10.04.2011, 01:05 | #8 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
Сtrl, та я ж не против использования где-то внутри Вашей ф-ии "кирпичика" под названием rand() Не знаю, насколько она "самая эффективная" - не мерял. Самая доступная - это да Но! rand() имитирует равномерное распределение. Я, прежде чем начинать думать, как делать, обычно стараюсь понять - что нужно сделать? А тут я пока не понимаю! Ладно, ТС нет, давайте пофантазируем без него. Предположим, мы решили написать датчик, генерирующий натуральные числа из интервала [1,22], распределённые по нормальному закону, со средним равным 11. Ну куда Вы, к вот этому моему двустрочному "ТЗ", я извиняюсь, прицепите свой код из #3 ?
|
10.04.2011, 01:14 | #9 | |
C++
Форумчанин
Регистрация: 27.03.2011
Сообщений: 803
|
Vago, я показал то, каким образом можно выполнить определенный код с заданной вероятностью. Если у используемой функции получения случайных чисел распределение действительно равномерное, то код очень легко использовать.
Давайте посмотрим в задание автора: Цитата:
С 50% вероятностью мы будем использовать тот же rand() уже в диапазоне [6;13] для получения числа, с 25% вероятностью в диапазонах [14;17] и [3;6], а в остальных случаях в диапазонах [1;2] и [17;22]. Ищете информацию по C++?
cplusplus.com Последний раз редактировалось Сtrl; 10.04.2011 в 01:17. Причина: Диапазоны подправил. |
|
10.04.2011, 01:49 | #10 |
Пользователь
Регистрация: 09.04.2011
Сообщений: 30
|
Я вижу это приблизительно так:
1. Изначально нужно знать приблизительное соотношении выпадания интервалов (указывает пользователь); 2. Генерируем значения, заносим в связанных список - перемешиваем его случайным образом - и вот уже будет нечто похожее на какой-нибудь расклад. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вероятность выпадения в процентах | ololo-schoolboy | Общие вопросы C/C++ | 6 | 25.01.2011 20:54 |
вывод рандомного числа с большей или меньшей вероятностью | unbanned | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 19.01.2011 07:04 |
Алгоритмы. Работа с вероятностью. | anton_kovalev | Помощь студентам | 2 | 21.01.2010 10:27 |
Подпрограмма определяющая вероятность выпадения счастливого билетика. | Doublefaced | Помощь студентам | 9 | 05.08.2009 15:00 |
Делфи(Консоль) и C# - Подпрограммы(Вероятность выпадения «счастливого билетика» ) | Doublefaced | Помощь студентам | 3 | 30.06.2009 22:15 |