美文网首页
【算法打卡60天】Day36跳表:为什么Redis一定要用跳表来

【算法打卡60天】Day36跳表:为什么Redis一定要用跳表来

作者: 花生无翼 | 来源:发表于2020-05-28 13:51 被阅读0次

Day36
学习内容 :跳表:为什么Redis一定要用跳表来实现有序集合?
跳表是一种动态数据结构,实现灵活,可以通过改变索引构建策略,有效平衡执行效率和内存消耗、提高查询效率。
1.如何理解“跳表”?
跳表:链表加多级索引的结构。
跳表使用空间换时间的设计思路,通过构建多级索引来提高查询的效率,实现了基于链表的“二分查找”。

2.用跳表查询到底有多快?
跳表是一种动态数据结构,支持快速的插入、删除、查找操作,时间复杂度都是 O(logn)。

理解公式推导过程:

第 k 级索引的结点个数是第 k-1 级索引的结点个数的 1/2,那第 k级索引结点的个数就是 n/(2k)。
假设索引有 h 级,最高级的索引有 2 个结点。通过上面的公式,我们可以得到 n/(2h)=2,从而求得 h=log2n-1。

3.跳表是不是很浪费内存?
看是否浪费内存,看空间复杂度。
比起单纯的单链表,跳表需要存储多级索引,肯定要消耗更多的存储空间。
跳表的空间复杂度是 O(n)。不过,跳表的实现非常灵活,可以通过改变索引构建策略,有效平衡执行效率和内存消耗。

4.如何高效的动态插入和删除?
跳表这个动态数据结构,不仅支持查找操作,还支持动态的插入、删除操作,而且插入、删除操作的时间复杂度也是 O(logn)。

5.跳表索引如何动态更新?
跳表是通过随机函数来维护前面提到的“平衡性”。
我们通过一个随机函数,来决定将这个结点插入到哪几级索引中,比如随机函数生成了值 K,那我们就将这个结点添加到第一级到第 K 级这 K 级索引中。

最好自己代码再实现一遍“跳表”,加深理解。
本文参考【极客时间】专栏《数据结构与算法之美》

相关文章

网友评论

      本文标题:【算法打卡60天】Day36跳表:为什么Redis一定要用跳表来

      本文链接:https://www.haomeiwen.com/subject/eszoahtx.html