什么是数据结构
程序 = 数据结构 + 算法
算法是求解问题的步骤
算法的特性
有穷性
必须要在固定的步骤内解决问题,死循环不算作算法
确定性
可行性
必须要能够通过计算机代码实现,同时还需要具有输入和输出
输入取自于某个特定的对象的集合
输出是与输入相关联的量
算法好不好?
正确性
一个算法应当可以正确的解决问题
可读性
健壮性
对于非法数据可以做出反应
高效率与低存储需求
低时间复杂度&空间复杂度
时间复杂度
O用来表示数量级,我们在考虑时间表达式的时候只考虑最高项
两个时间复杂度相加,我们只保留最高的一项
两个时间复杂度相乘,结果就是相乘
O ( 1 ) < O ( l o g 2 n ) < O ( n ) < O ( n l o g 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1)<O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n) O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
真正影响时间复杂度的量级由循环结构体决定
对于数组,要考虑最优情况的时间复杂度和最坏情况的时间复杂度
空间复杂度
内存需求包括:代码本身占用的空间,使用的数据
用S表示空间复杂度,当为S(1)时,被称为原地工作
空间复杂度主要由变量所决定,同时也只取最高阶
特殊情况:递归
每一层所占用的数据内存*递归次数
空间复杂度=变量阶数(如一维数组)*递归次数,同时数据长度可能也会改变