Skip Lists in Data Structure

In a skip list, one can finger search for element a from a node containing the element b by simply continuing the search from this point a.

Note that if a < b, then search proceeds at backward direction, and if a > b, then search proceeds at forward direction.

The backwards case is symmetric to normal search in a skip list, but the forward case is actually more complicated.

Normally, search in a skip list is expected to be fast because the sentinel at the start of the list is considered as the tallest node.

However, our finger could be associated with a node of height 1. Because of this, we may rarely climb while trying to search; something which never occurs normally.

The most important properties of skip lists are that they need expected linear space, include of expected O(log n) levels, support searches in expected O(log n) time, and support insertions and deletions at a given position in expected O(1) time.

It has been elaborated on the various properties and extensions of skip lists, including pseudo-code for how skip lists support finger searches in expected O(log d) time. To facilitate backward finger searches, a finger to a node V is stored as an expected O(log n) space finger data structure that for each level i stores a pointer to the node to the left of V where the level i pointer either points to V or a node to the right of V. Moving a finger needs this list of pointers to be updated correspondingly.

A backward finger search is accomplished by first identifying the lowest node in the finger data structure that is to the left of the search key y, where the nodes in the finger data structure are considered in order of increasing levels.

Thereafter the search proceeds downward from the identified node similar in a standard skip list search.