美文网首页
数据结构和各自的复杂度

数据结构和各自的复杂度

作者: Frankkkkk | 来源:发表于2020-02-09 11:35 被阅读0次

一、动态数组

情景:在n个动态的整数中搜索某个整数
1、从0个位置开始遍历搜索,平均时间复杂度O(n)
2、如果维护一个有序的动态数组,使用二分搜索,最坏时间复杂度:O(logn);但是添加、删除的平均时间复杂度是O(n)
3、set和get在index位置的元素时,复杂度为O(1)
明显的缺点:可能会造成内存空间的大量浪费,能否用到多少就申请多少内存?

二、链表

链表可以解决:数组的内存空间浪费的问题。
add、remove:复杂度都是O(n)
set(int index, E element)、get(int index, E element):复杂度也是O(n)
双向链表比单向链表的优势:以删除操作为例,几乎节省了一半的操作

数组和链表的复杂度比较

三、二叉搜索树BST

复杂度O(h)跟树的高度(h)有关,
最好的情况是:搜索、添加、删除都是O(h)==O(logn)
最坏的情况是:退化成链表,复杂度都是O(n)。

四、AVL树

添加:

  • 可能会导致所有祖先节点都失衡
  • 只要让高度最低的失衡节点恢复平衡,整棵树就恢复平衡【仅需O(1)次调整】。

删除:

  • 只可能导致父节点失衡
  • 让父节点恢复平衡后,可能导致更高层的祖先节点失衡【最多需O(logn)次调整】

平均时间复杂度:

  • 搜索:O(logn)
  • 添加:O(logn),仅需O(1)次旋转操作
  • 删除:O(logn),最多需要O(logn)次旋转操作

与BST树对比,AVL树的性能从O(n)降到了O(logn)级别,大大提高了效率

五、红黑树

平均时间复杂度:

  • 搜索:O(logn)
  • 添加:O(logn),仅需O(1)次旋转操作
  • 删除:O(logn),仅需O(1)次旋转操作

与AVL树对比,红黑树的性能主要体现在删除上,删除后旋转次数是O(1)级别的

相关文章

  • 数据结构和各自的复杂度

    一、动态数组 情景:在n个动态的整数中搜索某个整数1、从0个位置开始遍历搜索,平均时间复杂度O(n)2、如果维护一...

  • 《恋上数据结构与算法一》笔记(二十)总结

    目录 复杂度 线性数据结构 树形数据结构 线性+树形数据结构 一 复杂度 时间复杂度 空间复杂度 二 线性数据结构...

  • 算法复杂度

    数据结构: 数组、链表、栈、队列、二叉树、hash表、图。 空间复杂度和时间复杂度的算法 空间复杂度和时间复杂度 ...

  • 数据结构(一)时间复杂度

    简介:如果想对数据结构和算法有基本的了解和认识,那么算法复杂度是前提,算法复杂度包含时间复杂度和空间复杂度,具体概...

  • 数据结构与算法之线性表

    前言 上一篇《数据结构和算法之时间复杂度和空间复杂度》中介绍了时间复杂度的概念和常见的时间复杂度,并分别举例子进行...

  • 数据结构与算法 复杂度分析

    复杂度:时间复杂度和空间复杂度。复杂度的分析是学习数据结构与算法的基础! 极简概述 复杂度的分析已经有很多很好...

  • Python-100天(二)-Python语言进阶

    数据结构和算法 算法:解决问题的方法和步骤 评价算法的好坏:渐近时间复杂度和渐近空间复杂度。 渐近时间复杂度的大O...

  • 数据结构01-时间复杂度与空间复杂度

    1:算法复杂度 1.1:数据结构和算法定义 数据结构(data structure):用来存放和管理(比如插入,删...

  • Python语言进阶

    Python语言进阶 数据结构和算法 算法:解决问题的方法和步骤 评价算法的好坏:渐近时间复杂度和渐近空间复杂度。...

  • 算法复杂度分析

    复杂度分析: 数据结构和算法解决的两大问题:快和省。运行快,储存省。 复杂度分析是算法学习的精髓:时间复杂度,空间...

网友评论

      本文标题:数据结构和各自的复杂度

      本文链接:https://www.haomeiwen.com/subject/jqjixhtx.html