统计热门文章的算法

作者: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 返回引用类型函数代码

    2011-03-10 10:44:00
  • 如何快速定位页面中复杂 CSS BUG 问题

    2009-01-15 12:23:00
  • 如何用SQL语句来建表?

    2010-06-13 14:38:00
  • Oracle 管道 解决Exp/Imp大量数据处理问题

    2009-07-12 18:31:00
  • Windows下对MySQL安装的故障诊断与排除

    2008-12-17 16:50:00
  • 高性能网站建设指南:性能提升的14个原则

    2011-07-14 16:04:54
  • 段正淳的css笔记(4)css代码的简写

    2007-11-01 22:03:00
  • asp HTTP 500错误 常见问题分析

    2011-04-07 10:33:00
  • 6个卓越Web设计细节

    2010-03-29 12:56:00
  • CSS hacks与争议

    2007-11-19 12:56:00
  • (100-1)% 的内容是导航

    2008-01-11 19:23:00
  • 带你深入了解SQL Server 2008的独到之处

    2009-01-07 14:20:00
  • [翻译]标记语言和样式手册 chapter 6 短语元素

    2008-01-25 16:37:00
  • ASP中使用Form和QueryString集合

    2007-09-14 10:43:00
  • 表单系列·出错字段排行榜

    2008-07-01 12:57:00
  • IE8新特性及IE8安装使用 目录

    2008-04-01 09:50:00
  • 为FCKeditor2.6添加行距功能(最新修改)

    2008-08-18 21:09:00
  • ASP实例:幻灯片新闻代码

    2008-11-21 17:40:00
  • 驯服不听话的网页表格

    2007-12-03 11:36:00
  • SQLServer 存储过程简介与使用方法

    2009-07-07 14:06:00
  • asp之家 网络编程 m.aspxhome.com