Вообщем суть примерно такова,допустим мне нужно выводить скриптом некие сообщения,эти сообщения имеют коэффициент,допустим сообщение 1 60% и сообщение 2 40% Конечное число показов неизвестно,нужно выводить так чтобы примерно в таких процентных соотношениях оставалось. Как такое можно реализовать?
Постараюсь раскрыть суть полнее,сообщения может быть не 2,вообщем это что-то похожее на крутилку баннеров Можно добавлять элементы,их может быть и один и десять,и у каждого можно выставить коеффициент некий,впринципе не обязательно в процентах Суть в том чтобы сообщение с большим коэффициентом показывалось чаще,а с меньшим реже Проблема как раз в том,что заранее не известно ни конечное количество показов,ни количество сообщений думал насчет рандома,но возникает проблема,когда сообщения 2 тут все просто,если значение меньше 60 то первое сообщение,если больше то второе. Но если их допустим 4 и получается 30%,10%,45% и 15% Уже всю голову сломал,как подсчитать
Думается мне что тут следует применить теорию вероятности,но пока хорошие студенты учили ее,я писал на PHP((((
эта тема уже обсуждалась на форуме. одно из решений - использование весов. минимально требуется таблица из 3-х полей (остальные - по усмотрению): айди - уникальный айди чего-то там, объекта, статьи, баннера... вес - в цифровом виде целое число от 1 до 100, или до 1000, или вообще любое, главное - больше 0. сгенерированная позиция - сумма всех весов предыдущих объектов + текущий вес. Пример таблицы: Код (Text): id weight generated 1 10 10 2 40 50 3 90 140 4 15 155 5 200 355 6 10 365 7 25 390 8 50 440 9 20 460 генерируешь число от 1 до максимального сгенерированного значения (в данном случае 460) - для примера пусть сгенерировалось число 312. делаешь запрос SELECT id FROM table_weights WHERE generated < 312 ORDER BY generated DESC LIMIT 1 и получаешь свой баннер, объект, статью или чего-то там ещё. Возможны проблемы с изменением/удалением весов и регенерации третьего поля для всей таблицы, но это уже сам будешь думать как решать. Можно вообще обойтись без третьего поля, но тогда придётся высчитывать эти значения в коде самому, и запрос будет больше. В общем смотри сам, а то совсем готовое решение как бэ не оставит простора для полёта мысли
tommyangelo В упрощенном виде можно сделать так id k result 1 45 45 2 10 55 3 30 85 4 15 100 получаем рандомом число от 0 до 100 и смотрим из какого оно диапазона,допустим мы получили 76, это меньше 85 но не меньше 55,значит зпрос вернет id 3 Таким образом чем больше коэффициент объекта,тем больше диапазон и больше вероятность выпадения
а, вдуплил))) Lex243 спасибо за ключевое слово - Получается у id2 - диапазон всего 10 единиц, а у id1 аж 45. Понятно )))