海量用户积分排名算法
用户网站,用户拥有积分,积分可能会在使用过程中随时更新,设计一种算法,在用户登录时显示其当前基本排名,积分为非负整数,且小于100万。
海量用户积分排名算法:
1. 利用数据库,创建表结构为用户ID和积分的表,用SQL查询得到排名。优点是简单,利用SQL功能,无需复杂查询逻辑,不引入额外的存储结构。缺点也明显,每次全表扫描,如果积分更新的锁定会影响查询效率。
2.均匀分区设计。将数据库分成几张表,表结构是from_score, to_score, count。优点避免全表扫描。缺点:积分非均匀分布使得性能提升不理想
3. 树形分区设计。采用分级分区:一级分区:分成两个区间;二级分区:把一级区间分成多个子区间。以此类推,直到叶子节点。这就成为了一个平衡二叉树结构。每次更新用户积分,则更新此排名树。每次更新是log n级别。缺点是算法相对复杂。
4. 积分排名数组:用户积分从s变成s+n,积分小于s的和大于s+n的都没有变化,区间[s,s+n)内的用户排名下降一位。用数组表示所有用户积分的排名。查询的复杂度为O(1),更新排名的复杂度是O(n)。优点是算法简单,在积分变化不大的情况下非常高效。缺点是当n比较大时,需要更新大量的元素,效率不如树形分区。
from《码农.算法》
海量用户积分排名算法相关推荐
- 海量用户积分排名算法探讨
作者 / 魏大刚 @weidagang 问题 某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新.现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名.用户最大规模为2亿:积分为非 ...
- 满多少算积分 java_海量用户积分排名算法探讨
戳上面的蓝字关注我们哦! 本文作者:Todd Wei 欢迎点击下方阅读原文 问题 某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新.现在要为该网站设计一种算法,在每次用户登录时显示其当前积 ...
- (转)海量用户积分排名算法探讨
原文地址:http://www.uml.org.cn/sjjm/201207161.asp 问题 某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新.现在要为该网站设计一种算法,在每次用户登 ...
- [转]海量用户积分排名算法探讨
原文链接:http://www.189works.com/article-64931-1.html 问 题 某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新.现在要为该网站设计一种算法, ...
- 海量数据 网站中用户积分排名问题
海量数据 & 网站中用户积分排名问题 转自:http://www.cnblogs.com/weidagang2046/archive/2012/03/01/massive-user-ranki ...
- 热度TopN排名算法的设计
热度TopN排名算法的设计 转载于 http://www.jianshu.com/p/44bee121463a 最近开始在简书上混,今日在首页上不经意间看到一篇<从豆瓣电影评分算法说起>, ...
- 用户积分和积分排行榜功能微服务实现
文章目录 需求分析 什么是积分 积分的获取 为啥需要积分服务 数据库表 创建 ms-points 积分微服务 新增用户积分功能 用户积分实体 积分控制层 积分业务逻辑层 数据交互mapper层 网关 ...
- 基于用户投票的排名算法(四):牛顿冷却定律
作者: 阮一峰 日期: 2012年3月16日 这个系列的前三篇,介绍了Hacker News,Reddit和Stack Overflow的排名算法. 今天,讨论一个更一般的数学模型. 这个系列的每篇文 ...
- 基于用户投票的排名算法(三):Stack Overflow
作者: 阮一峰 日期: 2012年3月11日 上一篇文章,我介绍了Reddit的排名算法. 它的特点是,用户可以投赞成票,也可以投反对票.也就是说,除了时间因素以外,只要考虑两个变量就够了. 但是,还 ...
最新文章
- Call From hadoop102/192.168.121.102 to hadoop102:9000 failed on connection exception
- Silverlight教程第三部分:使用 Networking取回数据并填充DataGrid
- java相同数组拼接_java遍历数组并重新拼接数组里的元素
- 使用JavaScript实现页面选项自动添加行以及删除行 javaweb
- Eigen官网教程(2) Array类和元素级操作
- ROS学习笔记5(理解ROS节点)
- 高达大战分晓!日本机器人先赢后输,遭电锯切割惨惨惨 | 附高清完整视频
- CSAPP : Arch Lab 解题报告
- 五伤四损 - 万全《养生四要》
- Opengl ES之矩阵变换
- APP分享微信小程序
- notify和notifyAll区别
- 关于蓝牙开发,必须注意的广播
- 办公自动化系统OA学习要点
- PentestBOX教程
- 百度人脸产品套件开箱体验-壁虎开机初体验
- JLINK SW接线方式
- [附源码]计算机毕业设计JAVA全国人口普查管理系统论文
- C语言结构体指针数组小结
- 轻量级实时语义分割:ENet ERFNet