您当前所在位置: > 爆料站 > 大家都爱看

游戏内排行榜算法设计与技术实现比较

时间:2020-05-08 16:34:59  来源:  作者:网络

20140122061511357500.jpg

  以前在音乐做过一些实时投票,积分排名;单曲、专辑等排行榜;游戏中也有类似的战斗力排行;SNS的游戏又有好友排行等,对于此类的排行算法在此做个总结。

  需求背景:

  查看前top N的排名用户

  查看自己的排名

  用户积分变更后,排名及时更新

  方案一:

  利用MySQL来实现,存放一张用户积分表user_score,结构如下:

787808d6c74d4f029de40ee225064f6a.001.jpg

  取前top N,自己的排名都可以通过简单的sql语句搞定。

  算法简单,利用sql的功能,不需要其他复杂逻辑,对于数据量比较少、性能要求不高,可以使用。但是对于海量数据,性能是无法接受的。

  方案二:积分排名数组实现

  如有1百万用户进行排名,就用一个大小为1,000,000的数组表示积分和排名的对应关系,其中rank[s]表示积分s所对应的排名。初始化时,rank数组可以由user_score表在O(n)的复杂度内计算而来。用户排名的查询和更新基于这个数组来进行。查询积分s所对应的排名直接返回rank[s]即可,复杂度为O(1);当用户积分从s变为s+n,只需要把rank[s]到rank[s+n-1]这n个元素的值增加1即可,复杂度为O(n)。

  方案三:用GCC的pb_ds库中有assoc_container来进行实现。

  参考如下:tree_order_statistics.cc

  存取效率都可以达到O(log(n)),不足就是程序重启后数据会丢失。

  方案四:自己实现排序树

  大致实现思路如下:

  我们可以把[0, 1,000,000)作为一级区间;再把一级区间分为两个2级区间[0, 500,000), [500,000, 1,000,000),然后把二级区间二分为4个3级区间[0, 250,000), [250,000, 500,000), [500,000, 750,000), [750,000, 1,000,000),依此类推,最终我们会得到1,000,000个21级区间[0,1), [1,2) … [999,999, 1,000,000)。这实际上是把区间组织成了一种平衡二叉树结构,根结点代表一级区间,每个非叶子结点有两个子结点,左子结点代表低分区间,右子结点代表高分区间。树形分区结构需要在更新时保持一种不变量,非叶子结点的count值总是等于其左右子结点的count值之和。

  以后,每次用户积分有变化所需要更新的区间数量和积分变化量有关系,积分变化越小更新的区间层次越低。总体上,每次所需要更新的区间数量是用户积分变量的log(n)级别的,也就是说如果用户积分一次变化在百万级,更新区间的数量在二十这个级别。在这种树形分区积分表的辅助下查询积分为s的用户排名,实际上是一个在区间树上由上至下、由粗到细一步步明确s所在位置的过程。比如,对于积分499,000,我们用一个初值为0的排名变量来做累加;首先,它属于1级区间的左子树[0, 500,000),那么该用户排名应该在右子树[500,000, 1,000,000)的用户数count之后,我们把该count值累加到该用户排名变量,进入下一级区间;其次,它属于3级区间的[250,000, 500,000),这是2级区间的右子树,所以不用累加count到排名变量,直接进入下一级区间;再次,它属于4级区间的…;直到最后我们把用户积分精确定位在21级区间[499,000, 499,001),整个累加过程完成,得出排名!

  虽然,本算法的更新和查询都涉及到若干个操作,但如果我们为区间的from_score和to_score建立索引,这些操作都是基于键的查询和更新,不会产生表扫描,因此效率更高。另外,本算法并不依赖于关系数据模型和SQL运算,可以轻易地改造为NoSQL等其他存储方式,而基于键的操作也很容易引入缓存机制进一步优化性能。进一步,我们可以估算一下树形区间的数目大约为2,000,000,考虑每个结点的大小,整个结构只占用几十M空间。所以,我们完全可以在内存建立区间树结构,并通过user_score表在O(n)的时间内初始化区间树,然后排名的查询和更新操作都可以在内存进行。一般来讲,同样的算法,从数据库到内存算法的性能提升常常可以达到10^5以上;因此,本算法可以达到非常高的性能。

  算法特点

  优点:结构稳定,不受积分分布影响;每次查询或更新的复杂度为积分最大值的O(log(n))级别,且与用户规模无关,可以应对海量规模;不依赖于SQL,容易改造为NoSQL或内存数据结构。

  缺点:算法相对更复杂。

  方案五:skiplist的实现

  实现方案四的时候,发现代码比较复杂,调试起来特别不方便。游戏这边有个同事也实现了个,代码地址:http://km.oa.com/articles/show/158740

  于是就想到的跳表,发现用这个实现起来比较简单;用hashmap来存储具体的对象;用skiplist用来排序。也可以简单的用一个map和set来实现。Map内面存具体对象,set用来排序。

  关于skip list这里简单介绍下:skip list是链表的一种特殊形式,对链表的一种优化;保证INSERT和REMOVE操作是O(logn),而通用链表的复杂度为O(n);

  优点:实现较简单,效率基本上O(log(N))

  缺点:当达到亿级别时的数据时,性能会急剧下降

  方案六:基于redis的 sort set的实现

  后来看redis发现redis的zset天生是用来做排行榜的、好友列表, 去重, 历史记录等业务需求。接口使用非常简单。接口非常丰富,基本上需要的实现都能满足,说明如下:

  ZAdd/ZRem是O(log(N)),ZRangeByScore/ZRemRangeByScore是O(log(N)+M),N是Set大小,M是结果/操作元素的个数。

  ZSET的实现用到了两个数据结构:hash table 和 skip list(跳跃表),其中hash table是具体使用redis中的dict来实现的,主要是为了保证查询效率为O(1) ,而skip list(跳跃表)主要是保证元素有序并能够保证INSERT和REMOVE操作是O(logn)的复杂度。

  音乐现在的通用投票排名系统就是基于redis来实现的,运行还不错。

  优点:基于redis开发,速度快;使用redis相关特性

  缺点:当达到亿级别时的数据时,性能会急剧下降

  来实现排行榜的方法很多,可以根据自己的具体需求,参考选用。

