跳表搜索数据

131 阅读2分钟

「这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战

跳表

概念

增加了向前指针的链表叫作跳表。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能

实现方式

使用多层索引层的方式实现数据的增删改查,采用空间换时间的做法,提升链表检索数据的的性能;检索数据时,首先检索顶层索引层数据,逐渐缩小检索范围,直到返回数值或null查找不到的结果。

示例

  • 搜索117

image.png

  • 若是原始链表的形态时,比较步骤则是:-1->7->14->21->32->37->71->85->117,总共需要比较9次找到数据。

  • 若采用跳表的形态时,比较步骤则是:-1->21->37->37->71->85->117,总共需要比较7次找到数据。

  • 所以若是增加更多层级则会进一步减少比较次数,提高效率。

注意事项:

  • 在添加数据时,为了避免数据添加过多时,两个节点之间的数据量逐渐增大,导致跳表退化为单链表的形态。

  • 我们往跳表中插入数据的时候,我们可以选择同时将这个数据插入到部分索引层中。如何选择加入哪些索引层呢?我们通过一个随机函数,来决定将这个结点插入到哪几级索引中,比如随机函数生成了值 K,那我们就将这个结点添加到第一级到第 K 级这 K 级索引中。