Zset的实现---跳表(待完成)

使用跳跃列表的原因

Redis中的Zset其实就是一种可排序的,无重复的链表结构,对于Redis这种效率至上的数据库,当然不能容忍时间复杂度过高这种事情的发生。因为Zset可能会进行频繁的增删改查以及排序的工作,数组的低速添加删除自然无法满足需求,所以要使用链表结构,但是Zset的需求是有序,所以在插入元素的时候,要找到对应的位置,可是如果遍历链表的话,时间复杂度过大,二分查找是一种不错的解决方案,但是二分查找只能通过数组索引快速定位来实现,而我们之前的需求只能通过列表来实现,正是因为有这些矛盾,所以我们只能采取一种改良的链表,即跳跃列表。

跳跃列表的构成

跳跃列表是一种类似层级制的链表形式,比如说一个大公司,公司里分为很多的部门,部门又分为很多的团队,团队里又分为很多的小组,小组还分为不同的小队,在这些各个区域都有属于这个地方的主管,你先来公司问公司的老大,我应该去哪,他告诉你你应该去A部门,然后你又去找A部门的老大问,我应该去哪,他告诉你应该去B团队,你又找到B团队的老大问,我应该去哪,B团队的老大告诉你去C小组,你又去找C小组的老大,他告诉你去D队,经过这么几步,你就可以从一个好几万人的大公司,找到了属于你的位置,跳表的结构也是如此。找到对应位置的关键自然是主管了,所以跳表也有主管,不同层级有不同的主管,以便新来的元素插入到该插入的位置之中,随着元素的不断增加,主管人员当然也会不断的增多,首先每一个元素都是最底层的元素,兼职到倒数第二层的概率为50%,倒数第三层的概率为25%,层级越高概率越小,就像是工作晋升一样,一万个人只能有一个是总裁,但是可能有1000个是小组组长,通过这种策略,可以极大的提高元素插入的速度,寻找的速度也会提高。

跳跃列表的结构模型

跳跃列表的实现

跳跃列表的实现----------------------------------(以后再说)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容