![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Здравствуйте! Встречал ли кто-нибудь алгоритм, который случайно выдает одну из (например пяти) цифр, но при этом его можно настроить? Например, задать ему (этому классу или методу), чтобы число 5 выпадало чаще или реже, а число 2 выпадало реже или чаще и т.д. Может, даже, задавать коэффициент вероятности выпадения того, или иного числа. Или подскажите, пожалуйста, как такое сделать.
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
Обычно ищут случайность, а вы наоборот
![]() В массив загоните числа которые нужны... например Последний раз редактировалось Партизан; 03.06.2012 в 14:44. |
|
|||||
|
Modus ponens
|
Math.random() < 0.5 случается в 50% случаев, Math.random() < 0.1 случается в 10% случаев. По крайней мере должно быть так. Но для криптографии флешевый рандом, например, не подходит, т.как недостаточно информации в одном запросе. Очень часто для криптографии нужно больше 52 битов. Имитировать /dev/urandom можно примерно таким же способом, как устроен и сам urandom - т.е. копированием "шума" не имеющего цикличности - чего-нибудь связанного с действиями пользователя, например, смещение мышки, нажатые клавиши, разницу между системным временем и предполагаемым идеальным временем вызова таймера по которому рандом обновляется, конечно же, такой рандом лучше хранить на машине пользователя, для лучшей последовательности.
Естественно, каждое обращение к рандому должно генерировать его по-новому.
__________________
Hell is the possibility of sanity |
|
|||||
|
Спасибо за ответы.
Партизан, вы показали как выбрать случайное число из некоторого диапазона чисел, но в этом проблема не стоит. wvxvw, ничего не понял, но что-то подсказывает мне, что вы показали как сымитировать случайное число вручную. К сожалению интересует другое: Есть 5 чисел: Берем 10 попыток сгенерировать число. Флешевский рэндом выведет: 2, 4, 0, 3, 0, 1, 1, 2, 4, 3 (цифры взяты из головы). Нужно, чтобы, например, число "2" в среднем выводилось в 2 раза чаще остальных: 1, 2, 4, 2, 3, 4, 2, 0, 1, 2. Возможно ли создать такой, алгоритм, в котором можно задать, чтобы некоторое число выводилось чаще остальных? И если да, то как?
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
например должны выпадать числа от 1 2 и 3 причём 3 должен выпадать в два раза чаще чем 1 и 2
если нужно настраивать вероятности на лету, то принцип точно такой только циклом
__________________
Хороший отдых - половина работы. Последний раз редактировалось artcraft; 03.06.2012 в 14:59. |
|
|||||
|
Цитата:
Хороший способ. Наглядно видно какие числа будут чаще выпадать.artcraft, если придется выбирать среди 10-ти 20-ти чисел - будет много писанины и много вручную производить подсчеты. Тоесть, для каждого числа из 20-ти придется выбирать диапазон и сравнивать... Спасибо всем.
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
"будет много писанины" пф...
trace( pseudoRandom( [['apple', 1], ['lemon', 1], ['cherry', 2]] ) ); // 25% - яблоко, 25% - лимон, 50% - вишня trace( pseudoRandom( [['apple', .1], ['lemon', .1], ['cherry', 1000]] ) ); // почти всегда вишня, но есть минимальный шанс словить яблоко или лимон private function pseudoRandom(data:Array):*{ var sum:Number = 0, n:Number = 0, i:Array, r:Number = Math.random(); for each(i in data) { sum += i[1]; } for each(i in data) { n += i[1] / sum; if (r <= n) return i[0];} return null; } Добавлено через 30 минут методом который предлагает партизан будет трудно организовать шанс 1 : 100000000 или 1 : 0.0697602774 а вот моей функцией запросто
__________________
Хороший отдых - половина работы. Последний раз редактировалось artcraft; 03.06.2012 в 16:21. |
|
|||||
|
Modus ponens
|
[redacted]
Упс, не туда посмотрел, я не сразу понял, как сума считается, сорри.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 03.06.2012 в 16:53. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:46. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|