3.13.7. SkipList
Skiplists are data structures that use probabilistic balancing rather than strictly enforced balancing. As a result, the algorithms for insertion and deletion in skip lists are much simpler and significantly faster than equivalent algorithms for balanced trees. Skiplists are more amenable to concurrent access/modification. The most frequently used implementation of a binary search tree is a red-black tree. The concurrent problems come in when the tree is modified it often needs to rebalance. The rebalance operation can affect large portions of the tree, which would require a mutex lock on many of the tree nodes. Inserting a node into a skip list is far more localized, only nodes directly linked to the affected node need to be locked.
SkipList is widely used in LevelDB, Redis and Lucence. I fixed a bug in Redis’s SkipList implementation and improved the performance by 10%.
- Problem Statement 
 
Figure 3.13.3 Forward linked list with O(N) for search, insert, and delete
- Intuition 
Figure 3.13.4 Idea of skiplist by adding more layers but skipping some nodes
It is easy to understand the idea behind skiplist.
- Search with O(LogN) 
Figure 3.13.5 Search node 37 in skiplist
- Insert with O(LogN) 
Figure 3.13.6 Insert 9 and 30 into the skiplist