Php 简单普及算法(使用提交日期和投票数)

Php 简单普及算法(使用提交日期和投票数),php,Php,我运行一个类似digg的网站,当内容达到一定票数时,它会将内容推到头版。现在它没有考虑提交日期 我想使用一个简单的算法,只使用投票数和提交的日期来决定是否应该推广某些东西。我不希望算法做任何比迭代所有投票日期更复杂的事情 编辑: 公式不应该是这样的吗: 30 / (days between post date and now) * (vote count) = weighted vote 以下是一些对我的站点来说似乎合理的场景,这表明算法需要对较旧的项目更加宽松,因为较旧的项目在站点上不易发现

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

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

编辑:

公式不应该是这样的吗:

30 / (days between post date and now) * (vote count) = weighted vote
以下是一些对我的站点来说似乎合理的场景,这表明算法需要对较旧的项目更加宽松,因为较旧的项目在站点上不易发现

30/30*30=30天,以30票晋级 30/5*15=90个5天大,以15票晋级 30/1*10=300 1天大,以10票晋级


如何修改公式,使上述3个公式的投票数与晋升所需的最小加权投票数接近?

您可以使用当前日期和提交日期之间的差值来加权投票数

阈值-发布日期和现在之间的天数/阈值*投票计数=加权投票

编码

$weightedVote = ($threshold - $daysOld) / $threshold * $voteCount;

这将产生从审议中取消超过门槛的员额的效果。例如,一篇10天前的文章的投票数将乘以20/30。

当条件是基于投票时,您为什么要为内容指定任意数字?我的意思是——似乎你最好权衡一下用户和他们的投票,而不是根据日期或多或少地给某个内容投票。 我为一家公司写了一些相当吝啬的投票软件,该公司有超过10000美元的竞赛,我们的算法考虑了用户和他们的行为历史,最终过滤掉了很多垃圾投票

这听起来很复杂,但实际上并不复杂

至于你的平衡码- 您希望以10票的价格推广1天的内容,而30天的项目需要30票? 或者你的意思是,一天10票的内容会被提升,而30天6票的项目会被提升,因为它比较老,不太可能被看到,所以投票容忍度会降低

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美元。 此示例大致相同,但其他示例会有所不同。 if意味着任何超过30天的内容都不被考虑,他们的投票等于实际值


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

你希望它如何考虑日期?请参阅主要帖子中的“我编辑”。看起来您的算法是正确的,但看起来项目越老,加权投票率越高。。所以我做了一些改变。如果我误解了什么,请告诉我。更正了我的帖子,让分子交换。您在问题编辑中提供的方法也可以起作用。不过,您添加的案例没有任何明确的关联。