SkipList 跳跃表原理详解与实现

SkipList简介

SkipList是一种随机化的数据结构,基于并联的链表,其效率可比拟二叉查找树,对于大多数操作需要O(logn)平均时间。基本上,跳跃表是对有序的链表增加附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表,因此得名。SkipList可以很好解决有序链表查找特定值的困难。

SkipList定义

如上图,SkipList应具备以下特征:

  • 一个跳表应该由几个层(level)组成;
  • 跳表的第一层包含所有元素;
  • 每一层都是一个有序的链表;
  • 如果元素 x 出现在第 i 层,则所有比 i 小的层都包含 x;
  • 第 i 层的元素通过一个 down 指针指向下一层拥有相同值得元素;
  • 在每一层中,-1 和 1 两个元素都出现(分别表示INT_MIN和INT_MAX);
  • top指针指向最高层的第一个元素。

SkipList构造步骤

  1. 给定一个有序的链表;
  2. 选择链表中最大和最小的元素,然后从其他元素中按照一定的算法(随机)随机选出一些元素,将这些元素组成有序链表。这个新的链表成为一层,原链表成为下一层;
  3. 为刚选出的每个元素添加一个指针域,这个指针指向下一层中值同自己相等的元素。Top指针指向该层首元素;
  4. 重复2、3步,直到不再能选择出除最大最小元素以外的元素。

猜你喜欢

转载自www.cnblogs.com/evenleee/p/11294803.html