作热排名算法(hot ranking)的工作原理

[img]http://dl2.iteye.com/upload/attachment/0088/7628/20268c4a-3150-3b2a-a578-afc4374066d1.bmp[/img]
重点描述上面两个公式:
Ts  =  A – B 

相当于
A的发布时间 – 设定时间(默认时间为1970-01-01就可以)

X = U – D

相当于
支持率 – 反对率


来个JAVA实现方式。

	private double U = 100;
private double D = 2;


获取默认时间(1970-01-01)
	private double getDefaultTime() {
java.text.DateFormat format2 = new java.text.SimpleDateFormat(
"yyyyMMddhhmmss");
String s = format2.format(new Date(0L));
return Double.parseDouble(s);
}


获取某篇文章的发布时间
	private double getPostPublish(Date date) {
java.text.DateFormat format2 = new java.text.SimpleDateFormat(
"yyyyMMddhhmmss");
String s = format2.format(date);
return Double.parseDouble(s);
}


获取秒时间差
	private double getSecondsDifference(Date date) {
return getPostPublish(date) - getDefaultTime();
}


获取X
	public double getX() {
return U - D;
}


获取Y
	public double getY(double x) {
if(x > 0)
return 1;
if(x == 0)
return 0;
return -1;
}


获取Z
	public double getZ(double x) {
if(Math.abs(x) >=1) {
return Math.abs(x);
}
return 1;
}


获取作热排名
	public double hotRanking() {
double x = getX();
return Math.log10(getZ(x)) + getY(x) * getSecondsDifference(new Date())/45000;
}


到这里,算法算是实现啦。

[b]发表时间的影响[/b]
发表时间和话题排名的影响可以被概括如下:

发表时间对排名有很大影响,该算法使得新的话题比旧的话题排名靠前
话题的得分不会因为时间的流失而减少,但是新的话题会比旧的话题得分高。这与 Hacker New 的算法不同 (随着时间的发展降低话题的得分)

下图展示了话题得分在好评和差评的数量不变时,随着时间而变化的情况:

[img]http://dl2.iteye.com/upload/attachment/0088/7670/3f5940c9-6f04-396f-a556-c16b8ccee1dd.png[/img]

[b]对数关系[/b]

Reddit 的热排序算法使用了对数函数来衡量前面的投票与其他投票的差距:

前十个好评和之后的100个,1000个投票有相同的权重。

参见下面的图:

[img]http://dl2.iteye.com/upload/attachment/0088/7674/f3f368da-d9d3-32f7-9be4-64d564e3c587.png[/img]

去掉对数函数之后(译注:采用线性函数)的效果

[img]http://dl2.iteye.com/upload/attachment/0088/7676/aaf9b6c0-a14d-3866-bd8e-9e06572ad9a4.png[/img]

[b]反对票的影响[/b]

Reddit 是为数不多的几个可以投反对票的网站。正如上边代码所述,一个话题的得分被定义成:好评数 - 差评数

下边的图可以帮助我们理解:

[img]http://dl2.iteye.com/upload/attachment/0088/7678/39ed35c7-36cf-3fe8-be04-631662d6779b.png[/img]
这一点对那些同时有大量赞成和反对票的话题(比如说一些有争议的话题)有显著影响。这种话题的排名会比只有赞成票的话题低一些,这也就解释了为什么 kittens 和其他一些没有争议的话题排名如此靠前。

[b]话题排名算法的结论[/b]

发表时间是一个非常重要的参数,通常,新的话题要比旧的话题排名靠前
前10个好评跟接下来的100个有着同样的权重。比如一个有着10个好评的话题,跟有50个好评的话题有着相似的排名
有争议的话题(支持票和反对票的数量相近)要比支持票占大多数的话题排名靠后

参考资料:
http://www.iteye.com/news/28228
http://pycoders-weekly-chinese.readthedocs.org/en/latest/issue6/how-reddit-ranking-algorithms-work.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzj0470

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值