`
pypy
  • 浏览: 91892 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

基于用户投票排序算法reddit(转载)

阅读更多
留下笔记,

原文:http://amix.dk/blog/post/19588
(转载:http://blog.jobbole.com/15727/)
Reddit是美国最大的网上社区,它的每个帖子前面都有向上和向下的箭头,分别表示”赞成”和”反对”。用户点击进行投票,Reddit根据投票结果,计算出最新的”热点文章排行榜”。

怎样才能将赞成票和反对票结合起来,计算出一段时间内最受欢迎的文章呢?如果文章A有100张赞成票、5张反对票,文章B有1000张赞成票、950张反对票,谁应该排在前面呢?
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就越大。如果赞成票等于反对票,z就等于1。
结合以上几个变量,Reddit的最终得分计算公式如下:

这个公式可以分成两个部分来讨论:
(一)

这个部分表示,赞成票与反对票的差额z越大,得分越高。
需要注意的是,这里用的是以10为底的对数,意味着z=10可以得到1分,z=100可以得到2分。也就是说,前10个投票人与后90个投票人(乃至再后面900个投票人)的权重是一样的,即如果一个帖子特别受到欢迎,那么越到后面投赞成票,对得分越不会产生影响。
当赞成票等于反对票,z=1,因此这个部分等于0,也就是不产生得分。
(二)

这个部分表示,t越大,得分越高,即新帖子的得分会高于老帖子。它起到自动将老帖子的排名往下拉的作用。
分母的45000秒,等于12.5个小时,也就是说,后一天的帖子会比前一天的帖子多得2分。结合前一部分,可以得到结论,如果前一天的帖子在第二天还想保持原先的排名,在这一天里面,它的z值必须增加100倍(净赞成票增加100倍)。
y的作用是产生加分或减分。当赞成票超过反对票时,这一部分为正,起到加分作用;当赞成票少于反对票时,这一部分为负,起到减分作用;当两者相等,这一部分为0。这就保证了得到大量净赞成票的文章,会排在前列;赞成票与反对票接近或相等的文章,会排在后面;得到净反对票的文章,会排在最后(因为得分是负值)。
(三)
这种算法的一个问题是,对于那些有争议的文章(赞成票和反对票非常接近),它们不可能排到前列。假定同一时间有两个帖子发表,文章A有1张赞成票(发帖人投的)、0张反对票,文章B有1000张赞成票、1000张反对票,那么A的排名会高于B,这显然不合理。
结论就是,Reddit的排名,基本上由发帖时间决定,超级受欢迎的文章会排在最前面,一般性受欢迎的文章、有争议的文章都不会很靠前。这决定了Reddit是一个符合大众口味的社区,不是一个很激进、可以展示少数派想法的地方。
分享到:
评论

相关推荐

    基于用户投票的排名算法.pdf

    基于用户投票的排名算法是一种将信息按照重要性依次排列的方法,该算法广泛应用于互联网中的各种平台,例如 Delicious、Hacker News 和 Reddit 等。这些平台都使用了基于用户投票的排名算法来对信息进行排名,帮助...

    从豆瓣电影评分算法说起.pdf

    5. 推荐阅读:文档提到了阮一峰博客中的系列文章,如《基于用户投票的排名算法》,这些文章涉及了不同网站使用用户投票进行排名的算法,包括Delicious、Hacker News、Reddit、StackOverflow等。这些算法的探讨,对于...

    测量给定数据集相关性的算法类似于Reddit

    Reddit是一个社交新闻网站,它的热点排名算法基于用户投票(点赞和踩)来决定帖子的热度和相关性。在编程实现这一算法时,JavaScript是一种常用的前端开发语言,但在服务器端处理大数据集和复杂计算时,可能会结合...

    Reddit 用户交互记录【Kaggle竞赛】.zip

    标题 "Reddit 用户交互记录【Kaggle竞赛】.zip" 提供的信息表明,这是一个与Reddit平台用户活动相关的数据集,用于Kaggle竞赛。Kaggle是全球知名的在线数据科学和机器学习竞赛平台,它经常发布各种数据挑战,鼓励...

    Reddit产品数据集.zip

    6. **用户群体划分**:通过用户的行为数据,可以运用聚类算法识别出具有相似行为特征的用户群体,这有助于精准营销和个性化推荐。 7. **时间序列分析**:观察话题热度随时间的变化,可以预测未来的流行趋势,对于...

    feeds流优质内容排序机制

    文档介绍了基于用户投票的排名算法,该算法通过计算赞成票与反对票的绝对差值(z=|赞成票-反对票|),并将发表时间(t)结合考虑,来给文章打分。具体来说,赞成票多于反对票时,y值为1;两者相等时,y值为0;否则,...

    decay:著名的基于投票受欢迎度和时间的排序算法为PHP实现

    著名的基于投票受欢迎程度和时间的排序算法已为PHP实现。 安装 composer require mtasuandi/decay dev-master 用法 <?php use Mtasuandi \ Decay \ Decay ; $ c = new Decay (); $ decay = 45000 ; $ ups = 10 ; ...

    Reddit 2.5 million 社交新闻数据.zip

    6. **推荐系统优化**:基于用户的行为数据,可以训练和优化推荐算法,以更精准地推送用户可能感兴趣的内容,提高用户满意度和参与度。 7. **网络社区的形成与发展**:通过观察用户参与度的变化,可以研究社区的形成...

    使用遗传 算法为 reddit 上的 meme 生成字符串_JavaScript_代码_下载

    标题中的“使用遗传算法为reddit上的meme生成字符串”是一个有趣的编程挑战,它涉及到遗传算法、字符串处理和JavaScript编程。遗传算法是一种模拟自然选择和遗传学的计算模型,常用于解决优化问题。在这个项目中,...

    Android-这是目前发布过的最好RedditApp

    标题中的"Android-这是目前发布过的最好RedditApp"表明我们正在讨论的是一款在Android上受到广泛赞誉的Reddit应用,它很可能在用户体验、功能集成和性能优化方面达到了相当高的水平。 首先,从描述中我们可以推断,...

    The-Reddit-Roadrunner:搜索Reddit的工具。 用户输入subreddit,排序首选项和#进行搜索,结果将在新窗口中打开

    同时,用户还可以选择帖子的排序方式,例如按热度、时间或投票数等,以满足不同的信息需求。 5. 结果展示:搜索结果会在新的窗口中打开,每个帖子以列表形式呈现,包括标题、作者、发布日期、评分等关键信息。用户...

    Reddit is fun gold

    reddit is fun yeppy caye!

    reddit官方网站源代码reddit.zip

    这是reddit官方网站源代码。 标签:reddit

    Reddit-Flair-Detector:使用机器学习算法的Reddit Flair检测器

    Reddit天赋探测器Reddit Flair Detector Web应用程序,使用机器学习算法来检测印度subreddit帖子的风格。 该应用程序可以在。目录结构该目录是用于在Heroku服务器上托管的Django Web应用程序设置。 文件和文件夹的...

    Ruby-链接聚合Web应用程序类似于RubyonRails的Reddit

    "RoRdit"这个名字暗示了这是一个模仿Reddit的项目,Reddit是一个流行的社交新闻网站,用户可以提交链接、评论并进行投票,从而决定内容的排名。 在Ruby on Rails中,创建一个链接聚合Web应用程序涉及到以下几个核心...

    reddit_crawlers, 将尝试制作有趣的reddit爬虫,提供一些洞察力.zip

    reddit_crawlers, 将尝试制作有趣的reddit爬虫,提供一些洞察力 reddit_crawlers将尝试制作有趣的reddit爬虫,提供一些洞察力使用 python praw库对于着色 bot: 我们使用以下 python 附加软件包:...

    协同算法+粒子群算法 核心的学习资源推荐平台

    比如,协同过滤是一种常见的推荐系统算法,它基于用户或物品之间的相似性进行预测,认为如果两个用户在过去对某些物品有相似的评价,那么他们可能会对其他未评价的物品也有相似的喜好。这种算法可以处理大规模数据集...

    Reddit 用户交互记录【Kaggle竞赛】数据集

    Reddit是全球知名的社交新闻站点,用户可以在这里分享链接、讨论话题并投票决定内容的热度。这个数据集特别适合对社交网络分析、用户行为建模以及文本挖掘感兴趣的分析人员。 描述中提到,数据集包括了25000名用户...

    Reddit用户萤光笔「Reddit User Highlighter」-crx插件

    通过看板来突出reddit用户。 支持语言:English

Global site tag (gtag.js) - Google Analytics