《Go 并发数据结构和算法实践》学习笔记 Day 2

文章介绍了Skiplist的基本概念、接口,包括查找、插入和删除操作,并探讨了如何进行并发改造,特别是并发查找和并发删除,以提升性能。Skiplist作为一种概率性数据结构,提供了近似O(logN)的查找复杂度,是链表查找的优化方案。文章还对比了Skiplist与其他查找数据结构如数组和平衡二叉树的差异。

系列文章目录

这是本周期内系列打卡文章的所有文章的目录



前言

提示:这里可以添加本文要记录的大概内容:


提示:以下是本篇文章正文内容,下面案例可供参考

一、Skiplist是什么?(What)

Skiplist 出现自1989年,由美国计算机科学家 William Pugh 发明的,最早出现在他 1990 年发表的论文《Skip Lists: A Probabilistic Alternative to Balanced Trees》1,俗称“跳表”。典型使用:用来加速链表的查找。复杂度介于常见的查找数据结构:数组、平衡树。

跳表名字的由来,指除了最下层原始链表外,它会产生多层冗余、稀疏的链表。

可以看极客时间视频介绍2快速入门。
在这里插入图片描述
跳表是在已有链表的结构上,增加上层索引节点链表,不改变原有的数据结构。在查找场景,数据量很大的情况下,上层链表查找能够跳过大量节点,极大加快查找速度。上述过程类似二分查找,时间复杂度可以降低到O(lnN) (复杂度经过时间证明)。

我们遇到某种业务场景,先是get到功能:如查找。然后就要往经典数据结构上套,能否改造现有数据结构。

Skiplist的基本接口

Skiplist的基本接口,原始文献中已经列出,后续文献有所补充3。我们先从简单的开始:

  • search,
  • insertion,
  • deletion

查找元素

步骤:

插入元素

Skiplist的插入(或者说Skiplist的构造),采用随机层数插入。插入节点,不需要对其他节点的层数进行调整,使得Skiplist的插入性能大大优于传统的平衡二叉树。

步骤:

删除元素

步骤:

二、并行化改造

1.并发查找

2.并发删除


总结

提示:这里对文章进行总结:

跳表对比其他查找数据结构:

对比项跳表数组平衡二叉树
插入特点
查找
查找时间复杂度

参考


  1. William Pugh, Skip Lists: A Probabilistic Alternative to Balanced Trees, Proceedings of the Workshop on Algorithms and Data Structures, Ottawa Canada, August 1989 (to appear in Comm. ACM). ↩︎

  2. 一文带你熟悉跳表 ↩︎

  3. A Skip List Cookbook ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值