我已经设法在项目上实施 Elo 的评级系统。我正在比较的内容并不重要,但是例如,假设我们试图通过用户输入找出主观上最好的数字是(1|2|3|4|5,但这可以是任何范围/集合) .
最常用的做法是选择集合中的两个随机元素并让用户选择其中一个。请注意,这并不能正确地将所有内容与所有内容进行比较;您可能会得到重复的比较,并且某些组合可能永远不会被比较。
我的想法是使用正在比较的内容之间的所有唯一组合填充组合表(行数:{count Array elements}选择2 /示例:5 nCr 2)。A 和 b 是包含 elo 评级系统数据的分数表的外键。
如果元素消失,则可以清理表,当添加新元素时,会将一组新排列添加到表中。
id a b
1 1 2
2 1 3
3 1 4
4 1 5
5 2 3
然后将向用户显示从组合表中随机选择的组合:( [...] WHERE NOT id IN (ids of combinations this user has already set a vote for
))。如果什么都没有,将显示一条消息“所有内容都已与所有内容进行比较,在 {cron_time} 之后返回!”。
用户无需注册即可进行比较。即插即用。这是最先出现的问题之一。如何识别唯一用户?会话可以工作,但用户可以轻松地更新它们。想法?
这种实现的规模非常可怕。对于每个新用户(processed_combinations,即使每天被截断,也会变得很大)和组合表。当然,将 1 到 5 与少数用户进行比较可以正常工作,但如果我们想比较 1 到 100 甚至千位怎么办?
您对更好的实施有何想法?