相关下载

玩家评论

「微信朋友圈」信息流可能采用算法排序吗?

原标题:「微信朋友圈」信息流可能采用算法排序吗? 目前,微信朋友圈采用的是时间流的方式展现朋友圈内容,那就有人问了,为什么微信朋友圈不采用推荐算详情>>

阅读: 1
日期: 2020-05-06
借助AI算法为RTX电脑实现主动降噪NVIDIA发布音频工具

N卡网速快、A卡音质好?NVIDIA偏偏不信这个邪。 日前,NVIDIA 发布RTX Voice软件 ,专门为配置了RTX显卡(GeForce、Quadro)的电脑提供主动的背景降噪支持。这个降噪可不是减低显详情>>

阅读: 8
日期: 2020-04-19
中科视拓开放商业版本人脸识别算法SeetaFace6

原标题:中科视拓开放商业版本人脸识别算法SeetaFace 6 3月31日,中科视拓宣布开放SeetaFace6人脸识别算法。 在2016年9月和2019年8月,中科视拓分别开详情>>

阅读: 1
日期: 2020-04-01
谁花钱谁排名高?谷歌被指人为干预搜索算法以增加广告客户曝光

原标题:谁花钱谁排名高?谷歌被指人为干预搜索算法 以增加广告客户曝光 搜索引擎提供的结果到底有几分可信度?近日,一向号称“不作恶”的谷歌受到外媒详情>>

阅读: 1
日期: 2020-03-20
怀旧服G团被小学数学引出的争议:0.5个人究竟应该怎么算?_算法

原标题:怀旧服G团被小学数学引出的争议:0.5个人究竟应该怎么算? G团已经在国服怀旧服流行了很长一段时间了,恐怕很多玩家都想不到,现在竟然还会因为分G详情>>

阅读: 12
日期: 2020-02-07
美团的商业算法|十年复盘EP03

原标题:美团的商业算法 | 十年复盘 EP03 今天这篇是前沿思考论坛系列内容的第三篇,要说的是有关「美团」的复盘。 在科技行业有点冷的这一年里,美团详情>>

阅读: 10
日期: 2019-12-24
2020,AI算法市场能火起来吗?

原标题:2020,AI算法市场能火起来吗? 图片来源@视觉中国 文 | 脑极体 2019的存量只剩一个多月,各种年度总结即将蜂拥而至。 回头看看这一年的AI发详情>>

阅读: 4
日期: 2019-11-27
从传真接投诉到算法自动巡检 技术推动全球知产保护模式变革

原标题:从传真接投诉到算法自动巡检 技术推动全球知产保护模式变革 11月24日,互联网法律大会在杭州召开,包括知识产权法官、知名教授、律师在内的数详情>>

阅读: 7
日期: 2019-11-25
7papers|QuocV.Le、何恺明等新论文;用进化算法设计炉石_XGBoost

原标题:7 papers | Quoc V. Le、何恺明等新论文;用进化算法设计炉石 机器之心整理 参与:杜伟、一鸣 本周较为重要的研究有 Quoc V. Le 和何恺明各详情>>

阅读: 12
日期: 2019-11-17
DNF:“E式”算法对比,全身红20驱魔,组队才能超越红10剑帝!

剑帝经过改版加强后,伤害如“坐火箭”般提升,一度碾压其他的职业。不过,要说最惨的莫过于是驱魔,非但没有加强,反而削弱了一丢丢。在国服都加强的环境下详情>>

