- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как удалить плохие SEO-ссылки и очистить ссылочную массу сайта
Применяем отклонение ссылок
Сервис Rookee
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть таблица городов:
Необходимо выводить на странице 3 любых города из этой таблицы, но с учётом их вероятности. Т.е. при 10 обновлениях страницы мы увидим Москву, Питер и Тольятти чаще других, т.к. их вероятность попасть в случайный список больше, чем у остальных. Почему список случайный? Потому что он каждый раз формируется заново и, например, Москва попадёт в него, грубо говоря, в 8 случаях из 10.
Если кто-нибудь сталкивался с подобным, то подскажите как решить данную задачу.
Какая-то у вас вероятность неправильная. Правильнее будет, если сумма всех вариантов равна 100%.
Допустим так:
Москва | 50%
Питер | 25%
Воронеж | 10%
Новосибирск | 5%
Урюпинск | 5%
Тольятти | 3%
Усть-Кулом | 2%
Таким образом создаём массив из 100 элементов, где 50 элементов имеют индекс Москвы, 25 индекс Питера.... Далее просто выбираем случайное значение из этого массива.
aleksey_php, если уж больше 100% получается то имеет смысл не писать проценты, а просто говорить что это вес.
Делается так - складываете вес, и генерируете рандомное число от 1 до суммы.
Потом смотрите в какой отрезок вошла полученное число, то и выводим.
HraKK добавил 27.05.2009 в 02:10
nikitian, опередили с ответом, пока я писал. Но в моем посте, немного больше про вес. Что и имел ввиду ТС, просто некорректно указав %.
К сожалению, в моём случае речь всё-таки идёт именно о процентах, но проценты в таблице указываются не относительно других городов, а относительно двух состояний для одного города:
1. в списке
2. не в списке
Т.е. для города Москва есть 80% вероятность того, что он попадёт в список и его наличие в этом списке никак не влияет на возможность любого другого города попасть в этот список. Т.е. каждый город "сам за себя".
Пока писал этот пост родилось решение стоящего вопроса:
1) сортируем таблицу по вероятности в убывающем порядке
2) для каждого города в таблице генерируем случайное число от 1 до 100
3) если это число <= полю "вероятность" у данного города, то он попадает в список и удаляется из таблицы (чтобы не попасть в него ещё раз). В противном случае переходим к следующему городу.
Вот что получилось:
nikitian, точно так же можно создать массив из 220 элементов и генерировать число от 0 до 219 :-)
nikitian, точно так же можно создать массив из 220 элементов и генерировать число от 0 до 219 :-)
поддерживаю)
nikitian, точно так же можно создать массив из 220 элементов и генерировать число от 0 до 219 :-)
Пропустил, что выводится не один, а 3 города. В случае одного города вероятность появления каждого города относительно него самого будет 50%: либо он, либо не он :)
К сожалению, в моём случае речь всё-таки идёт именно о процентах, но проценты в таблице указываются не относительно других городов, а относительно двух состояний для одного города:
1. в списке
2. не в списке
Т.е. для города Москва есть 80% вероятность того, что он попадёт в список и его наличие в этом списке никак не влияет на возможность любого другого города попасть в этот список. Т.е. каждый город "сам за себя".
Пока писал этот пост родилось решение стоящего вопроса:
1) сортируем таблицу по вероятности в убывающем порядке
2) для каждого города в таблице генерируем случайное число от 1 до 100
3) если это число <= полю "вероятность" у данного города, то он попадает в список и удаляется из таблицы (чтобы не попасть в него ещё раз). В противном случае переходим к следующему городу.
Вот что получилось:
А вам какое распределение нужно? =) Линейное, нормальное, Гауссово? ☝встроенный рандомайзер в php имеет нормальное распределение, засчет чего значения возле краев отрезка возвращаются гораздо реже чем в серединке, поэтому ваши проценты летят. Если говорить с точки зрения математики, то наиболее верным будет такое решение:
Довольно накладно, зато соответствие ваших долей истине обеспечено. В частности, если опять же математически, линейность распределения обеспечивается с точностью 99,5% для числа выборок не менее log(N)*A, где N это число перемешиваний массива, A - кол-во весовых элементов в нем. Т.е. если вы свои проценты тупо умножите на 10, то получите еще более точную вероятность, но и цена выполнения растет несколько быстрее - O(N*log(N))
Последний блок наверное можно попробовать заменить на
$result=array_slice(array_unique($rand_array),0,3);
При не очень больших весах будет быстрее
проще создать массив с такой же плотностью элементов
москва
москва
москва
питер
питер
минск
потом перемешиваем массив случайным образом, удаляем дубликаты. То что осталось и есть вероятностное распределение.
Я именно это и написал, только перемешивать надо более одного раза, иначе опять сыграет роль нормальность распределения - центральные элементы будут при большом количестве выборок перемещаться реже чем краевые.
Есть таблица городов:
Необходимо выводить на странице 3 любых города из этой таблицы, но с учётом их вероятности. Т.е. при 10 обновлениях страницы мы увидим Москву, Питер и Тольятти чаще других, т.к. их вероятность попасть в случайный список больше, чем у остальных. Почему список случайный? Потому что он каждый раз формируется заново и, например, Москва попадёт в него, грубо говоря, в 8 случаях из 10.
Если кто-нибудь сталкивался с подобным, то подскажите как решить данную задачу.
Могут ли Ваши города в результате повторяться?
То есть результат
Москва
Москва
Москва
приемлем ?
Если не могут, то Ваша задача вывода с учетом вероятностей скорее всего принципиально не разрешима, так как тут уже идут уcловные события.
К примеру Задачу невозможно решить для верятностей
Москва | 99%
Питер | 1%
Воронеж | 1%
Новосибирск | 1%
Урюпинск | 1%
Тольятти | 1%
Так как приходится выбирать три города, и надо выбирать что то кроме Москвы, то по любому придется выбирать те города, вероятность выбора которых всего один процент, ну и в результате получится что остальные города фигурируют гораздо чаще.
У ваших коэффициентов та же самая проблема, просто ее трудней увидеть.