网站内容热点排序算法

通用排序


  1. 单位时间内的交互数,
  2. 总交互数,总点赞数
  3. 评论数加权
  4. 按时间排序

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

例子

Hacker News

Score=(P1)÷(T+2)G S c o r e = ( P − 1 ) ÷ ( T + 2 ) G

- P;投票数,-1是把自己过滤掉
- T:发布时间间隔,单位小时,+2防止除数太小
- G:重力加速度,分值根据时间降低速率。

Reddit

t=AB t = A − B

t为时间差,即当前时间与某一个时间之间的差值。
$$
x = U - D

z =

{|x|,1,if |x| \geq 1if x < 0 { | x | , if |x| \geq 1 1 , if x < 0

y =

1,0,1,if x > 0if x = 0if x < 0 { 1 , if x > 0 0 , if x = 0 − 1 , if x < 0

$$

x为帖子的赞与踩之差

f(t,y,z)=logz10+yt45000 f ( t , y , z ) = l o g 10 z + y t 45000

StackOverflow


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

IMDB

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

- R = 该电影的投票平均分
- v = 有效投票人数
- m = 最低投票人数,1250
- c = 所有电影的平均值

投票人数越多,越偏向于用户打分值,防止冷门电影小人数高分导致的高分

TopCoder

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

来源

来自牛客网学习资料。

你可能感兴趣的:(Java,Web)