基于用户投票的排名算法
来源:互联网 发布:社区网络数字化平台 编辑:程序博客网 时间:2024/06/02 11:35
Reddit 的程序是开源的,使用 Python 语言编写。排名算法的代码大致如下:
这段代码考虑了这样几个因素:
(1)帖子的新旧程度t
t = 发贴时间 - 2005 年 12 月 8 日7:46:43
t 的单位为秒,用 unix 时间戳计算。不难看出,一旦帖子发表,t就是固定值,不会随时间改变,而且帖子越新,t值越大。至于 2005 年 12 月 8 日,应该是 Reddit 成立的时间。
(2)赞成票与反对票的差x
x = 赞成票 - 反对票
(3)投票方向y
y 是一个符号变量,表示对文章的总体看法。如果赞成票居多,y就是 +1;如果反对票居多,y就是-1;如果赞成票和反对票相等,y就是0。
(4)帖子的受肯定程度z
z 表示赞成票超过反对票的数量。如果赞成票少于或等于反对票,那么z就等于1。
结合以上几个变量,Reddit 的最终得分计算公式如下:
这个公式可以分成两个部分来讨论:
(一)
这个部分表示,赞成票超过反对票的数量越多,得分越高。
需要注意的是,这里用的是以 10 为底的对数,意味着z=10可以得到 1 分,z=100可以得到 2 分。也就是说,前 10 个投票人与后 90 个投票人(乃至再后面 900 个投票人)的权重是一样的,即如果一个帖子特别受到欢迎,那么越到后面投赞成票,对得分越不会产生影响。
当反对票超过或等于赞成票,z=1,因此这个部分等于0,也就是不产生得分。
(二)
这个部分表示,t越大,得分越高,即新帖子的得分会高于老帖子。它起到自动将老帖子的排名往下拉的作用。
分母的 45000 秒,等于 12.5 个小时,也就是说,后一天的帖子会比前一天的帖子多得 2 分。结合前一部分,可以得到结论,如果前一天的帖子在第二天还想保持原先的排名,在这一天里面,它得到的净赞成票必须增加 100 倍。
y 的作用是用来产生正分和负分。当赞成票超过反对票时,得分为正;当赞成票少于反对票时,得分为负;当两者相等,得分为0。这就保证了得到大量净赞成票的文章,会排在前列;得到大量净反对票的文章,会排在最后。
(三)
这种算法的一个问题是,对于那些有争议的文章(赞成票和反对票非常接近),它们不可能排到前列。假定同一时间有两个帖子发表,文章A有 1 张赞成票(发帖人投的)、0张反对票,文章B有 1000 张赞成票、1000张反对票,那么A的排名会高于B,这显然不合理。
结论就是,Reddit 的排名,基本上由发帖时间决定,超级受欢迎的文章会排在最前面,一般性受欢迎的文章、有争议的文章都不会很靠前。这决定了 Reddit 是一个符合大众口味的社区,不是一个很激进、可以展示少数派想法的地方。
- 基于用户投票的排名算法
- 基于用户投票的排名算法
- 基于用户投票的排名算法
- 基于用户投票的排名算法
- 基于用户投票的排名算法
- 基于用户投票的排名算法
- 基于用户投票的排名算法
- 简评《基于用户投票的排名算法》
- 基于用户投票的排名算法
- 基于用户投票的排名算法
- 基于用户投票的排名算法
- 基于用户投票的排名算法
- 基于用户投票的排名算法Reddit
- 基于用户投票的排名算法
- 阮一峰的《基于用户投票的排名算法》系列文章
- 基于用户投票的排名算法(二):Reddit
- 基于用户投票的排名算法(三):Stack Overflow
- 基于用户投票的排名算法(五):威尔逊区间
- Oracle Lock相关查询.
- linux下oralce插件,使用上下左右键
- vc调用matlab生成的dll实例
- 深入浅出学习Struts1框架(九):截取URL
- Java 面试&笔试题
- 基于用户投票的排名算法
- Android SDK failed to install
- 项目管理随说
- 网站内容编辑
- OpenCV-绘制图像的像素直方图-Histogram
- UIWebView
- Activity接触点Override的方法
- event.keyCode - 兼容IE和Firefox
- 联想发布IdeaTab S2109平板 8.9毫米厚Android4.0系统