【问题标题】:Matching people with similar rating?匹配评分相似的人?
【发布时间】:2013-06-17 03:06:13
【问题描述】:

假设您有一组样本大小为 10,000 的人。集合中的每个人都有一个以胜率形式表示的评分分数:0.00 。

目前我的系统随机挑选两个人并将他们匹配在一起。我想通过将胜率高的人与胜率高的人配对来改进配对。

你玩过魔兽世界竞技场吗?通常,如果您在 2000 年组中,您将与在 2000 年组中的团队匹配。如果您在 1500 位,您将与排名相似的人匹配。

实现这种匹配系统最简单的方法是什么?虽然实现并不重要,但即使是伪代码也会有所帮助,但如果您能使用 JavaScript、Backbone 和 Underscore 作为工具带引导我朝着正确的方向前进,我将不胜感激。

【问题讨论】:

  • 为什么你是根据胜率来匹配而不是某种Elo system
  • @AlexQueue Elo 是评级系统,而不是匹配系统。我已经使用过 Elo,但决定将其删除并仅使用赢/输比率。 Elo 评级与赢/输比率密切相关,所以如果我可以简单地将整个评级系统写成:wins / wins + losses,那么保留它就没有什么意义了。更简单。
  • 我的意思是使用 Elo 作为评分系统。一旦建立了良好的配对系统,您是否模拟了人们的赢/输比率?因为一旦你这样做了,赢/输将开始偏离 Elo。比如说我在 70% 的百分位。玩随机分布的人,我会得出 0.7 的赢/输。如果您将我与我的技能水平的人匹配,我的赢/输将下降到 0.5。有了一个好的匹配系统,即使他们的 Elo 等级保持不变,每个人的赢/输都会达到 0.5。

标签: javascript algorithm matching rating-system


【解决方案1】:

将每个人放在一个平衡的二叉树中(如果您将经常添加和删除人员)或排序数组(如果数据集或多或少是静态的),使用他们的获胜百分比作为排序键。要匹配某人,请将他们定位在树或数组中,然后使用随机数生成器将他们与排名在 +/- 10 内的某人进行匹配(例如,如果您使用的是数组并且该人在第 i 个索引中,然后将它们与 i + rand(10) + 1 索引处的人匹配。

我假设某人的获胜百分比只会以很小的增量变化,这意味着更新树或数组通常是一个恒定时间操作,因为您只是交换相邻元素。

【讨论】:

    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多