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 个元素即可。
lucene代码分析9
最新推荐文章于 2023-12-08 16:06:51 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)