我已经设法在物品上实施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甚至数千呢?
您对更好的实施有什么想法?