我想知道是否有人知道一种简单的算法来执行列表的洗牌,该算法允许权重偏差,以便列表中的每个项目同时朝着列表的顶部工作。
我正在一个网站上使用分页目录中的企业列表,并且列表需要公平显示,因此一个企业不能总是高于/低于另一个列表。目录的纯粹洗牌是不够的,因为它的随机性可能会导致任何给定的企业在很长一段时间内随机洗牌到列表中的相似位置,所以我想提供一些权重,以便每个列表被慢慢地推到列表中,以便随着时间的推移,它们有相当平等的机会显示在目录的第一页上。
编辑:
在凯文的感谢下 - 我正在尝试将这些规则正式化:
1)对于 n 个列表,每个列表必须在 n 个“准随机播放”中显示在位置一)
2)(模糊)列表的平均(?)位置应该随着时间的推移而增加,直到它到达位置 1
3) 对于任意两个业务(A 和 B),在 n 次洗牌迭代中,A 不能超过 B 超过 50% 的时间?
我还应该补充一点,我为一家拥有极其复杂和令人费解的“洗牌器”的企业工作,这对于安抚大量付费客户而言是必要的,这些客户坚持在我们目录中的各个业务类别中公平分配。客户的投诉是一个“真正的”问题,因为用户通常从前几个分页页面中选择项目,按字母顺序(默认情况下)对客户进行排序是不公平的,并且鉴于用户从上到下阅读,这不是公平的是,一项业务始终高于另一项业务。
我很想知道是否有人对他们以前可能已经实施过的这个问题有一个整洁的解决方案。
编辑:
我有一个想法,考虑到这些项目存储在数据库中,我可以有一个列,它是每个列表位置随时间推移的总和,当一个项目到达第一个位置时,我可以使用它来排序(降序)然后我可以将列表设置为 0,这意味着列表中的每个项目最终都会排在列表的顶部。问题是,对于大量列表,随着时间的推移,这个数字可能会变得相当大......
编辑:
我不想猛击数据库,我需要在用户浏览时保持一致性,因此我只会每晚(每天一次)执行“伪随机播放”,而不是在目录的每次显示上