在Web启动中实现Reddit Hotness算法

时间:2014-07-29 19:15:44

标签: php algorithm

我正在创办一家使用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 票。这个数字呈指数增长。

对于像Reddit这样每天有数百万访问者的网站来说,

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值(通过降低它)?如果是这样,不应该扭曲整体排名吗?

0 个答案:

没有答案