algorithm - 例如,Reddit 排名的数学算法从何而来?

标签 algorithm math web reddit

最近我在研究 Reddit 的算法,以确定是什么使帖子成为“热门”主题以及哪些内容适合 reddit 主页。

我正在阅读的文章在这里: http://amix.dk/blog/post/19588

我注意到他们有数学对数,并创建了某种数学函数来确定帖子的热度/相关性。

在使用的公式中,每个数学成分来自哪里,他们如何知道如何使用它们?

谢谢!

-- 巴克兹

编辑:澄清一下,我刚高中毕业,如果这个问题的答案看起来很明显,我深表歉意。再次感谢!

最佳答案

我将解决第一个公式,即帖子的“热度”。像这样的公式来自需求。 Reddit 的设计者考虑了他们想要实现的目标,并相应地设计了公式。我无法确切地告诉您他们的想法是什么,但我可以看一下实现并猜测他们想要一个符合以下思路的系统:

  1. 除非票数发生变化,否则不需要重新计算分数。这减少了对数据库的更改次数,并且在复制数据时更容易实现一致性。 (因此任何基于分数随着文章年龄的增长而降低的评分系统都是不好的)。

  2. 如果两个故事的历史相同,则获得更多支持的故事应该更高。 (所以需要有投票的贡献。)

  3. 故事获得的赞成票越多,它在排名靠前的时间就越长。

  4. 旧故事不应该永远保持在排行榜的首位,即使它们有很多赞成票。很快(一两天后),新故事需要超越它们。 (因此需要从日期开始做出贡献,并且无论获得多少选票,这都必须很快超过投票的分数。)

  5. 反对票多于赞成票的故事根本不应出现在排名中。

现在让我们看看公式:log z + yt/45000 看看它如何满足这些要求。

  1. 如果票数不变,则zyt都不变。所以分数不变。这满足要求 (1)。

  2. 如果两个故事的年龄相同,则它们的 t 值相同。但是获得更多赞成票的那个具有更高的 z 值,并且由于 log 是单调的,因此它具有更高的分数。这满足条件(2)。

  3. 一个故事获得的赞成票越多,它的 z 就越高,因此另一个具有更高 t 的故事超过它的时间就会越长。这满足条件(3)。

  4. 对数是一个函数,随着它变大 (take a look at its graph),增长会变慢。因此,随着时间的推移,一个故事需要越来越多的赞成票才能跟上更新的故事。这满足要求(4)。

  5. 如果故事的反对票多于赞成票,则 z = 1 且 y = −1,因此分数为负。这满足条件 (5)。

常量 45,000 是使赞成票数和年龄达到平衡的比例因子。一天有 86,400 秒,因此 t 每天都会变大这个量。将 t 除以 45,000 得到 1.92,这意味着一天的相对新鲜度值 101.92 = 83 票,两天的相对新鲜度值大约 7,000 票。

关于algorithm - 例如,Reddit 排名的数学算法从何而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566004/

相关文章:

python - 生成非均匀随机数

algorithm - 如何从图中删除派系无法覆盖的顶点?

algorithm - 矩阵中的最大值

为任何长度的数字生成所有可能的 0 和 1 组合的算法

将 2d 多边形最佳分割(即镶嵌/分区)到更小的多边形的算法?

ios - Swift 中 Double 的拆分和组合

java - 如何在java中保存小数

java - 使用 Tomcat 将 Java 应用程序连接到数据库

javascript - 为特定类类型的数组创建 typescript 扩展

css - 视网膜/高分辨率图像