php购票排位_基于用户投票的排名算法的PHP实现之 Reddit 篇

基于用户投票的排名算法的PHP实现之 Reddit 篇

Reddit是美国最大的网上社区,它的每个帖子前面都有向上和向下的箭头,分别表示”赞成”和”反对”。用户点击进行投票,Reddit根据投票结果,计算出最新的”热点文章排行榜”。

该社区的算法特点是最受欢迎(支持远超反对)的post排在前段, 正反观点相近的post排中间, 大量反对的post排后面.同时参考了时效性, PHP代码如下:

<?php

//获得赞成票

$vote = 100;

//获得的反对票

$devote = 99;

//投票差额

$voteDiff = $vote - $devote;

//投票方向

if($voteDiff > 0) {

$pos = 1;

} elseif($voteDiff < 0) {

$pos = -1;

} else {

$pos = 0;

}

//帖子的争议度(赞成/否定)

$voteDispute = $voteDiff != 0 ? abs($voteDiff) : 1;

//项目创建时间

$fund = strtotime('2012-09-01');

//数据创建时间

$created = strtotime('-3 days');

//考虑时间因素, 用来拉低比较老的post的分数

$time = $created - $fund;

//详细算法

$socre = log10($voteDispute) + $pos * $time / 45000;

echo $socre, "\n";

注: log10($voteDispute) 计算的是以10为底的的对数, 争议程度会影响得分, 但是争议度很大的时候对整体得分的影响不是很明显,避免了一些争议很大的老的post会给新的post带来排名压力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值