lucene代码分析9

跳跃表是一种用于加速顺序查找的数据结构,Lucene广泛使用它来优化性能。该结构由多层组成,每层元素间隔配置可调,查找时通过逐层跳过部分元素快速定位目标。例如,查找元素72时,从高层开始,只需访问3个元素即可找到,大大减少了查找次数。跳跃表的间隔定义和层次计算在不同资料中有不同解释,但Lucene采用了一种特定的定义方式。
摘要由CSDN通过智能技术生成

2021SC@SDUSC
跳跃表规则
(Skip list)
为了提高查找的性能,Lucene 在很多地方采取的跳跃表的数据结构。
跳跃表(Skip List)是如图的一种数据结构,有以下几个基本特征:
元素是按顺序排列的,在 Lucene 中,或是按字典顺序排列,或是按从小到大顺序排列。
跳跃是有间隔的(Interval),也即每次跳跃的元素数,间隔是事先配置好的,如图跳跃表
的间隔为 3。
跳跃表是由层次的(level),每一层的每隔指定间隔的元素构成上一层,如图跳跃表共有
2 层。
需要注意一点的是,在很多数据结构或算法书中都会有跳跃表的描述,原理都是大致相同的,
但是定义稍有差别:
对间隔(Interval)的定义: 如图中,有的认为间隔为 2,即两个上层元素之间的元素数,
不包括两个上层元素;有的认为是 3,即两个上层元素之间的差,包括后面上层元素,
不包括前面的上层元素;有的认为是 4,即除两个上层元素之间的元素外,既包括前面,
也包括后面的上层元素。Lucene 是采取的第二种定义。
对层次(Level)的定义:如图中,有的认为应该包括原链表层,并从 1 开始计数,则总层
次为 3,为 1,2,3 层;有的认为应该包括原链表层,并从 0 计数,为 0,1,2 层;有
的认为不应该包括原链表层,且从 1 开始计数,则为 1,2 层;有的认为不应该包括链
表层,且从 0 开始计数,则为 0,1 层。Lucene 采取的是最后一种定义。
跳跃表比顺序查找,大大提高了查找速度,如查找元素 72,原来要访问 2,3,7,12,23,
37,39,44,50,72 总共 10 个元素,应用跳跃表后,只要首先访问第 1 层的 50,发现 72
大于 50,而第 1 层无下一个节点,然后访问第 2 层的 94,发现 94 大于 72,然后访问原链
表的 72,找到元素,共需要访问 3 个元素即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值