skiplist
2024-10-18 13:45:32
§1 Skip List 介绍
Skip List是一种随机化的数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间)。基本上,
跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表(因此得 名)。
所有操作都以对数随机化的时间进行。Skip List可以很好解决有序链表查找特定值的困难。
§2 Skip List 定义以及构造步骤
Skip List定义
像下面这样(初中物理经常这样用,这里我也盗用下):
一个跳表,应该具有以下特征:
- 一个跳表应该有几个层(level)组成;
- 跳表的第一层包含所有的元素;
- 每一层都是一个有序的链表;
- 如果元素x出现在第i层,则所有比i小的层都包含x;
- 第i层的元素通过一个down指针指向下一层拥有相同值的元素;
- 在每一层中,-1和1两个元素都出现(分别表示INT_MIN和INT_MAX);
- Top指针指向最高层的第一个元素。
构建有序链表
的一个跳跃表如下:
Skip List构造步骤:
1、给定一个有序的链表。
2、选择连表中最大和最小的元素,然后从其他元素中按照一定算法(随机)随即选出一些元素,将这些元素组成有序链表。
这个新的链表称为一层,原链表称为其下一层。
3、为刚选出的每个元素添加一个指针域,这个指针指向下一层中值同自己相等的元素。Top指针指向该层首元素
4、重复2、3步,直到不再能选择出除最大最小元素以外的元素。
最新文章
- PHP两个文件的相对路径
- 基于webpack使用ES6新特性(转载)
- Mac下用brew安装nginx
- node.js整理 03文件操作-遍历目录和文本编码
- 使用Eclipse创建maven项目
- gem install 出现Errno::ECONNRESET: Connection reset by peer - SSL_connect (https://api.rubygems.org
- virtual修饰符
- Xen、Openvz、KVM有什么区别?
- ***常见复杂SQL语句(含统计类SQL)
- Thread和Runnable差别
- 利用dokan作虚拟磁盘开发
- 在Intellij IDEA中使用Debug
- MySQL-压缩版-windows安装
- Android LK Bootlaoder启动概览
- Java中ArrayList学习笔记
- 看完此文还不懂NB-IoT,你就过来掐死我吧...【转】
- .net core2 单元测试
- 10分钟开发 GPS 应用,了解一下
- 后门技术(HOOK篇)之DT_RPATH
- Mybatis自动生成xml文件、dao接口、实体类