• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > redis的zslRandomLevel函数的实现原理是什么?

redis的zslRandomLevel函数的实现原理是什么?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了redis 函数,redis实现原理,redis原理,redis集群原理,redis缓存原理等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:redis的zslRandomLevel函数的实现原理是什么?
描述:

hi,all

最近在看redis的代码(huangz注释过的),是2.6版本的。在看到t_zset.c这个文件的时候,了解到跳跃表的概念,大概原理是懂的,但是不太了解这个生成随机层数的算法原理。不知道有没童鞋能介绍下这段代码其实是怎么做到模拟幂次定律的?


/* Returns a random level for the new skiplist node we are going to create. * The return value of this function is between 1 and ZSKIPLIST_MAXLEVEL * (both inclusive), with a powerlaw-alike distribution where higher * levels are less likely to be returned. * * 返回一个介于 1 和 ZSKIPLIST_MAXLEVEL 之间的随机值,作为节点的层数。 * * 根据幂次定律(power law),数值越大,函数生成它的几率就越小 * * T = O(N) */ int zslRandomLevel(void) { int level = 1; // TODO 了解这个公式背后的数学原理 while ((random()&0xFFFF) < (ZSKIPLIST_P * 0xFFFF)) level += 1; return (level<ZSKIPLIST_MAXLEVEL) ? level : ZSKIPLIST_MAXLEVEL; }

解决方案1:

http://blog.csdn.net/kisimple/article/details/38706729
这个解释的比较清晰,也可以去参考skiplist论文。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • redis的zslRandomLevel函数的实现原理是什么?

相关文章

  • 2017-06-07 ruby有没有去除图片的白边技巧?
  • 2017-06-07 植物大战僵尸修改器怎么使用使用链栈时类型提示错误
  • 2017-06-07 (VFP)SQL表中的nchar类型字段是空白时,为什么字段中显示小方框?
  • 2017-06-07 未载入sso模块Pythonmo模块导入问题
  • 2017-06-07 图片迁移工具qrsync迁移本地图片到七牛的服务器那使用qrsync迁移图片是要收费的吧?
  • 2017-06-07 怎么批量导出外链
  • 2017-06-07 关于QPaintDevice的问题
  • 2017-06-07 (ruby)gitlab托管,gitclone失败?
  • 2017-06-07 python解释器import和脚本的执行影响了结果
  • 2017-06-07 如何快速深入学习web开发?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • (python)豆瓣的pypi是如何更新里面package的?
    • 绑定域名后导致403
    • (laravel)phpartisanmigrate表已经存在时怎么办?
    • 用什么软件代替VFP
    • mac上用homebrew安装完mysql后,怎样使用密码连接数据库
    • (python)Scrapy如何输出中文的item类名称?
    • 建议每个任务创建一个QNUploadManager么?
    • 在flask中,怎样在blueprint中调用配置文件中的参数?
    • glDrawPixels函数在vc++下内存泄露
    • flask能在win7系统上部署吗?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有