网络编程
位置:首页>> 网络编程>> Asp编程>> 统计热门文章的算法

统计热门文章的算法

作者:canque 来源:canque博客 发布时间:2008-03-16 15:40:00 

标签:统计,文章,算法

临近下班的时候,突然想到统计热门文章的问题。以前我所知道的热门文章统计,基本有这么几种:

  • 按点击数排序 该方法最大的问题在于热门的文章会越来越热门,最终失去热门文章的意义。

  • 按点击和时间排序 即找出某时间段内,点击数靠前的文章。这种方法的问题是好的文章可能会太早地下去,而某些并不好的文章却因为某时间段文章少而成为热门。

这些都不是我们所期望的。

下面我们开始设计一个热门文章的算法。先设一些参数:R-文章得分数,H-文章点击数,D-文章发布的天数

第一天:

我们假设用户每点击文章一次就是为该文章投了一票,那么当有100个用户点击某文章时,该文章的得分是100分。用类似的办法算出所有文章的分数。那么分数最靠前的就是热门文章。
公式:

R(1)=H(1)

第二天:

由于昨天的热门文章已经显示在页面的显著位置,它更容易被点击。所以不能再单纯的按点击数计算,应该引入一个因数K,K随时间增加而减小。于是第二天的计算公式为:

R(2)=R(1)+K(D(2))*H(2)

……
依次类推

第N天(N是一个有限值,比如100,因为超过100天的文章即使再好也不应该成为热门)

R(N)=R(N-1)+K(D(N))*H(N)

问题转换为设计一个合适的K。一般来说,K的确定应该参考网站性质、更新频率、以及网站的交互程度等。这是我设计的一个K

K(N)=cos((D(N)*PI)/(N*2))/sqrt(D(N)+1)

于是我们的公式为(千万不要被这些字母唬住,只是一些小学数学而已^_^)

R(N)=R(N-1)+cos((D(N)*PI)/(N*2))/sqrt(D(N)+1)*H(N)

细心的朋友会发现,其实这种方法并不完善,主要是这种点击评分的思想不合理。因为访客很多时候点击前其实并不了解文章内容,他们甚至经常会点到自己不喜欢的文章。为了解决这个问题,我们还需要引入另外的参数——投票数。投票数就是文章看完后的评价,尽量简单,最好就是一个好或者不好,也可以有个评分。总之,不要强迫用户去使用键盘。假设文章的投票数为V。因为V是用户的反馈信息,更能代表文章的好坏程度,因此在热门文章的计算上应该具有较高的权重。
最终公式:

R(N)=R(N-1)+cos((D(N)*PI)/(N*2))/sqrt(D(N)+1)*(0.3*H(N)+0.7*V(N))

最后补充一下,由于计算涉及到浮点数、余弦和开方,所以稍显复杂,在实际计算中完全可以用近似值代替。如果你有什么好的想法或者思路,也请告诉我,谢谢。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com