海量用户积分排名算法
2017-09-27 09:47
357 查看
用户网站,用户拥有积分,积分可能会在使用过程中随时更新,设计一种算法,在用户登录时显示其当前基本排名,积分为非负整数,且小于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《码农.算法》
海量用户积分排名算法:
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《码农.算法》
相关文章推荐
- 海量用户积分排名算法探讨
- 海量用户积分排名算法探讨
- 海量用户积分排名算法探讨
- 海量用户积分排名算法探讨【转载】
- 海量用户积分排名算法探讨
- 面试经之海量用户积分排名算法探讨
- 【转】海量用户积分排名算法探讨
- 海量用户积分排名算法探讨
- 海量用户积分排名算法探讨
- 【转】海量用户积分排名算法探讨
- 海量用户积分排名算法探讨
- 海量用户积分排名算法探讨(zz)
- 某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新。现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名。用户最大规模为2亿;积分为非负整数,且小于100万。
- 海量用户积分排名算法探讨
- <转>海量数据-海量用户 积分 排名
- 用户积分排名算法
- 关于《海量用户积分算法探讨》的读后总结和扩展
- 基于用户投票的排名算法(五):威尔逊区间
- 基于用户投票的排名算法(六):贝叶斯平均
- (转)基于用户投票的排名算法(一):Delicious和Hacker News