阅读: 11
日期: 2019-11-13
看不见的非正义:算法决策真的公平吗?

原标题:看不见的非正义:算法决策真的公平吗? 作者:腾讯研究院、中国信通院互联网法律研究中心、腾讯AI Lab、腾讯开放平台 全文3700余字,读完约需7分详情>>

阅读: 7
日期: 2019-11-12
百度细雨算法2.0正式上线

原标题:百度细雨算法2.0正式上线 最近,百度搜索针对近期B2B领域出现的伤害搜索用户体验的违规低质内容,即将对细雨算法升级,上线细雨算法2.0,重点针对B详情>>

阅读: 7
日期: 2019-11-08
MySQL和PostgreSQL在多表连接算法上的差异

原标题:MySQL和PostgreSQL在多表连接算法上的差异 文章来源:数据架构之美 我们知道mysql没有hash join,也没有merge join,所以在连接的时候只有一种算详情>>

阅读: 9
日期: 2019-11-07
流量学习+算法推荐丨VideoX邀您共话休闲游戏变现新技能_市场

原标题:流量学习+算法推荐丨VideoX邀您共话休闲游戏变现新技能 文字丨Thomas 390字,约需5分钟阅读时长 2019年全球游戏市场增量明显。第一季度全球详情>>

阅读: 8
日期: 2019-11-02
算法知识汇总:构成/学派/算法

原标题:算法知识汇总:构成/学派/算法 如果你是产品经理,希望了解算法的基本知识,可以考虑阅读本文。 01 概述 机器学习(Machine Learning,ML)就是通详情>>

阅读: 6
日期: 2019-10-16
一种算法:获取网络日志以发现错误的根本原因(附论文)

原标题:一种算法:获取网络日志以发现错误的根本原因(附论文) 几位研究人员通过分析AT&T网络数据中的数百万条错误消息,开发出了一种算法,有望帮助运营商详情>>

阅读: 3
日期: 2019-08-31
谷歌开发实时手指跟踪算法

  VR之家消息:谷歌发布了一种开源算法,可以在移动硬件上执行实时21点手指跟踪。该系统是Google MediaPipe的一部分,MediaPipe是一种基于机器学习的解决方案的模块化框架,如人详情>>

阅读: 9
日期: 2019-08-23
新算法可在VR中实现更逼真的声音效果

  VR之家消息:虚拟现实可以说是可以以假乱真的视觉体验了,那么如果想要有更逼真的效果,那么声音也是不能马虎的。为了使VR听起来更逼真,工程师必须创建大量的声音模型计算机化详情>>

阅读: 36
日期: 2019-08-05
算法界上演“猫鼠游戏”连续剧_攻击

原标题:算法界上演“猫鼠游戏”连续剧 图片来自网络今日视点 医疗手术、无人驾驶、围棋对弈、随手可用的翻译……近十年来,人工智能(AI)详情>>

阅读: 13
日期: 2019-07-03
算法,计算机,这是哪本书

Game234问答中心有网友提出了一个比较有代表性的问题【算法,计算机,这是哪本书】,【算法,计算机,这是哪本书】具体问题如下:我知道这可能有点难,,,展开小编觉得可能对其他网友也有帮助,所以将此问答详情>>

阅读: 0
日期: 2019-04-14
Facebook Instant Games运营必备:如何根据算法规则优

游戏排名,是FacebookInstantGames用来确保新游戏拥有玩家的工具之一,以此帮助所有的开发者。本文将为您介绍,游戏排名的工作原理,以便您进详情>>

阅读: 0
日期: 2018-12-09
Facebook Instant Games运营必备:如何根据算法规则优化游戏排名

游戏排名,是FacebookInstantGames用来确保新游戏拥有玩家的工具之一,以此帮助所有的开发者。本文将为您介绍,游戏排名的工作原理,以便您进详情>>

阅读: 10
日期: 2018-12-07
《守望先锋》天梯积分算法曝光 第二赛季定级算法公布

守望先锋第二赛季已经开启,那么新的定级赛即将开启,那么定级赛的分是怎么算的呢?一起跟着蚕豆网小编来看看吧 详情>>

阅读: 4
日期: 2018-11-25
价格歧视?算法时代的一场“猫鼠游戏”

原标题:价格歧视?算法时代的一场“猫鼠游戏”算法时代,大数据杀熟受到越来越多诟病与争议,但从经济学角度来看价格歧视,有着更深层次的分析框架与维度,甚至颠覆我们的常详情>>

阅读: 15
日期: 2018-11-20
MD5加密算法在网站数据库安全方面的应用与查表攻击

