[发明专利]一种多层链接分离的skiplist构造方法及系统在审
申请号: | 201611236173.9 | 申请日: | 2016-12-28 |
公开(公告)号: | CN106649790A | 公开(公告)日: | 2017-05-10 |
发明(设计)人: | 曹强;梅飞;王爽 | 申请(专利权)人: | 华中科技大学 |
主分类号: | G06F17/30 | 分类号: | G06F17/30;H04L12/883 |
代理公司: | 华中科技大学专利中心42201 | 代理人: | 李智 |
地址: | 430074 湖北*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 多层 链接 分离 skiplist 构造 方法 系统 | ||
技术领域
本发明属于计算机存储技术领域,更具体地,涉及一种多层链接分离的skiplist构造方法及系统。
背景技术
跳跃表skiplist是一种随机化的数据结构,基于并联的有序链表,其搜索的时间复杂度为O(logn),n为skiplist中的元素个数。skiplist以其实现简单、快速高效而被广泛应用于键值存储系统或内存数据库系统,如redis、leveldb等。
相比有序单链表,skiplist查找效率随skiplist容量呈对数增长,性能远超过有序单链表的线性扩展性能,虽然典型的树结构,如二叉有序树(Binary Search Tree,BST)亦可达到skiplist的查找、插入效率,但是维持树的平衡需要进行复杂的操作,如平衡二叉树(Balanced Binary Tree,AVL)、红黑树(Red Black Tree,RBT)的插入操作需要定位元素位置、插入元素、以及旋转,其中后续的旋转操作用于保证树的平衡,不至于树的结构退化成有序单链表,由于该操作视插入元素的位置来决定如何调整链接关系导致树的结构的分析以及维持变得非常复杂。
skiplist构造的典型实现包括初始化和插入两个阶段,其中,在skiplist初始化阶段定义skiplist的高度阈值,确定节点高度增长的概率因子p以及构造头节点;在插入阶段,按照特定的方案将元素封装成节点按元素非递减的顺序插入到skiplist,同时保证从底层到顶层各层链表的节点数目按照概率因子p等比递减。
现有的skiplist构造方案主要包括两种,其一,随机构造方案,即每次随机生成节点高度,然后将节点插入链表,由于待插节点的高度及大小在插入之前是随机的,故这种情况会导致构造的skiplist相邻层的节点分布不能严格符合概率比,存在位于高层链表的节点极其稀少,与低层的概率比严重偏离概率因子p的最坏情形,同时无法保证各层链表中节点的跨度均匀;其二,确定性构造方案,每次插入都根据固定算法对整个结构进行重构,从而保证skiplist结构均匀,以及高度和跨度最优化,但是重构需要较长时间而且过程中整个数据结构被锁住,导致并行性能差。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种多层链接分离的skiplist构造方法及系统,将插入操作过程中的多层有序链表链接开销分摊到查找操作过程的各个有序单链表插入链接过程中,相比skiplist的随机构造方案,仅在各层查找中对满足跨度要求的节点增加高度,即将节点链接到比当前节点高度更高一层的链表中,单个元素的链接操作时间开销为O(1),而插入操作只需将元素插入到底层有序单链表中,降低了多层链表间的耦合关系,从而提高skiplist的并发插入性能;此外,相比skiplist的确定性构造方案,插入元素后无需为了完善skiplist而重构整个数据结构,从而避免重构skiplist导致的skiplist不可用的情形发生。由此解决现有skiplist构造方案中,随机构造方案构造的skiplist相邻层的节点分布不能严格符合概率比、无法保证各层链表中节点的跨度均匀以及确定性构造方案需要对整个结构进行重构的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种多层链接分离的skiplist构造方法,包括:
(1)单个元素的查询,其子步骤为:
(1-1)设置当前扫描的层次为skiplist当前的最大高度,初始化计步器值为0,将当前所处的位置记为扫描点,将当前扫描的层次记为扫描层,将当前扫描的单链表记为扫描链;
(1-2)从当前扫描的单链表开始按前进指针的方向扫描,判断待插入的目标元素与扫描点处的元素的大小关系,若扫描点处的元素与目标元素相等,则返回,结束本次单个元素的插入操作,继续下一个元素的插入操作,若扫描点处的元素小于目标元素,则执行步骤(1-3),若扫描点处的元素大于目标元素,则执行步骤(1-4);
(1-3)计步器增加1,并判断计步器中的计数值是否达到预设值,其中,预设值为概率因子p的倒数,若计步器的计数值达到预设值,则将扫描点处的节点高度增加1,即将该扫描点处的节点链接到扫描层的上面一层的链表中,同时计步器置0,扫描点向前移动,若计步器的计数值没有达到预设值,则执行步骤(1-2);
(1-4)判断当前扫描的层次是否为最底层,若是最底层,则返回扫描点的后退一个位置,并记为插入点,若不是最底层,则将扫描点后退一步,扫描层下移一层,从后退之后的扫描点处的节点开始,转至执行步骤(1-2);
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华中科技大学,未经华中科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611236173.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:餐桌(61805)
- 下一篇:床头柜(61805‑1)