首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Reddit排名算法-计算排名

PHP Reddit排名算法-计算排名
EN

Stack Overflow用户
提问于 2015-02-14 20:29:25
回答 1查看 1.6K关注 0票数 0

我在一个讨论板上工作,这个讨论板根据它的热度/排名列出了所有的话题(比如reddit)。所以我采用了reddits算法并开始尝试。我使用了这个例子:http://blog.sodhanalibrary.com/2014/04/reddit-ranking-algorithm-implementation.html

代码语言:javascript
复制
function score($ups,$downs){
    return $ups - $downs;
}

function epoch_seconds($timestamp){
    $epoch = new DateTime("1970-01-01 00:00:00");
    $unix = new DateTime($timestamp);
    $td = $epoch->diff($unix);

    $days = $td->format('%a');
    $hours = $td->format('%h');
    $minutes = $td->format('%i');
    $seconds = $td->format('%s');
    $age = ($days * 86400) + ($hours * 3600) + ($minutes * 60) + $seconds;

    return $age;
}

function calculateRank($ups,$downs,$date){
    $s = score($ups,$downs);
    $order = log10(max(abs($s), 1), 10); 

    if($s > 0) {
        $sign = 1;
    } elseif($s < 0) {
        $sign = -1;
    } else {
        $sign = 0;
    }

    $seconds = epoch_seconds($date) - 1134028003;

    return round($order + (($sign * $seconds)/45000), 7);
}

示例:

代码语言:javascript
复制
echo calculateRank(1,0,"2015-02-14 12:00:00"); // = 6441.9377111

我不明白的是,如果得分(票数和票数之差)是0,那么排名就是0。这意味着,一篇全新的+1/-1的文章将被排在涅盘中。

代码语言:javascript
复制
echo calculateRank(1,1,"2015-02-14 12:00:00"); // = 0

此外,如果得分为负,则排名为负。这意味着一篇全新的+1/-2文章的排名甚至会比涅盘更远。

代码语言:javascript
复制
echo calculateRank(1,2,"2015-02-14 12:00:00"); // = -6441.9377111

Select查询将如下所示:

代码语言:javascript
复制
SELECT * FROM articles ORDER BY rank DESC 

根据我向你展示的结果,这意味着一篇10年前的文章有一个积极的分数(例如:1个向上投票/0个向下投票),那么无论什么日期,分数为0或负分数的每一篇文章的排名都会更高。这不可能是正确的,并使我感到困惑。

我正在寻找的是类似的东西。我已经通过不允许得分为0而摆脱了零排名。然而,负分(例如:0个上票/2个下票)应该会降低分数,而不是反转分数。

任何帮助都是非常感谢的!谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-02-14 22:12:07

我根据自己的需要调整了算法。我想出了以下几点:

代码语言:javascript
复制
if($score >= 0) {
    $sign = 1;
} elseif($score < 0) {
    $sign = -1;
}
return round( ($sign * $order) + ($seconds / 45000) , 7);

这样,得分为负的文章只会降低排名,而不是反转排名。(例如,分数为-1的惩罚不应该是:“去涅盘!”)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28515642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档