(4) 我曾见过几个破解MD5加密的网站(http://www.cmd5.com/),大多数的做法是先免费为用户暴力破解,积累起足够的数据库可以破解简单密码后,解密服务便开始收费,... 详情>>

阅读: 5
日期: 2018-10-20
Oculus Quest仍存在追踪局限,Facebook欲通过算法弥补

原标题:Facebook承认OculusQuest追踪局限,希望通过算法弥补在今年的OC5上,Oculus公开了新头显OculusQuest,一款支持头部和手柄6DoF追踪的中端VR产品,其使用详情>>

阅读: 11
日期: 2018-09-29
Klaus爆笑一分钟:另类算法

Klaus爆笑一分钟:另类算法详情>>

阅读: 2
日期: 2018-09-11
御龙在天-砸星算法分析 砸星技巧详解

小编为您搜罗的答案:  御龙在天手游砸星是一件赌运气的玩法,很多玩家就会问真的一点技巧都没有吗?也不全是,接下来小编就和大家分享砸星方面的一些技巧心得!一起来看看吧!详情>>

阅读: 9
日期: 2018-09-09
炉石传说 你知道圣光面积的四种算法吗?

炉石传说 你知道圣光面积的四种算法吗?详情>>

阅读: 2
日期: 2018-09-05
ML 工程师需要了解的一些基本算法

回归算法RegressionAlgorithms回归算法最初来自于统计学,是一种通过最小化预测值与实际结果值之间的差距,而得到输入特征之间的最佳组合方式的一类算法。常见的回归算法有:最小二乘回归详情>>

阅读: 0
日期: 2018-09-01
算法总结之四插入排序

直接插入排序是一种最简单的插入排序。插入排序:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,知道全部插入完成。在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程。先拿一详情>>

阅读: 3
日期: 2018-08-26
在RSA加密算法中 d*11=1 mod 8怎么得到d=3

小编为您搜罗的答案:1、RSA是基于这个原理实现的,但貌似求mol运算本身和RSA没关系吧求逆运算2、d*11=d*3(mol8),然后从0试到7,发现当d=3时3*3=9=1(mol8),具体是没有详情>>

阅读: 5
日期: 2018-08-23
搜索引擎给予网站排名的基础算法分析

我们如何将优化工作扎实的开展下来,可能除了本身优化工作之外,我们还要在细节上对于优化进行分析和布局,下面笔者详细和大家分享一下, 搜索引擎给予网站排名的基础算法... 详情>>

阅读: 3
日期: 2018-08-23
如何matlab编程仿真LMS算法的自适应陷波器,并画出幅频曲线陷波的频率值

小编为您搜罗的答案:%LMS算法演示(matlab)%设置参数,N为采样个数,u为步长clear,clc;N=16;u=0.1;%设置迭代次数kk=250;%pha为随机噪声的平均功率rk=randn详情>>

阅读: 7
日期: 2018-08-23
关于D-H算法基本原理

小编为您搜罗的答案:DH组的本质是使用非对称密钥来加密对称密钥。DH算法过程:1、相互产生密钥对2、交换公钥3、用对方的公钥和自己的私钥运行DH算法——得到另外一个密钥X(这里的奇妙之处是这个值两端都详情>>

阅读: 4
日期: 2018-08-21
关于百度对友情链接买卖打击算法猜想

最近这几个月,互联网上最令站长们揪心的事情就是百度的算法更新了,而百度算法更新主要是为了处理低质量的站点和友情链接的买卖。笔者不是什么牛人,只是从百度的... 详情>>

阅读: 9
日期: 2018-08-12
你真正懂搜索引擎算法吗?

什么是搜索引擎算法搜索引擎算法是指获得网站网页资料,建立数据库并提供查询的系统,都可以把它叫做搜索引擎。搜索引擎的数据库是依靠一个叫“网络机器人(crawlers)”或叫“网络蜘蛛(Spider)”详情>>

阅读: 3
日期: 2018-08-06
提升3D扫描速度 MIT新算法可快1000倍

如今,人工智能使用机器学习平台,在语音技术、语言技术、知识计算、大数据分析等领域建立了领先的核心技术体系,这些技术共同构成了大数据分析核心中最完整的人工智能技术图谱。前不久,在麻省理工学院的研究小组详情>>

阅读: 14
日期: 2018-08-04
算法交锋终极一战,2018 腾讯广告算法大赛完美收官

7月30日,2018腾讯广告算法大赛在深圳落下帷幕。全国十强战队展开精彩对决,经过成果展示和现场答辩,最终,"葛文强"队以综合优势赢得大赛冠军和"人气战队奖"双料奖项,获30详情>>

阅读: 12
日期: 2018-08-02
MD5算法如何被破解

小明:老师,上次您讲了MD5算法。用它生成的信息摘要,真的可以被破解吗?老师:有很多种方法可以破解,不过需要明确一点,这里所谓的破解,并非把摘要详情>>

阅读: 17
日期: 2018-07-29
精彩推荐