Алгоритмистика

  • Автор темы Sergey_2003
  • Дата начала

Sergey_2003

Guest
Алгоритмистика

Доброго времени суток All!

Вот какая тема.
Есть локальная банерная система, без приоритетов, к примеру 2 банера:
первый открутился 19 раз,
чуть позже добавился другой и открутил 1 раз,
выровнять процентное соотношение к примеру не сложно, количество показов банера делим на сумму показов всех банеров и умножить на 100, тобишь
(19/20)*100=95% и (1/20)*100=5%
получаеться что второй банер будет показываться до тех пор пока не поровняеться с первым (некузяво) хотелось бы красиво забить массив(100) где id первого будет повторяться 5 раз, а id второго будет повторяться 95 раз перемешать и дергнуть случайный, но как построить данный массив ума не фатает, может кто сталкивался с такого рода инвертными массивами.

Зараннее благодарен.
 

fisher

накатила суть
эээ... для небольших количеств будет работать совсем в тупую так:
есть {n1,n2,n3,..nm} - числовые веса типа {5,95} - если открутить один 5 другой 95 процентов. надо найти наибольший общий делитель d (седьмой класс, наверное), потом забиваешь массив индексами баннеров, по n_i/d раз каждый i-тый баннер, делаешь массиву array_rand и фетчишь.
но если нужна скорость - надо специально "готовить" правильное распределение.
 

MuXa247

Новичок
Автор оригинала: Necromant
SELECT * FROM some_table ORDER by RAND () LIMIT 1
Куда лезешь то?! :mad:
Тема очень нужная...

2 Sergey_2003:
Может попробовать бить показываемые баннеры на какие то временные интервалы и высчитывать для каждого интервала приоритеты баннеров... а дальше уж по формуле высчитывать...
 

Фанат

oncle terrible
Команда форума
Серёжечка, а зачем ты всяким уродам помогаешь?
Может быть, ты сам того - кулхакер?
 

Sergey_2003

Guest
2 fisher а можно по подробнее на конкретном примере
2 Necromant сам подумай что написал
2 MuXa247 бить баннеры временные интервалы не получиться здесь нет нет понятия начало/конец показов, есть только, есть банер/нет банера

-~{}~ 21.09.05 11:57:

2 Фанат плз. по теме
 

Фанат

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

Sergey_2003

Guest
2 Фанат
что значит - "зачем ты всяким уродам помогаешь?"
что значит - "кулхакер?"
зачем вообще влазить в тред если ничем не хочешь/не можешь помочь решить её?
где меня ничего не останавливает?
что мне можно что другим нельзя?
ты меня нескем не путаешь?
 

fisher

накатила суть
>>2 fisher а можно по подробнее на конкретном примере
готовый код? я похож на клоуна? по-моему я сказал достаточно чтоб разобраться :)
 

Sergey_2003

Guest
2 fisher
>>я похож на клоуна?
нет не похож, хотя я тебя в живую то не видел :)
зачем же готовый код, я что похож на ламера
 

MuXa247

Новичок
Автор оригинала: Sergey_2003
2 MuXa247 бить баннеры временные интервалы не получиться здесь нет нет понятия начало/конец показов, есть только, есть банер/нет банера
Я немного не верно выразился...
Бить не баннеры а статистику показов/приоритетов.
Например разбиваем сутки на 24 часа в каждом часе будут показываемые баннеры, их приоритет показов и количество показов с начала часа... Тогда если в середине дня у одного из баннеров изменится приоритет, то количество показов изменится только с текущего часа...
Примерно так... :rolleyes:
 

sal

Новичок
Sergey_2003

Возможно, задаю глупый вопрос, но все же. Правильно ли я понял, что тебе нужно отобразить баннеры с вероятностью показа для первого 0,05 а для второго 0,95?
 

Sergey_2003

Guest
2 sal
примерно да
условие: 2 банера
если 1 открутился 95% то второй 5%
нужно построить массив из 100 элементов где 95% значений массива будут заколнены id-шниками ВТОРОГО банера, а 5% значений массива будут заколнены id-шниками ПЕРВОГО банера
 

Tor

Новичок
for(1<i<95)
$array[]=1

for(1<i<5)
$array[]=2

array_rand

мне бы ваши проблемы
 

Sergey_2003

Guest
for(1<i<95)
$array[]=1

for(1<i<5)
$array[]=2
ну уж если на то пошло, то:
for($i=1;$i<95;$i++) $array[]=2;
for($i=1;$i<5;$i++) $array[]=1;
но допустим добавиться еще один банер
1=90%
2=5%
3=5%
тогда как быть
 

ONK

Пассивист PHPСluba
$id = (rand(0,20) == 10)?1:2;

Это к вопросу принятия решений с приблизительно заданной случайностью.
 
Сверху