首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单流行算法(使用提交日期和投票#)

简单流行算法(使用提交日期和投票#)
EN

Stack Overflow用户
提问于 2010-08-13 23:03:45
回答 2查看 608关注 0票数 1

我运行一个像digg一样的网站,当它达到一定数量的选票时,它会将内容推广到头版。现在它没有考虑到提交的日期。

我想使用一个简单的算法,它只使用投票的数量和提交的日期来决定是否应该推广一些东西。我不希望算法做任何比这更复杂的事情(比如遍历所有的投票日期)。

编辑:

公式不应该是这样的:

代码语言:javascript
复制
30 / (days between post date and now) * (vote count) = weighted vote

以下是对我的站点来说似乎是合理的一些场景,这表明该算法需要对旧项目更加宽松(因为旧项目在站点上不易被发现)

30 / 30 * 30 = 30 (30天,以30票晋升)

30 /5* 15 = 90 (5天,以15票晋升)

30 /1* 10 = 300 (1天,以10票晋升)

如何才能修改公式,使上述3给出接近同一分钟加权投票所需的晋升?

EN

回答 2

Stack Overflow用户

发布于 2010-08-13 23:11:10

您可以使用当前日期和提交日期之间的差异来衡量选票的权重。

(起点-(从发布日期到现在之间的天数)/threshold*(计票)=加权投票

用代码

代码语言:javascript
复制
$weightedVote = ($threshold - $daysOld) / $threshold * $voteCount;

这将产生从考虑中取消超过门槛值的员额的效果。例如,10天前的一个员额的选票将乘以20/30。

票数 0
EN

Stack Overflow用户

发布于 2010-08-14 00:29:28

如果条件是基于投票的,那么是否有理由为内容分配任意的数字?我的意思是--你最好衡量一下用户和他们的投票结果,而不是根据日期或多或少地给出一份投票。我为一家公司写了一些非常吝啬的投票软件,它有1万美元以上的竞争,我们的算法考虑了用户和他们的行为历史,最终过滤掉了大量垃圾邮件投票。

这听起来很复杂,但并不是真的。

至于你的平衡码-你希望一天前的内容在10票时得到推广,而30天的项目需要30票?或者你的意思是一天10票的内容被推广,而一项30天的项目,比如6票,可以被提升,因为它更老,更不可能被看到,所以选票的容忍度降低了?

代码语言:javascript
复制
function daysDifference($endDate, $beginDate)
{
   $date_parts1=explode("-", $beginDate);
   $date_parts2=explode("-", $endDate);
   $start_date=gregoriantojd($date_parts1[1], $date_parts1[2], $date_parts1[0]);
   $end_date=gregoriantojd($date_parts2[1], $date_parts2[2], $date_parts2[0]);
   return $end_date - $start_date;
}
$diff = 30 - daysDifference(date("Y-m-d"), $postdate);
if($diff > 0)
    $weight = 30 / $diff + $votes;
else
    $weight = $votes;

所以,假设daysDifference函数返回26,原来有4张选票。这将是30 /(30-26= 4) = 7.4 +4,所以总共11.4票。一天前有10票的项目,应改为30 /(30-1= 29) = 1.03 + 10。因此,11.03共计。这个样本大致相同,但其他样本会有所不同。如果是指任何超过30天的内容都没有被考虑,他们的选票等于实际价值。

不过,我可能误解了你的需要。

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

https://stackoverflow.com/questions/3481214

复制
相关文章

相似问题

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