算法通关村第零关|数据结构,时、空复杂度

目录

时间复杂度和空间复杂度问题

1. 时间复杂度

1.1. 几种常见的阶

2. 空间复杂度

😋前置知识:

  • 数据结构类型:

  1. 集合结构:集合结构中的元素除了属于同一个集合外,它们直接没有任何关系。

  1. 线性结构
    1. 线性结构中的数据元素是一对一的关系,相互之间只与上一个和下一个连在一起
    2. 数据结构是所有元素一次靠在一起,中间不能有空位
    3. 链表结构,要求每隔元素只要再保存下一个元素的位置即可

    1. 线性表经过一些特殊的约束可以形成多种结构
      1. 只允许一头插入删除就是栈
      2. 只允许一头插入一头输出就是队列,队列这种数据结构可以有多种不同的限制条件和形式。在Java编程语言中,有大量工具类用于处理不同类型的队列。这些不同形式和限制条件的队列统称为访问受限的线性结构。
      3. 特殊结构 Hash,Hash本身是用数组存储,但是访问却不是线性的。
  1. 树形结构
    1. 树形结构中的元素存在单向一对多的层次关系
    2. 特点:
      1. 开始元素唯一,终端元素不唯一
      2. 除终端元素以外,每个元素有一个或多个后续元素
      3. 除开始元素外,每个元素有且仅有一个个前驱元素

  • 树的拓展类型:堆、平衡树、红黑树、哈夫曼树等。算法中常考察二叉树【简洁好些】,实际开发中更多使用N层的结构。jdk等本身提供了大量的工具类来辅助我们工作
  1. 图形结构:图形结构的数据元素是多对多的关系

时间复杂度和空间复杂度问题

1. 时间复杂度

  • 时间复杂度:用语句的只能怪次数,而不是实际的时间
  • 系数和参数简化:O()激发
  • 阶耗费时间的关系:
1.1. 几种常见的阶
  1. 常数阶:一般顺序执行并且只执行一次的代码就是常数阶,例如: sum=(1+n)*n/2
  2. 线性阶:表示执行的次数随着问题规模是线性变化的,例如:

  1. 平方阶:主要是双层循环嵌套

  1. 对数阶:后面要学习的二分查找,二叉树等问题经常会看到O(logn)
  • 其本质可以简化成如下模型

上面代码执行次数与n的关系正好是:

2*x = n,也就是x = logn

  • 所以说,二分查找不过是每循环一次都是减半,所以todo的执行次数是logn次
  • 注意:处理时间复杂度,即为代码体与循环结束条件之间的关系

2. 空间复杂度

  • 空间复杂度即需要申请多少额度外的空间来做现在的事情
  • 例如:申请一个或者两三个变量,那么空间复杂度就是O(1);如果需要申请一个数组,链表,队列,栈,或者Hash,其空间复杂度都是O(n);如果申请一个二维数组就是O(n*2).其他的极少用

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值