基于投票的热门计数算法策略

简介: 类似基于投票的热门计数算法普遍应用在热门文章,热门评论等场景中, 典型的比如网易和今日头条的评论区,国外比如Hacker News和Reddit的主题排序。
类似基于投票的热门计数算法普遍应用在热门文章,热门评论等场景中,
典型的比如网易和今日头条的评论区,国外比如Hacker News和Reddit的主题排序。
 
一.Hacker News的排序算法
 
Hacker News是一个主题社区,用户可以为主题投票,根据得票数,系统自动统计出热门文章排行榜。
同时主题发表时间也会对排名产生影响,新发表的主题比旧的主题更容易得到好的排名。
 
Hacker News的排名算法是这样实现的:
 
(p – 1) / (t + 2)^G
其中,
  P表示帖子的得票数,减去1是为了忽略发帖人的投票。
  T表示距离发帖的时间(单位为小时),加上2是为了防止最新的帖子导致分母过小(之所以选择2,可能是因为从原始文章出现在其他网站,到转贴至Hacker News,平均需要两个小时)。
  G表示"重力因子"(gravityth power),即将帖子排名往下拉的力量,默认值为1.8。
 
从这个公式来看,决定帖子排名有三个因素:
第一个因素是得票数P。
在其他条件不变的情况下,得票越多,排名越高。
 
第二个因素是距离发帖的时间T。
在其他条件不变的情况下,越是新发表的帖子,排名越高。或者说,一个帖子的排名,会随着时间不断下降。
 
第三个因素是因子G。
它的数值大小决定了排名随时间下降的速度。
G值越大,排名下降得越快,意味着排行榜的更新速度越快。
 
二.Reddit的排序算法
 
Reddit 是Digg类型网站,国内类似的社区有花瓣网等。
和Hacker News不同,和Reddit允许用户投反对票,
算法如下图:
 
 
1.文章提交时间对排名的影响
 
文章提交时间对排名的影响可以总结为以下几点:
提交时间对排名影响巨大,越新的文章排名会越高
文章排名得分不会随时间的流逝而降低,但新文章会比老文章获得更高的分。这跟Hacker News的排名算法有很大区别,它的得分会随时间流逝而降低。
下图表现的是具有相同支持和反对的票数,但时间不同的文章的排名得分情况:
 
 
2.使用对数改变不同范围内的权重计算值
 
Reddit在算法中使用了对数函数来强化前几票的份量:
前10个赞成票的份量和后面100个的份量,以及再后面1000票的份量是相同的,以此类推
下面是效果图:
 
 
3.反对票对排名的影响
Reddit对反对票使用了简单的加减方法,这种计算方式实际上是有问题的,
一篇文章的的’得分‘定义如下:
up_votes – down_votes
最后的结果就是类似下图:
 
这种计算方式会对既有很多赞成票,又有很多反对票的文章(比如很有争议的文章)带来重大影响,它们可能会比那些只有很少赞成票的文章获得分数更低。
 
 
三.典型的文章/评论等投票计数算法
 
可以考虑使用类似规则引擎的机制去计算权重,在项目中封装独立的模块用于计算热门评论的加权得分,得到列表展现顺序。
 
1.影响列表排序结果的因素
 
(1)需要计算的维度
发布时间,点赞数,评论数,内容丰富度(如商品评论等)
 
(2)可以扩展引入计算的维度
用户权重(星级用户/认证用户等)
 
2.不同权重对展现结果的影响
 
(1)发表时间
最新的发表的主题的权重大于一段时间以前发表的内容,这个维度的影响可以通过改变对应的时间因素上的因子等调节。
 
(2)点赞和点踩数目
点赞数越多,位置越靠前,点踩数越多,排序位置越靠后,同时不同时间间隔的点赞操作会占权重不同,比如五分钟以内的10个点赞大于一小时以内的20条点赞。
 
(3)评论数目及最近一段时间的评论活跃度
评论数目越多,位置越靠前,同时近期被评论越多,活跃的主题占据的位置会越靠前。
 
(4)内容丰富度
其他纬度类似的情况下,内容越丰富,权重应该越高。
 
3.计算策略
 
针对上面的几个维度,可以分别整理对排序结果有正面和负面影响的因素,可以使用乘法和加法结合,通过设置不同的因子来调节权重。
 
内容参考:
Hacker News和Reddit的算法:
Reddit排名算法工作原理
目录
相关文章
|
24天前
|
数据采集 缓存 算法
算法优化的常见策略有哪些
【10月更文挑战第20天】算法优化的常见策略有哪些
|
3月前
|
搜索推荐 算法
十大排序算法-快排-希尔-堆排-归并-冒泡-桶排-选择-插入-计数-基数
十大排序算法-快排-希尔-堆排-归并-冒泡-桶排-选择-插入-计数-基数
十大排序算法-快排-希尔-堆排-归并-冒泡-桶排-选择-插入-计数-基数
|
3月前
|
缓存 算法 前端开发
深入理解缓存淘汰策略:LRU和LFU算法的解析与应用
【8月更文挑战第25天】在计算机科学领域,高效管理资源对于提升系统性能至关重要。内存缓存作为一种加速数据读取的有效方法,其管理策略直接影响整体性能。本文重点介绍两种常用的缓存淘汰算法:LRU(最近最少使用)和LFU(最不经常使用)。LRU算法依据数据最近是否被访问来进行淘汰决策;而LFU算法则根据数据的访问频率做出判断。这两种算法各有特点,适用于不同的应用场景。通过深入分析这两种算法的原理、实现方式及适用场景,本文旨在帮助开发者更好地理解缓存管理机制,从而在实际应用中作出更合理的选择,有效提升系统性能和用户体验。
186 1
|
3月前
|
算法 语音技术
支付宝商业化广告算法问题之在ODL模型优化过程中,采取什么策略来提高模型的泛化能力呢
支付宝商业化广告算法问题之在ODL模型优化过程中,采取什么策略来提高模型的泛化能力呢
|
3月前
|
算法 Java 应用服务中间件
探索JVM垃圾回收算法:选择适合你应用的最佳GC策略
探索JVM垃圾回收算法:选择适合你应用的最佳GC策略
|
4月前
|
机器学习/深度学习 数据采集 算法
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机回归模型(SVR算法)项目实战
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机回归模型(SVR算法)项目实战
167 9
|
4月前
|
机器学习/深度学习 数据采集 算法
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机分类模型(SVC算法)项目实战
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机分类模型(SVC算法)项目实战
|
4月前
|
缓存 算法 安全
Java中的数据结构与算法优化策略
Java中的数据结构与算法优化策略
|
5月前
|
算法 C++
算法与数据结构高手养成:朴素的贪心法(上)最优化策略
算法与数据结构高手养成:朴素的贪心法(上)最优化策略
36 1
算法与数据结构高手养成:朴素的贪心法(上)最优化策略
|
5月前
|
机器学习/深度学习 存储 算法
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】