§1 Skip List 介绍

Skip List是一种随机化的数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间)。基本上,

跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表(因此得 名)。

所有操作都以对数随机化的时间进行。Skip List可以很好解决有序链表查找特定值的困难。

§2 Skip List 定义以及构造步骤

Skip List定义

像下面这样(初中物理经常这样用,这里我也盗用下):

一个跳表,应该具有以下特征:

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

构建有序链表

的一个跳跃表如下: 

Skip List构造步骤:

       1、给定一个有序的链表。

2、选择连表中最大和最小的元素,然后从其他元素中按照一定算法(随机)随即选出一些元素,将这些元素组成有序链表。

这个新的链表称为一层,原链表称为其下一层。
3、为刚选出的每个元素添加一个指针域,这个指针指向下一层中值同自己相等的元素。Top指针指向该层首元素
4、重复2、3步,直到不再能选择出除最大最小元素以外的元素。

最新文章

  1. PHP两个文件的相对路径
  2. 基于webpack使用ES6新特性(转载)
  3. Mac下用brew安装nginx
  4. node.js整理 03文件操作-遍历目录和文本编码
  5. 使用Eclipse创建maven项目
  6. gem install 出现Errno::ECONNRESET: Connection reset by peer - SSL_connect (https://api.rubygems.org
  7. virtual修饰符
  8. Xen、Openvz、KVM有什么区别?
  9. ***常见复杂SQL语句(含统计类SQL)
  10. Thread和Runnable差别
  11. 利用dokan作虚拟磁盘开发
  12. 在Intellij IDEA中使用Debug
  13. MySQL-压缩版-windows安装
  14. Android LK Bootlaoder启动概览
  15. Java中ArrayList学习笔记
  16. 看完此文还不懂NB-IoT,你就过来掐死我吧...【转】
  17. .net core2 单元测试
  18. 10分钟开发 GPS 应用,了解一下
  19. 后门技术(HOOK篇)之DT_RPATH
  20. Mybatis自动生成xml文件、dao接口、实体类

热门文章

  1. UIImagePickerController 获取相片视频
  2. 黑马程序员——【Java基础】——正则表达式
  3. django允许跨域备忘笔记
  4. vim使用过程
  5. Python::OS 模块 -- 文件和目录操作
  6. java中的transient关键词
  7. Java配置环境变量
  8. Word 2013发布博客配置步骤
  9. [原创]cocos2d-x研习录-第一阶 背景介绍 之 cocos2d-x特点
  10. ES pom配置