redis 数据结构 - 跳跃表

1、redis 跳跃表是什么

跳表(Skiplist)是一个特殊的链表,相比一般的链表,有更高的查找效率,可比拟二叉查找树,平均期望的查找、插入、删除时间复杂度O(logn)。

数据结构均采用跳表这种数据结构:

  • Redis中的有序集合zset

时间和空间分析

最坏场景:当每个元素的Tower的高度都是h的时候,查找、插入、删除的性能最差,为O(n+h), n为跳表的元素数目,h为跳表的高度。

空间占用:O(n)

跳表结构描述

 

 

跳跃表实际是一个有层数概念的双向链表。有头结点、尾结点、记录长度和层数。

头结点是傀儡结点,用来指向下一个结点。尾结点是指向跳跃表中最大分数的结点,层数是跳跃表中的最高层数。

 

跳表是基于链表的,在链表的基础上加了多层索引结构。在Redis的有序集合中就使用了跳表。

跳表是多层链表,最底层的链表包含所有的数据。越往上层,链表的结点越稀疏。但是,高层的结点一定包含在底层结点中。

跳表上层的元素来自最底层,是以随机函数来决定。随机函数0、1;当随机函数为1,代表该元素需要拷贝一份到上层节点。每一层级的概率的平均期望是 1/2,这个期望也是随机函数决定。

1.1 下面是一个跳表的示例

需要特别指出的是:针对数据中的每个节点,它应该创建几层的结构,是算法随机决定的。平均而言,1/2 个元素有两个索引, 1/4 个元素有三个索引,以此类推。

 

1.2 跳表的查询过程

1.3 跳表的插入

 

1.4 跳表的删除

 

1.5 跳表的结构体

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值