- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Всем привет.
Необходим алгоритм быстрого рандома с учетом весовых коэффициентов.
Имеется болшой набор пар 'ключ' => 'значение', где ключами являются какие-либо объекты ( пусть будут буквы в данном примере), а значениями их весовых коэффициенты
$m=array('a' =>1, 'b'=>0.7, 'c'=>1.1, 'd'=>'4', ..... );
Задача: каждый раз выбирать одну случайную букву, но что бы буквы имеющие бОльшие весовые коэффициенты "выпадали" чаще чем те у которых коэффициенты меньше.
Голова под вечер уже не соображает т.ч прибегаю к Вашей помощи. Есть ли у кого-нибудь мысли по этому поводу?
p.s считать сколько раз уже была выбрана та или иная буква ( вести статистику ) и исходить из этого по некоторым причинам не подходит ... нужен именно алгоритм производящий выборку исключительно по тем данным что имеются.
Вот на скорую руку набросал:
Хз, может велосипед изобрел. Может уже есть какая-то встроенная пхпшная функция, или все это проще делается. Но это решение почти рабочее. Надо только проверить граничные значения...
psylosss, спасибо
я тут уже по другому сделал ... массив правда исходный разбил на 2 отдельных массива .. массив ключей и массив значений ... индексы в обоих массивах естественно соответствуют друг другу, чтобы можно было сопоставить ключ и значение.
<?php
$obj=array('a', 'b', 'c', 'd'); // объекты
$weights=array(15, 25, 10, 50); // отнормированные коэффициенты
$p=0;
$rnd=mt_rand(0,array_sum($weights)-1);
while($rnd>=0)
$rnd-=$weights[$p++];
print $obj[$p-1];
?>
зациклил это дело и прогнал 150000 раз с записью результатов в файл ... посчитал частоту .. посчитал процентное соотношение ... все работает как часы.
А зачем так сложно то???
допустим есть пары:
a - 3
b - 2
c - 1
создаем массив:
[ a , a , a , b , b , c ]
и из него случайную выборку делаем...
остальное доделают теория вероятности и принципы нормального гауссова распределения...
Да, способ предложенный malls действительно лучший в случае с целочисленными коэффициентами и при не большом массиве объектов.
В общем то все коэффициенты можно сделать целочисленными умножив на 10 например ... но если объектов очень много, то создаваемый массив будет просто гигантским.
... но если объектов очень много, то создаваемый массив будет просто гигантским.
Тогда надо математику подключать...
Вот, например (не понял о чем речь, но название красивое):
О плотности распределения супремума случайного блуждания в субэкспоненциальном случае
😂😂😂
А если серьезно, то думаю схематика такая:
Есть веса, например, от 1 до 100...
1 этап
выбираем случайное число, допустим 34.
2 этап
выбираем все значения с весами до 34 включительно.
3 этап
выбираем случайное из данной группы значений.
в результате двойной случайной выборки получим искомый результат, т.к. максимальные веса по определению будут входить во все выборки, и сл-но встречаться в результате пропорционально своему весу, т.е. чаще прочих.
как-то так, поправьте если ошибаюсь.
Если значения и веса в базе, то можно думаю одним запросом оформить искомую выборку.