Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Случайный выбор из массива с % коррекцией 
:(
    Опции темы
chaosty
Дата 2.1.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 2.1.2008

Репутация: нет
Всего: нет



Есть двумерный массив, с идентификатором и % "срабатывания"
Код

$arr[1]="50%"
$arr[2]="20%"
$arr[3]="20%"
$arr[4]="10%"


Задачка каждый раз выбирать "случаный" ид из массива, но увеличивать шанс срабатывания в зависимости от %... 
то есть к примеру из 10 итераций, 5 раз должно повезти $arr[1], возможны небольшие расхождения.
никак не могу представить формулу в голове :( форум посмотрел, но не нашел такого.
PM MAIL   Вверх
JackYF
Дата 2.1.2008, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(chaosty @  2.1.2008,  13:54 Найти цитируемый пост)
5 раз должно повезти $arr[1], возможны небольшие расхождения.
никак не могу представить формулу в голове :(

формула распределения Пуассона, например.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
chaosty
Дата 2.1.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 2.1.2008

Репутация: нет
Всего: нет



Гм, а есть экземпляр на С или php\perl? Я к сожалению не математик)
PM MAIL   Вверх
JackYF
Дата 2.1.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(chaosty @  2.1.2008,  14:13 Найти цитируемый пост)
Гм, а есть экземпляр на С

у меня нет, но можешь посмотреть исходники boost::random, там есть реализация многих распределений случайных чисел, в том числе, ЕМНИП, и этого.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
maxim1000
Дата 2.1.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



предположим у нас есть возможность генерировать псевдослучайное целое число из 0..9 с одинаковой вероятностью для каждого значения
всего у нас 10 возможных значений
разобьём их на 4 группы:
0..4, 5..6, 7..8, 9
тогда вероятности, что число попадёт в один из отрезков такие:
0 - 50%
1 - 20%
2 - 20%
3 - 10%
конечно, здесь не получится смоделировать вероятности типа 25% - тогда нужно будет использовать числа хотя бы из 0..19, ну и т.д.


--------------------
qqq
PM WWW   Вверх
chaosty
Дата 2.1.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 2.1.2008

Репутация: нет
Всего: нет



Допер) на самом деле все проще, просто делаем еще один массив, из 100 элементов, заполняем его Ключами первого массива в соотношении %
тоесть к примеру $arr[0] - $arr[50] будет равнятся 1,  с 50 по 70 будет 2 ну и так далее..
потом просто берем рандом от 0 до 100, и получаем % срабатывания..
PM MAIL   Вверх
Akina
Дата 2.1.2008, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(chaosty @  2.1.2008,  18:30 Найти цитируемый пост)
делаем еще один массив, из 100 элементов

Зачем? делаем просто массив соответствия вероятностей:
Цитата(maxim1000 @  2.1.2008,  17:50 Найти цитируемый пост)
0 - 50%
1 - 20%
2 - 20%
3 - 10%

конвертируется в
0 - from 0 to 0.5
1 - from 0.5 to 0.7
2 - from 0.7 to 0.9
3 - from 0.9 to 1
и смотри, куда попал очередной rnd()


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
chaosty
Дата 2.1.2008, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 2.1.2008

Репутация: нет
Всего: нет



я массив указал просто для вида, он может быть и на 50 записей, проценты могут быть любыми. то есть задается динамически.
PM MAIL   Вверх
Akina
Дата 2.1.2008, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(chaosty @  2.1.2008,  20:11 Найти цитируемый пост)
проценты могут быть любыми. то есть задается динамически. 

а какая разница? и вообще - какого рожна проценты? что, трудно в доли пересчитать? тогда делаешь сумму с накоплением - и ты в шоколаде.

PS. А будешь планировать на целые значения - не забывай о завалах RND по краям, а то ждут тебя сюрпризы


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.