Зачатки TDS - распределение по % - Форум успешных вебмастеров - GoFuckBiz.com - Страница 2
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB88.4375
BTC/USD68098.4442
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 26.12.2009, 21:25
Start Post: Зачатки TDS - распределение по % 
  #11
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,870
Бабло: $1717315
Отправить сообщение для Hector с помощью Jabber
По умолчанию

Как правильно это делать в % соотношении? Хелп!
Hector вне форума  
Старый 26.12.2009, 22:38   #12
Dux
Senior Member
 
Аватар для Dux
 
Регистрация: 29.09.2009
Сообщений: 406
Бабло: $93280
По умолчанию

Цитата:
Сообщение от kanscx Посмотреть сообщение
Ага а 23 и 77 ты как поделишь таким образом?
да уж, проблема
1 ему, (77/23)*тому
Dux вне форума  
Старый 26.12.2009, 22:52   #13
Nou
Senior Member
 
Регистрация: 11.07.2007
Сообщений: 2,073
Бабло: $134959
По умолчанию

если rand(1,100) < 77 - ему
иначе - тому
Nou вне форума  
Старый 26.12.2009, 22:54   #14
Drunk Monk
Je suis moine ivre
 
Аватар для Drunk Monk
 
Регистрация: 03.03.2009
Сообщений: 15,243
Бабло: $797172957
По умолчанию

Nou, случайные числа на то и случайные, что часто неравномерны.
Drunk Monk вне форума  
Старый 26.12.2009, 23:33   #15
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,870
Бабло: $1717315
ТС -->
Отправить сообщение для Hector с помощью Jabber
автор темы ТС По умолчанию

1 url = 10%
2 url = 20%
3 url = 30%
4 url = 40%

1 url = 20%
2 url = 25%
3 url = 25%
4 url = 30%
Hector вне форума  
Старый 26.12.2009, 23:40   #16
Drunk Monk
Je suis moine ivre
 
Аватар для Drunk Monk
 
Регистрация: 03.03.2009
Сообщений: 15,243
Бабло: $797172957
По умолчанию

Hector, ну самый простой вариант - находим наибольший общий делитель у коэффициентов весов, делим и показываем полученное количество раз подряд.

Например, твой первый случай - наибольшее общее кратное 10 =>
1 url = 1 раз
2 url = 2 раза
3 url = 3 раза
4 url = 4 раза
повторить

Для второго случая это 5 =>
1 url = 4 раза
2 url = 5 раза
3 url = 5 раза
4 url = 6 раза
повторить

Разумеется, максимальной равномерности можно добиться, распределяя урлы как можно более разреженно, но это надо писать скрипт или гуглить, что впадло. Как вариант - глянь исходники OpenX или лучше какую-нить банерокрутилку попроще, главное, чтобы можно было веса расставлять и показы генерились не с помощью рандома

P.S. Ну и на нескольких k максимальная разреженность, думаю, не критична, достаточно метода с наибольшим общим делителем.
Drunk Monk вне форума  
Старый 27.12.2009, 00:06   #17
kavopero
Senior Member
 
Аватар для kavopero
 
Регистрация: 27.10.2008
Сообщений: 758
Бабло: $94811
Отправить сообщение для kavopero с помощью ICQ
По умолчанию

Цитата:
Сообщение от Drunk Monk Посмотреть сообщение
Hector, ну самый простой вариант - находим наибольший общий делитель у коэффициентов весов, делим и показываем полученное количество раз подряд.

Например, твой первый случай - наибольшее общее кратное 10 =>
1 url = 1 раз
2 url = 2 раза
3 url = 3 раза
4 url = 4 раза
повторить

Для второго случая это 5 =>
1 url = 4 раза
2 url = 5 раза
3 url = 5 раза
4 url = 6 раза
повторить

Разумеется, максимальной равномерности можно добиться, распределяя урлы как можно более разреженно, но это надо писать скрипт или гуглить, что впадло. Как вариант - глянь исходники OpenX или лучше какую-нить банерокрутилку попроще, главное, чтобы можно было веса расставлять и показы генерились не с помощью рандома

P.S. Ну и на нескольких k максимальная разреженность, думаю, не критична, достаточно метода с наибольшим общим делителем.
Причем здесь общий делитель? 57 на 43 общий делитель какой? Надо от общей суммы всех долей отталкиваться
kavopero вне форума  
Старый 27.12.2009, 00:10   #18
dveredel
Читатель
 
Аватар для dveredel
 
Регистрация: 23.11.2007
Сообщений: 420
Бабло: $48745
По умолчанию

Для получения случайного элемента массива с учетом весового распределения использую данную функцию:
PHP код:

// $arr -  массив с данными
//  $weights - массив "весов" к данным

function weight_rand($arr$weights)
{
    if(!
is_array($arr) || count($arr) < 1) return false;
    
$sum 0$result null;
    do{
        foreach(
$arr as $i => $data) {
           
$sum += $weights[$i]; 
           if (
rand(0$sum) < $weights[$i]) {
              
$result $data;
           }
        }
    } while(
is_null($result));
    return 
$result;

Следует учитывать что процентное распределение - частный случай весового, т.е. просто когда сумма всех весов равна 100.
dveredel вне форума  
Старый 27.12.2009, 00:12   #19
Drunk Monk
Je suis moine ivre
 
Аватар для Drunk Monk
 
Регистрация: 03.03.2009
Сообщений: 15,243
Бабло: $797172957
По умолчанию

дел
Drunk Monk вне форума  
Старый 27.12.2009, 00:23   #20
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,870
Бабло: $1717315
ТС -->
Отправить сообщение для Hector с помощью Jabber
автор темы ТС По умолчанию

dveredel, вот это наверное то что нужно, завтра только получится потестировать... спасибо!
Hector вне форума  
Старый 27.12.2009, 00:46   #21
JackSoft
Бабло победит зло
 
Аватар для JackSoft
 
Регистрация: 20.06.2008
Сообщений: 2,579
Бабло: $346045
По умолчанию

Цитата:
Сообщение от kanscx Посмотреть сообщение
Ага а 23 и 77 ты как поделишь таким образом?
Легко
PHP код:
<?php
$t1 
"1 тому";
$t2 "1 этому";

$t1percent 77;
$t2percent 23;

for(
$i=0$i<100$i++)
{
 if(
$t1percent 0)
  {
   echo 
$t1." ";
   
$t1percent--;
   continue;
  }

 if(
$t2percent 0)
  {
   echo 
$t2." ";
   
$t2percent--;
  }
}

?>
Результат:
PHP код:
1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 тому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 1 этому 
__________________
"Одно Касание/Touch File" - безопасный обмен файлами "TFUtils" - набор утилит TouchFile "TF Screenshots" - заменим Gyazo безопасным аналогом
JackSoft вне форума  
Закрытая тема