数据结构精解(1):引言及时间复杂度和空间复杂度

导读:
本系列是完全面对考研的,所以是详略得当的原则,当然,重要的必然会详细,数据结构作为计算机课程中一门极其重要的课程,无论是理论还是实践都是很重要的,也希望大家在看文章的同时多多进行针对性刷题。打牢基础,攻坚拔地。

既然决定了考研,那便朝着这个方向,努力前进吧!

本系统会持续更新,并且在每篇文章的末尾会进行一定的题型训练,主要是针对leetcode网站的。(一篇easy+一篇middle)

一起加油吧!

只有向自己提出伟大理想,并以自己全部的力量为之奋斗的人,才是最幸福的。——加里宁

什么是数据结构?
数据结构是计算机存储、组织数据的方式,是指数据元素的集合以及数据元素之间存在的一-种或者多种关系的集合,元素之间的关系包括数据的逻辑结构、数据的存储结构和数据的运算结构

数据 是信息的载体,是可以被计算机识别存储并加工处理的描述客观事物的信息符号的总称。数据元素 是数据的基本单位,在计算机程序中通常作为一个整体考虑。一个数据元素由若干个 数据项 组成。数据项是数据结构中讨论的最小单位。有两类数据元素:如果数据元素不能再分,则称为 原子项;如果数据元素由若干个数据项组成,则称为 组合项。

按照存储方式的不同,数据结构可以分为顺序存储结构和链式存储结构:

  • 顺序存储结构,表示数据元素在存储器中是连续存储的,可以用相对位置来表示数据元素之间的逻辑结构,如顺序表、队列、栈等。
  • 链式存储结构,每个数据元素里设置了一个指针用来指向另一个元素的存储地址,以此来表示数据元素之间的逻辑结构。

按照逻辑结构来分,数据结构可以分为线性结构和非线性结构

  • 如果数据元素之间存在一对一的关系,则称为线性结构,否则称为非线性结构。集合结构、树形结构、图形结构都称为非线性结构。

算法(Algorithm)是对某一个或者某一类问题的解决方案的描述,根据问题的输入,在有限的计算时间里输出预期的结果。不同的算法解决问题所需的时间和空间可能会不同,通常用时间复杂度和空间复杂度来评估算法的优劣

算法有以下 55 个特征:

  • 有穷性。算法必须在执行有限个操作后终止。
  • 确切性。算法的每一个操作必须有明确的定义。
  • 输入项。算法有零个或多个输入,描述算法的初始状态。
  • 输出项。算法有一个或多个输出,没有输出的算法我们认为是没有意义的。
  • 可行性。算法的每个计算操作都可以在有限时间内完成。

时间复杂度
时间频度是指算法中语句的执行次数,用 T(n)T(n) 来表示,nn 为问题的规模。有些时候,时间频度的表达方法有点复杂,我们需要更直观的表达方法,于是引入了时间复杂度的概念。如果有一个辅助函数 f(n),在 n 趋向于无穷大时,T(n)/f(n)的极限值为不等于 0 的常数,则我们近似的将 f(n)替代 T(n)T(n),记为 T(n) =O(f(n)),称为算法的渐进时间复杂度。

时间复杂度只关心算法中最耗时的部分,舍去常数部分,通常用简单的函数来表示

常数阶对数阶线性阶线性对数阶平方阶立方阶指数阶阶乘阶
O(1)O(logn)O(n)O(nlogn)O(n^2 )O(n^3 )O(2^n )O(n!)

举个例子来描述下算法时间复杂度的计算过程吧。现有如下代码,可以计算出语句 1 执行了 n^2次,语句 2 执行了 n 次,语句 3 执行了 nlogn 次,则 T(n) = n^2 + n + log nT(n)=n^2 +n+logn取其中最耗时部分,并用熟悉的函数表示,则时间复杂度为O(n^2)。

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        a++; //1
    }
}
for (int i = 0; i < n; i++) {
    b++; //2
}
while (n) {
    n = n / 2; //3
}

关于logn,由于n每次在除以2之后都会更加逼近0,也就是说,在有x次后,cnt将会小于0从而跳出循环,所以2^-1=0, 也就是x=log2n,所以这个循环的复杂度为O(logn)

空间复杂度:是指运行该算法所占用的存储空间大小,记为 S(n)S(n),和时间复杂度类似,通常也是取它的渐进空间复杂度,用一个直观的函数来表示。通过空间复杂度,我们可以预估出算法运行所需的存储空间,包括指令空间、数据空间、动态申请的内存空间等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值