前言
前两天看system design的东西,突然就看到了跳表skip list,然后我就不是很懂了,这次咱们把它搞清楚,确实是非常好理解的东西。
链表是啥
List大家肯定都很熟悉,但是List的查找操作其实是很僵硬的,对吧?O(n)的复杂度没跑了。
如何解决链表痛点
这就是为啥咱们要用跳表了。跳表其实在很多数据库的线性结构中都在使用,比如大名鼎鼎的redis(我对redis的了解就很肤浅)。各位试想,如果我能事先把这个List的某一些关键节点给他拎出来,在做查询操作的时候能先按照这个上层的关键节点链表先查询,然后再根据范围匹配,进入下一层进行细致查询,不就能跳过很多没用的范围了嘛!两层不够的话你还可以搞多层啊!
上面这张图描述的是跳表的结构,这里我引用了《小灰-算法漫画?》的图,侵删。
那么如何提取高层的索引呢?其实很简单,就搞个随机,每个节点都有概率被提升上去。具体的插入删除操作,咱们代码实现。