听到跳表(skiplist)这个名字,既然是list,那么应该跟链表有关。
跳表是有序链表,但是我们知道,即使对于排过序的链表,我们对于查找还是需要进行通过链表的指针进行遍历的,时间复杂度很高依然是O(n),这个显然是不能接受的。是否可以像数组那样,通过二分法进行查找呢,但是由于在内存中的存储的不确定性,不能这做。
但是我们可以结合二分法的思想,没错,跳表就是链表与二分法的结合。
1.链表从头节点到尾节点都是有序的
2.可以进行跳跃查找(形如二分法),降低时间复杂度
一个有序的链表,我们选取它的一半的节点用来建索引,这样如果插入一个节点,我们比较的次数就减少了一半。这种做法,虽然增加了50%的空间,但是性能提高了一倍。如上图。
既然,我们已经提取了一层节点索引,那么,可以在第一层索引上再提取索引。如下图。(二级索引应去掉node2节点)