假设我有一个应用程序,它从项目池中向用户呈现两个随机结果。用户选择一个作为“赢家”,结果将被记录如下:
INSERT INTO results (winner_id, loser_id) VALUES (26, 45);
Run Code Online (Sandbox Code Playgroud)
使用结果表对项目进行排名的最佳方法是什么?
这个问题有一个理论/主观成分,也就是说,考虑对它们进行排名的方法不止一种。
例如,这与棒球赛季没有太大区别。棒球只是通过比较获胜百分比来选择获胜者。但是在棒球比赛中,您可能会以比底特律更好的胜率击败克利夫兰,但底特律今年每次比赛都击败了克利夫兰。所以从胜率之外的另一个角度来看,你可以说底特律比克利夫兰更好。
这是我感兴趣的另一个观点。如果你从两个项目(A 和 B)开始,从结果表中知道 B 击败 A 30 次,输了 5 次,你知道 B 应该排在 A 之上。然后你看看 C,对 B 是 8-10,对 A 是 12-6,把它放在 B 和 A 之间。等等。
似乎我在描述一个相当简单的公式,但是当您开始扩展它时,对于大量项目来说,它的计算量似乎会变得非常繁重,而对于不属于两个项目之间的项目来说,这将是有问题的根据到目前为止的排名,预计它会介于两者之间。
你认为这样的排名系统可行吗?这个概念已经有了名字吗?是否有可能建立一个查询系统,以便在 Web 应用程序中合理地为 10,000 个项目实时提供结果?
这总是会出现 A 击败 B、B 击败 C、C 击败 A 的问题。在这种情况下,我不知道有任何确定性的方法来定义谁排名最高。石头、剪刀、布等类似游戏因此而存在。
对于任何真正的运动,您都可能会遇到某种形式的循环依赖,尤其是在观看少量游戏时。可能有一些算法可以解决这个问题,但我不知道。
假设有一些算法可以做你想做的事情,稍微改变你的数据模型会让它更容易做到:
结果(team_a_id、team_b_id、team_a_wins、team_b_wins、平局);
这将减少您必须检查的记录数量,因为每对球队只有一个条目,而不是每对球队的每场比赛都有一个条目。
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |