跳跃表
2017-02-20 11:40
141 查看
1、跳跃表
结构模型(双向链表)
L1:某些数据的链表;(相当于快车)
L2:底层所有数据的链表;(相当于慢车)
L1和L2中键值相同的元素用链表连接起来
2、理想跳跃表
跳跃表的这种数据结构就是二分查找(用链表模拟数组),差不多就是一颗二叉树,但是有太多的重复元素;查找的时间复杂度为:O(logn);
3、跳跃表的插入和删除
保证左上角一直有元素存在,在开始的时候,先放一个负无穷的数字(保证每一层的开始都是这个负无穷的数字);目的:防止很大的数字被提升之后的情况;
(1)插入元素x(构建跳跃表的方法) ---->要随机的选择它能跑多高
i、先查找x,在底层链表中的位置;
该新元素是否向上一层链表提升呢?抛硬币算法,正面的话(50%),向上提升一层,然后在继续抛硬币,正面继续提升,继续抛硬币,直到反面出现为止;
(2)、删除元素
找到最底层该元素后,逐一向上删除即可;
(3)、跳跃表数据结构分析:
动态的搜索结构,随机化的数据结构;
每一个操作的运行时间都是:O(logn);
结构模型(双向链表)
L1:某些数据的链表;(相当于快车)
L2:底层所有数据的链表;(相当于慢车)
L1和L2中键值相同的元素用链表连接起来
2、理想跳跃表
跳跃表的这种数据结构就是二分查找(用链表模拟数组),差不多就是一颗二叉树,但是有太多的重复元素;查找的时间复杂度为:O(logn);
3、跳跃表的插入和删除
保证左上角一直有元素存在,在开始的时候,先放一个负无穷的数字(保证每一层的开始都是这个负无穷的数字);目的:防止很大的数字被提升之后的情况;
(1)插入元素x(构建跳跃表的方法) ---->要随机的选择它能跑多高
i、先查找x,在底层链表中的位置;
该新元素是否向上一层链表提升呢?抛硬币算法,正面的话(50%),向上提升一层,然后在继续抛硬币,正面继续提升,继续抛硬币,直到反面出现为止;
(2)、删除元素
找到最底层该元素后,逐一向上删除即可;
(3)、跳跃表数据结构分析:
动态的搜索结构,随机化的数据结构;
每一个操作的运行时间都是:O(logn);
相关文章推荐
- [转帖]修复identity 类型字段数据的跳跃
- 零打碎敲学Android(四)—跳跃的火之意志!
- 精灵跳跃练习
- Android_手把手教你写跳跃类游戏(2)
- 【最短路】星门跳跃
- 跳跃回溯____寻找最长平台
- 斯坦福飞鱼滑翔装置完胜跳跃机器人
- CSS3实现的闪烁跳跃进度条~附源码
- 浅析SkipList跳跃表原理及代码实现
- 跳跃链表
- 使用CocosBuilder制作一个跳跃小游戏
- Box2D C++ 跳跃
- 跳跃表以及C++实现
- 跳跃表skiplist简析
- cocos2dx update跳跃函数
- LintCode-跳跃游戏
- 跳跃表(Skip List)的实现及测试 C++实现
- 跳跃表基础——POJ 3481 Double Queue
- 跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题
- 浅析SkipList跳跃表原理及代码