数据结构第一章-绪论——主要谈时间复杂度和空间复杂度
目录
前言
学习的路径是参考王道的408考研全家桶,参考笔记《王道》数据结构笔记整理2022
1、数据结构第一章-绪论
1.1 数据结构的基本概念
1.1.1 基本概念和术语
略
1.1.2 数据结构三要素
数据的逻辑结构:数据元素之间的逻辑关系,即从逻辑关系上描述数据。
数据的存储结构:数据结构在计算机中的表示(又称映像),也称物理结构。
数据的运算:施加在数据上的运算包括运算的定义何实现。
1.2 算法和算法评价
1.2.1 算法的基本概念
程序=数据结构+算法
时间复杂度和空间复杂度,鱼和熊掌不可兼得。
1.2.2 算法效率的度量(重要)————“鱼和熊掌不可兼得”
1.2.2.1 时间复杂度
为什么要用时间复杂度描述,而不是用代码运行时间描述?
每台机器由于性能等各方面不一样,代码运行时间是不一样的,这样子就很难比较算法的好坏了,所以引入了时间复杂度的概念。
时间复杂度满足以下规则:
一些例子:
判断方法:有嵌套语句时,看最内层的语句执行次数规律就行
参考:https://zhuanlan.zhihu.com/p/50479555
常见的时间复杂度量级 | 时间复杂度 | 例子 | 时间复杂度比较 | 说明 |
---|---|---|---|---|
常数阶 | $$O(1)$$ | int i = 1; int j = 2; ++i; j++; int m = i + j; |
最小 | 无论代码执行了多少万行,只要是没有循环等复杂结构,正确的表示方法是,这个代码的时间复杂度就都是$$O(1)$$ |
对数阶 | $$O(log_2n)$$ | int i = 1; while(i<n) {i = i * 2;}; |
\(\wedge\) | 从1开始,每次都将 i 乘以 2第一次i=1*2=2^1,那么那么乘了x次就是循环了x次, $$这个时候i=2^x,令其=n,则x=log_2n$$了 |
线性阶 | $$O(n)$$ | for(i=1; i<=n; ++i) {里面默认常数阶} |
\(\wedge\) | for循环里面的代码会执行n遍,因此它消耗的时间是随着n的变化而变化的 |
线性对数阶 | $$O(nlog_2n)$$ | for(i=1; i<=n; ++i) { int i = 1; while(i<n) {i = i * 2;} }; |
\(\wedge\) | 其实就是线性阶和对数阶的嵌套 |
平方阶 | $$O(n^2)$$ | for(i=1; i<=n; ++i) { for(i=1; i<=n; ++i) {里面默认常数阶} } |
\(\wedge\) | 显然,是线性阶嵌套吧,嵌套层数是2层 |
立方阶 | $$O(n^3)$$ | 按照平方阶的思维去理解 | \(\wedge\) | 按照平方阶的思维去理解,立方阶显然是线性阶嵌套了3层的意思 |
指数阶 | $$O(2^n)$$ | int aFunc(int n) { if (n <= 1) return 1; else return aFunc(n - 1) + aFunc(n - 2); } |
\(\wedge\) | 斐波那契数列解法之一,通过归纳证明法可以证明 |
n的阶乘阶 | $$O(n!)$$ | def factorial(n):{ for i in range(n): factorial(n-1)} |
\(\wedge\) | 比n的n次方阶区别是嵌套的迭代次数慢慢减1了 |
n的n次方阶 | $$O(n^n)$$ | 按照平方阶的思维去理解 | \(\wedge\) | 按照平方阶的思维去理解,n的n次方阶显然是线性阶嵌套了n层的意思 |
1.2.2.2 空间复杂度
相比于时间复杂度,空间复杂度一般讨论得不是这么多。
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,我们用 S(n) 来定义。
空间复杂度比较常用的有:O(1)、O(n)、O(n²)。
参考知乎https://zhuanlan.zhihu.com/p/50479555
算法空间复杂度为一个常量,可表示为 O(1)
例如:
int i = 1;
int j = 2;
++i;
j++;
int m = i + j;
代码中的 i、j、m 所分配的空间都不随着处理数据量变化,因此它的空间复杂度 S(n) = O(1)
空间复杂度 O(n)
int[] m = new int[n]
for(i=1; i<=n; ++i)
{
j = i;
j++;
}
第一行new了一个数组出来,这个数据占用的大小为n,这段代码的2-6行,虽然有循环,但没有再分配新的空间,因此,这段代码的空间复杂度主要看第一行即可,即 S(n) = O(n)
本文来自博客园,作者:JaxonYe,转载请注明原文链接:https://www.cnblogs.com/yechangxin/articles/16480131.html
侵权必究