【 学习笔记】数组、链表、跳表的基本实现和特性

数组,链表,跳表的基本实现和特性

  1. 数组(Array)
    list = [ ]
操作 复杂度
prehead O(1)
append O(1)
lookup O(1)
insert O(n)
delete O(n)
pop ( ) O(1)
pop( i ) O(n)

P.S:

  • lookup 指的是 随机访问数组里面的一个元素
  • 正常情况下数组的prehead的时间复杂度是 O(1),但是可以优化到 O(1),采取的是申请稍大的内存空间,预留一部分给数组的开头
  1. 链表(linked list)
    分类:
  • 单链表
  • 双向链表(Double linked list)
  • 循环链表
操作 复杂度
prehead O(1)
append O(1)
lookup O(n)
insert O(1)
delete O(1)

P.S: LRUCache 里面采用了 Linked List的数据结构
3. 跳表(skip list)
P.S:

  • 跳表适合于链表里的元素有序的情况
  • 跳表是一种插入\删除\搜索的时间复杂度都是 O(logn)的数据结构
    【 学习笔记】数组、链表、跳表的基本实现和特性_第1张图片

为了提高链表线性查找的效率,采用了升维的办法,用空间换时间的办法,以此类推,增加多级索引

【 学习笔记】数组、链表、跳表的基本实现和特性_第2张图片
P.S:Skip List 在 Redis 里面的应用
总之,跳表中查询任意数据的时间复杂度就是 O(logn),空间复杂度为 O(n)

算法优化的办法:

  • 升维
  • 空间换时间

你可能感兴趣的:(笔记)