阮一峰的网络日志 |
Posted: 15 Mar 2012 09:31 AM PDT 这个系列的前三篇,介绍了Hacker News,Reddit和Stack Overflow的排名算法。 今天,讨论一个更一般的数学模型。 这个系列的每篇文章,都是可以分开读的。但是,为了保证所有人都在同一页上,我再说一下,到目前为止,我们用不同方法,企图解决的都是同一个问题:根据用户的投票,决定最近一段时间内的"热文排名"。 你可能会觉得,这是一个全新的课题,伴随着互联网而产生,需要全新的方法来解决。但是,实际上不是。我们可以把"热文排名"想象成一个"自然冷却"的过程:
这样假设的意义,在于我们可以照搬物理学的冷却定律,使用现成的公式,建立"温度"与"时间"之间的函数关系,轻松构建一个"指数式衰减"(Exponential decay)的过程。 伟大的物理学家牛顿,早在17世纪就提出了温度冷却的数学公式,被后人称作"牛顿冷却定律"(Newton's Law of Cooling)。我们就用这个定律构建排名算法。 "牛顿冷却定律"非常简单,用一句话就可以概况:
写成数学公式就是:
其中,
这是一个微分方程,为了计算当前温度,需要求出T(t)的函数表达式。 第一步,改写方程,然后等式两边取积分。
第三步,假定在时刻t0,该物体的温度是T(t0),简写为T0。代入上面的方程,得到
第四步,将上一步的C代入第二步的方程。
假定室温H为0度,即所有物体最终都会"冷寂",方程就可以简化为
上面这个方程,就是我们想要的最终结果:
将这个公式用在"排名算法",就相当于(假定本期没有增加净赞成票)
其中,"冷却系数"是一个你自己决定的值。如果假定一篇新文章的初始分数是100分,24小时之后"冷却"为1分,那么可以计算得到"冷却系数"约等于0.192。如果你想放慢"热文排名"的更新率,"冷却系数"就取一个较小的值,否则就取一个较大的值。 [参考文献] * Rank Hotness With Newton's Law of Cooling (完) 文档信息
|
You are subscribed to email updates from 阮一峰的网络日志 To stop receiving these emails, you may unsubscribe now. | Email delivery powered by Google |
Google Inc., 20 West Kinzie, Chicago IL USA 60610 |