网站内容排名算法

1.Stack Overflow问答网站热门内容排名算法

在08年8月23日的时候,*的创始人 Jeff Atwood曾经公布了一个热门问题的排名算法,具体为:
网站内容排名算法

在分析问题前可以先考虑下,如果是你来做这个排名算法需要考虑哪些因素?
1. 问题的投票人数,*允许用户投反对票,所以这里可以使用绝对投票数,即正面票-负面票数量。绝对数越高问题越热门。
2. 问题浏览量,或是有效浏览量,有效浏览量可以建立一个停留时间的阀值去衡量。浏览的越多则越热门。
3. 问题的答案数,理论上说答案越多则问题的越热门,但这也并不绝对,有些好的问答可能只有一个好的答案。
4. 问题答案的认可数,即是否存在一个被大量认可的答案。这里存在两种情况,被提问者认可或被其他访问者投票。多少的投票量可以认为是问题答案被认可也是需要考虑的问题。
5. 问题的提问时间和问题的最后答复时间,问题的受欢迎程度应该是随时间变长而变得不热门。
6. 提问者的声望和回答问题的声望,声望越高的问题肯定质量越到,越值得去推荐。


此算法目前是否还继续使用或者是否改变不得而知。下面我们详细介绍下问题排名中涉及到的变量。
1. Qviews(问题的浏览次数)
— log(Qviews)*4
某个问题的浏览次数越多,就代表越受关注,得分也就越高。这里使用了以 10为底的对数,用意是当访问量越来越大,它对得分的影响将不断变小。
2. Qscore(问题得分)和 Qanswers(回答的数量)
— (Qanswers * Qscore)/5
Qscore(问题得分)= 赞成票-反对票。如果某个问题越受到好评,排名自然应该越靠前。Qanswers 表示回答的数量,代表有多少人参与这个问题。这个值越大,得分将成倍放大。这里需要注意的是,如果无人回答,Qanswers 就等于0,这时 Qscore 再高也没用,意味着再好的问题,也必须有人回答,否则进不了热点问题排行榜。
3. Ascores(回答得分)
— sum(Ascores)
一般来说,”回答”比”问题”更有意义。这一项的得分越高,就代表回答的质量越高。但是简单加总的设计还不够全面。这里有两个问题。首先,一个正确的回答胜过一百个无用的回答,但是,简单加总会导致,1个得分为 100 的回答与 100 个得分为 1 的回答,总得分相同。其次,由于得分会出现负值,因此那些特别差的回答,会拉低正确回答的得分。
4. Qage(距离问题发表的时间)和 Qupdated(距离最后一个回答的时间)
— ((Qage+1) – ((Qage – Qupdated)/2)) ^ 1.5
Qage 和 Qupdated 的单位都是小时。如果一个问题的存在时间越久,或者距离上一次回答的时间越久,Qage 和 Qupdated 的值就相应增大。也就是说,随着时间流逝,这两个值都会越变越大,导致分母增大,因此总得分会越来越小。
总结:Stack Overflow 热点问题的排名,与参与度(Qviews 和 Qanswers)和质量(Qscore 和 Ascores)成正比,与时间(Qage 和 Qupdated)成反比。

原文链接:https://blog.csdn.net/grafx/article/details/70495369

2.通用排序

  • 单位时间内的交互数,
  • 总交互数,总点赞数
  • 评论数加权
  • 按时间排序

1.可以利用redis来做,利用sortedSet(优先队列)来存储,后台开启一个线程一直来做这件事。
2.笨方法存到数据库搞

一些有名的公司使用的排名算法

Hacker News

网站内容排名算法

Reddit

网站内容排名算法

*

网站内容排名算法

  • Qviews:问题浏览数,通过log来平滑
  • Qanswer:问题回答数,有回答的题目才是好问题
  • Qscore:问题赞踩差,赞的越多,问题越好
  • sum(Ascores):回答赞踩差,回答的越多问题越好
  • QageInHours:题目发布时间差,时间越久排名越后
  • Qupdated:最新的回答时间,越新关注度越高

IMDB

(WR)=(v÷(v+m))×R+(m÷(v+m))×C
(WR)=(v÷(v+m))×R+(m÷(v+m))×C

  • R = 该电影的投票平均分
  • v = 有效投票人数
  • m = 最低投票人数,1250
  • c = 所有电影的平均值
    投票人数越多,越偏向于用户打分值,防止冷门电影小人数高分导致的高分

TopCoder

每个选手有排名的字段,每次比赛前先算出该比赛的平均排名,如果排名很高,说明这次比赛选手都很厉害,比赛质量也就很高,那么比赛的因子就很高,该因子影响比赛只有的rating。
同时还要根据选手的以往的结果预估选手这次的比赛结果。该预测值决定你的这次rating的波动。可以类比一下LOL的排位赛,存在跳段的想象,因为它参考了你以往的比赛,即使你输了,会参考你以往的表现来决定本次降低的分数。

原文链接:https://blog.csdn.net/dawn_after_dark/article/details/80503407