Мне интересно, знает ли кто-нибудь простой алгоритм для выполнения перетасовки списка, который допускает смещение веса, чтобы каждый элемент в списке одновременно продвигался к вершине списка.
Я работаю над сайтом со списками компаний в каталогах с разбивкой на страницы, и списки должны отображаться справедливо, поэтому один бизнес не всегда может быть выше / ниже другого списка. Чистой перетасовки каталогов на самом деле недостаточно, так как случайный характер этого может привести к тому, что любой конкретный бизнес будет случайным образом перемещаться в одно и то же место в списке в течение длительного периода времени, поэтому я хотел бы обеспечить некоторые веса, чтобы каждый список постепенно продвигается вверх по списку, так что они получают достаточно равные возможности для отображения на первой странице каталога с течением времени.
РЕДАКТИРОВАТЬ:
С благодарностью от Кевина - я пытаюсь формализовать эти правила:
1) для n списков каждый список должен отображаться на позиции один один раз в n «квазиперетасовках»)
2) (нечетко) средняя (?) позиция листинга должна увеличиваться со временем, пока не достигнет позиции 1.
3) для любых двух бизнесов (А и В) за n итераций перетасовки А не должно быть выше В более чем в 50% случаев?
Я также должен добавить, что я работаю в компании, которая имеет чрезвычайно сложный и запутанный «Shuffler», который необходим, чтобы успокоить большое количество платящих клиентов, которые настаивают на том, чтобы их справедливо распределили по соответствующим категориям их бизнеса в наших каталогах. Жалобы от клиентов — это «настоящая» проблема, учитывая, что пользователи обычно выбирают элементы с первых двух страниц с разбивкой на страницы, поэтому нечестно упорядочивать клиентов в алфавитном порядке (по умолчанию), а учитывая, что пользователи читают сверху вниз, это не так. справедливо, что одно дело всегда выше другого.
Мне интересно узнать, есть ли у кого-нибудь аккуратное решение этой проблемы, которое они могли реализовать ранее.
РЕДАКТИРОВАТЬ:
У меня была одна мысль, учитывая, что эти элементы хранятся в базе данных, я мог бы иметь столбец, который представляет собой сумму позиций каждого списка с течением времени, которую я мог бы использовать для упорядочения (по убыванию), когда элемент достигает первой позиции в список, я мог бы затем установить его на 0, что означало бы, что каждый элемент в списке в конечном итоге попадет в начало списка. Проблема в том, что для большого количества листингов со временем это число может стать довольно большим...
РЕДАКТИРОВАТЬ:
Я не хочу захлопывать базу данных, и мне нужна согласованность, пока пользователь просматривает, поэтому я буду выполнять «псевдоперетасовку» только каждую ночь (один раз в день), а не при каждом отображении каталогов.
X
перетасовок. 2) Запись должна переместить не менееY
строк заZ
перетасовок. 3) В течениеA
перетасовок каждая запись гарантированно появится среди первыхB
строк (на первой странице). - person Kevin   schedule 17.09.2012