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步,直到不再能选择出除最大最小元素以外的元素。

 

转载于:https://www.cnblogs.com/evenleee/p/11294803.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值