Visitar URL original
Algorithm/skip_list.md at master · bboychencan/Algorithm · GitHub
Skip to content

Latest commit

 

History

History
33 lines (20 loc) · 1.11 KB

skip_list.md

File metadata and controls

33 lines (20 loc) · 1.11 KB

Skil List 跳表

最近学习系统设计,这个名词多次出现,于是乎研究了一下。 还挺有意思。

这是一种较新的数据结构,1989年William Pugh首次提出,主要用于Redis的内部结构

目标

为了实现有序数据的快速查找和修改。

一般来说,首先会想到红黑树,在保证数据有序的情况同时,能够实现O(logn)的查询和修改。

基本思路

  • 有序数组利用二分法可以在O(logn)完成查找,但是增删数据将要导致整个数组移动
  • 链表可以完成O(1)的时间进行增删,但如果想要查找就需要遍历整个列表O(n)
  • 如何利用链表的特点同时实现快速查找

原理

原理很简单,在有序链表的基础上,依次建立更高一层的数据量减半的链表,这样的话就保证查找元素只需要O(logn)时间既可。 如下,在更新的时候同时要做多处的修改。

1         ->        5         ->       9

|		            |                  |

1    ->   3     ->  5    ->   7   ->   9

|		  |         |         |        |

1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9