统计热门文章的算法
作者: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))
最后补充一下,由于计算涉及到浮点数、余弦和开方,所以稍显复杂,在实际计算中完全可以用近似值代替。如果你有什么好的想法或者思路,也请告诉我,谢谢。


猜你喜欢
- Python命令启动Web服务器实例详解利用Python自带的包可以建立简单的web服务器。在DOS里cd到准备做服务器根目录的路径下,输入
- 一、需求来源:如果用户在文本框中填了一段<script>alert(xxx);</script>代码,然后我们还保存
- 背景:线上机器,需要过滤access日志,发送给另外一个api期初是单进程,效率太低,改为多进程发送后,查看日志中偶尔会出现异常错误(忘记截
- MySQL 复制详解及简单实例 主从复制技术在MySQL中被广泛使用,主要用于同步一台服务器上的数据至多台从服务器,可以用于实现负
- 本文详细介绍了asp中如何使用sql语句删除数据库中的记录,初学asp者来看看!1,首先要明确删除哪条记录无非还就是SQL语句了,比如对应到
- 问题背景:在开发或者做实验的过程中,我们经常会用到远程服务器或者Github的项目,而我服务器上的项目只能在Jupyter Notebook
- 前言Python处理Excel的包是openpyxl,其支持操作的文件类型为:.xlsx, .xlsm, .xltx, .xltmpip i
- 数据库和操作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操
- 堆 heap 值类型 原始类型(primitive type) Undefined: undefined (注意大小写:类型/ 值,下同)
- 本文实例讲述了python生成IP段的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/local/bin/python#-*-
- 本文实例为大家分享了微信小程序无滑动效果的tab点击切换的具体代码,供大家参考,具体内容如下<!--pages/dingdan/din
- 07年,我是极力推崇网站规范制作,好处很多,对商业,对用户,对设计师。我们走了两年,现在有了一定的成效,我们也看到了规范所带来的好处和便利。
- 需要默认选中时,定义一个变量 var cityId=城市id 下面是js代码 function readxml() { var XmlDoc
- DFA 算法是通过提前构造出一个 树状查找结构,之后根据输入在该树状结构中就可以进行非常高效的查找。设我们有一个敏感词库,词酷中的词汇为:我
- 一、问题目前为止,M1系统上还不能使用pip3安装pandas库,无法使用pandas进行数据分析和处理。虽然网上也有专门适配M1的pyth
- python中join和格式化的用法join用法1、将字符串转化成列表str1 = "hello"print(list(
- 本文将介绍 5 种基于 Plotly 的可视化方法,你会发现,原来可视化不仅可用直方图和箱形图,还能做得如此动态好看甚至可交互。那么,Plo
- 如下所示:import sysfrom PyQt5.QtWidgets import QMainWindow, QTextEdit, QAc
- 此文档是一位高手同事Hewei的原创实践总结,过程真是精彩,最后修复损坏数据库取得圆满效果,值得收藏的一篇好文章。前几天因为mysql数据库
- 1. 引言在使用Python的时候,通常会出现如下场景:array = [1, 2, 3, 3, 2, 1, 0, 2]获取array中元素