Jeremy Hylton : weblog : 2003-10-13 |
Monday, October 13, 2003, 8:21 p.m.
Patrick Logan posted a link to Bill Pugh's Skip List Cookbook. I think they're great data structures, too.
A skip list is a probabilistic alternative to balanced tree. In its most basic form, it is easy to implement. The list contains nodes with a value and varying numbers of forward links; the number of links determines the size. The nodes are in sorted order and each node of size n has links to the next nodes of size 1 through n.
Practical implementations of skip lists can get more complicated. Josh MacDonald and Ben Zhao did a nice comparison of skiplists and b+-trees for a class project. They implemented a deterministic variant of the skip list (see J. Ian Munro, Thomas Papadakis, and Robert Sedgewick. Deterministic skip lists. In Proceedings of the third annual ACM-SIAM Symposium on Discrete Algorithms (SODA), 1992) and found the performance competitive and the implementation simpler.
The Chord algorithm for doing lookups in a peer-to-peer distributed hash table has some high-level similarities to a skip list. The problem is to locate a node in the network given a key. The nodes are arranged in a ring, and each node maintains a finger table that points to other nodes at various distances around the ring (increasing powers of two). The finger table is a bit like the table of forward pointers in a skip list, although each node in a Chord rind has the same number of forward pointers.
James Aspnes and Gauri Shah presented a paper at SODA '03 on skip graphs. I haven't read it yet, but it sounds interesting. A skip graph extend the distributed hash table algorithm with operations based on the ordering of the keys. Apparently a similar data structure is used in SkipNet.