我正在创办一家使用Reddit算法确定" Hotness"的帖子。我正在概述PHP中的基本算法
protected function _score($score, $time){
$start = 1406618304; //29-Jul-14
$hop = 45000
if($score > 0)
$sign = 1;
else if($score < 0)
$sign = -1;
else
$sign = 0;
$order = log( max( abs( $score ), 1));
$seconds = $time - $start;
return round ( $sign * $order + ( $seconds / $hop ), 7 );
}
变量$hop
是关于这个问题的最重要的事情。这是一个比例因子,可以使得分和年龄达到平衡。一天中有 86,400 秒,因此$seconds
每天都会增加这个数量。
在Reddit的算法中,$ hop的值 45,000 。将$seconds
除以$hop
(45,000)会给出 1.92 ,这意味着某一天的相对新增值 83 (10 ^ 1.92) )投票(登录到73的基数10 = 1.86),两天&#39;相对新的价值大致 6,918 票。这个数字呈指数增长。
83 一天和 6,918 两天就足够了。但对于一个网站来说,在它的早期,每天只有几百页的浏览量,这些数字是不可能的。
说有5个帖子,
<post, age, score>
<P1, 1 hour,0>
<P2, 2 hour,-5>
<P3, 2 hour,3>
<P4, 3 hour,60>
<P5, 4 hour,35>
排序的输出将是[P1,P3,P2,P4,P5],这是不理想的。
解决方案是调整$hop
值并将其设置为更高的数字,以便投票数对结果得分的影响大于年龄。
我正在努力保持对可扩展性的开放态度。那么如果网站大幅增加呢?我是否需要再次调整$hop
值(通过降低它)?如果是这样,不应该扭曲整体排名吗?