Java数据结构-00导论
一个程序是怎样组成的呢?数据结构+算法=程序
一、什么是数据结构:
简单定义就是研究数据的存储方式;选择适当的数据结构可以提高计算机程序的运行效率(时间复杂度O)和存储效率(空间复杂度S)。
二、数据结构的分类
数据结构分类大致可以按照逻辑结构(抽象)跟物理结构(存储结构)

三、时间复杂度与空间复杂度
1.时间复杂度:
①概念:执行算法需要消耗的时间长短,越快越好。比如你在电脑上打开计算器,如果一个普通的运算要消耗1分钟时间,那谁还会用它呢,还不如自己口算呢。
②常见时间复杂度
A.

线性阶O(n)

分析:第1行会执行1次,第2行和第3行会分别执行n次,总的执行时间也就是 2n + 1 次,那它的时间复杂度表示是 O(2n + 1) 吗?不是的,还是那句话:“大O符号表示法并不是用于来真实代表算法的执行时间的,它是用来表示代码执行时间的增长变化趋势的”。所以它的时间复杂度其实是O(n);
C对数阶O(logN)

分析:可以看到每次循环的时候 i 都会乘2(2^i=n),那么总共循环的次数就是log2n,因此这个代码的时间复杂度简写为O(logn)
D.线性对数阶O(nlogN)

分析:同上面描述,在while里面的时间复杂度为O(logn),for里面的时间复杂度为O(n),所以就有O(nO(logn)),简写为O(nlogn)
平方阶O(n²)

分析:同样的,在for里面的时间复杂度为O(n),所以就有O(nO(n)),简写为 O(n²)。立方阶O(n³)、K次方阶O(n^k)参考上面的O(n²) 去理解就好了,O(n³)相当于三层n循环,其它的类似
F.算法时间复杂度的比较(从小到大):
![]()
2.空间复杂度:
①概念:执行当前算法需要消耗的存储空间大小,也是越少越好。本来计算机的存储资源就是有限的,如果你的算法总是需要耗费很大的存储空间,这样也会给机器带来很大的负担。
②常见空间复杂度
A.空间复杂度 O(1)

分析:如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1),代码中的 i、j、m 所分配的空间都不随着处理数据量变化,因此它的空间复杂度 S(n) = O(1)。
B.空间复杂度 O(n)

分析:这段代码中,第一行new了一个数组出来,这个数据占用的大小为n,后面虽然有循环,但没有再分配新的空间,因此,这段代码的空间复杂度主要看第一行即可,即 S(n) = O(n)。

浙公网安备 33010602011771号