什么是跳跃表?

跳跃表(Skip List)是一种可以替代平衡树的数据结构。在它的简单形式中,跳跃表和链表是一致的,只不过在跳跃表中,链表的每个节点可能有多个指向其后继的指针,这样可以实现快速查找等操作。跳跃表最主要的特点是它的查找,插入,删除操作的时间复杂度都是O(logn)。

基本思想:
假设我们有一个有序链表,我们想要查找一个元素,需要从头开始,一步一步的查找,这种情况下查找的时间复杂度是O(n)。

现在,我们对链表做一些增强,我们抽取出部分数据在上一级创建一个新的链表,上级链表的元素个数是下级链表的1/2,同理,我们再在上级链表的基础上抽取出数据在更高级别创建链表,这样就构成了多级索引。

level3:  ---------------63
level2:  ----31---------63
level1:  ----31----47---63
level0:  15--31--47--63

如上,我们有一个包含4个元素{15,31,47,63}的链表,我们在这个链表的基础上创建了三个更高级别的链表,最高级别的链表只包含一个元素。这样构成的数据结构就是跳跃表。

现在,如果我们想要查找47,我们可以从最高级别的链表开始,63>47,所以我们到第二级别的链表查找,31<47,再向右走,到达63,63>47,所以我们进入下一级链表,47就在这里。在跳跃表中,47这样的查找就是logn的复杂度。

跳跃表不仅能提供较快的查找速度,而且插入和删除元素也相对简单,主要是调整索引,改变指针的指向即可。因此,跳跃表在很多场景下,例如Redis的Sorted Set,都有被广泛应用。

PS:如果要详细了解,建议自己找文章看

发表评论

后才能评论