LeetCode 周赛评分算法的原理,一起来讨论下🤝
8620
2023.01.07
2023.01.07
发布于 未知归属地

如题,一起来讨论一下 LeetCode 的周赛评分算法的原理。

  1. 参考文档
  2. 我的理解
  3. 我的困惑

参考文档

  1. leetcode 官方帮助之竞赛成绩与排名
  2. 🏆 力扣竞赛 - 勋章及成就规则
  3. 📣 全新「周赛评分算法」即将上线,现邀扣友们前来出谋划策!
  4. 📣 通知:全新「周赛评分算法」最终方案
  5. 「等级分ELO」维基百科词条
  6. ELO算法的原理及应用
  7. ELO积分算法

我的理解

我看了一下官方解释,详见这里这里

按照我的理解,大体上是按照下面的流程来计算某个参赛者 i 的竞赛积分的:

  1. 根据所有人参赛前的分数,算出某个参赛者 i 的期望名次。这个计算过程是魔改自 ELO 算法。
  2. 求出 i 的期望名次和比赛结束后 i 的实际名次的几何平均数
  3. 根据 ,使用二分查找计算出用户在这场比赛后的期望分数
  4. 求出比赛后的期望分数和比赛前的分数的差值,并乘以一个系数,得到 值。这个系数初始值是 0.5,随着参加比赛的次数的增加,该系数逐渐收敛到 0.2222……。
  5. 将比赛前的分数加上 值,得到比赛后实际分数。

我的困惑

但是我有一些细节没理解:

  1. 某场竞赛中的实际名次,是怎么计算的?按照官方的说法

    力扣竞赛真的可谓分秒必争,您的竞赛目标是在最短的时间内解出这些题目,并且保证最少的出错率。因为,每次的错误提交都会伴随着一定的加时惩罚。

    那么,某场比赛的名次取决于两个维度:答对的题目数和答题的耗时,这两个维度具体是怎么加权得到某一场的实际名次的?

  2. 计算期望名次的时候,下面这个公式为什么要加 1 ?

    image.png

  3. 被魔改后的 ELO 算法,是否还保有原版的性质?比如:战胜水平远低于自己的对手,涨分很少;逆风翻盘战胜强劲对手,涨分较快;输给水平远低于自己的对手,掉分较大。

    如果是,怎么证明这一点?

  4. 求期望名次和实际名次的几何平均数,原理是什么?这一步看起来很关键,但是百思不得其解。

  5. 值的时候,系数随着场次增多逐渐收敛。我的理解是,如果一个参赛者水平保持不变,那么越到后面,涨分越慢;即便在后期水平提高了,但是因为排名已经比较靠前,战胜的对手大多比较弱,涨分的幅度也会变慢。我的理解对吗?

不知道官方君@LeetCode在不在?可以科普一下这个算法背后的原理🤝。

也欢迎大家理性讨论。我确实是竞赛小白,目前只参加了两场,分数很低,我在社区也一直是认真提问和分享心得,如果打算嘲讽和喷我,还请口下留德。

评论 (36)