我运行了一个类似digg的网站,当它达到一定数量的投票时,将内容推广到首页。现在它没有考虑提交日期。
我想使用一种简单的算法,只使用投票数和提交的日期来确定是否应该提升某些内容。我不希望算法做任何比这更复杂的事情(例如迭代所有投票日期)。
修改
公式不应该是这样的:
30 / (days between post date and now) * (vote count) = weighted vote
以下是一些对我的网站来说似乎合理的情况,这表明该算法需要对较旧的项目更宽松(因为较旧的项目在网站上较不易被发现)
<30> 30/30 * 30 = 30(30天,以30票晋升)如何修改公式,以便上述3给出接近促销所需的相同最小加权投票?
答案 0 :(得分:0)
您可以使用当前日期和提交日期之间的差异来对投票进行加权。
(阈值 - (发布日期和现在之间的天数))/阈值*(投票计数)=加权投票
代码
$weightedVote = ($threshold - $daysOld) / $threshold * $voteCount;
这样可以消除超过阈值的帖子。例如,10天的职位将其票数乘以20/30。
答案 1 :(得分:0)
当条件基于投票时,是否有理由为内容分配任意数字?我的意思是 - 看起来你最好不要权衡用户和他们的投票,而不是根据日期给出一些内容或多或少的投票。 我为一家拥有10,000美元竞赛的公司写了一些非常卑鄙的投票软件,我们的算法考虑了用户及其行为历史,最终过滤掉了大量垃圾邮件投票。
这听起来很复杂,但事实并非如此。
至于你的平衡代码 - 您希望以10票的价格提升1天的内容,其中30天的内容需要30票? 或者你的意思是1天内容有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天内的任何内容都没有被考虑,他们的投票等于实际值。
我可能只是误解了你的需求。