数据结构学习笔记(一) 基本概念与分析算法
解决问题方法的效率与什么有关:
数据组织方式(书架放书)
空间的利用率有关(递归与非递归)
解决问题所用的算法
什么是算法:数据对象必定与一系列加在其上的操作相关联,而完成这些操作所用的方法就是算法。
算法的特性:
一个有限指令集(有穷性)
有时候有一些输入,可能没有 (输入)
产生输出(输出)
一定步骤后停止(有穷性)
每一条指令需要具备的条件:
有充分明确的目标,不可以有歧义。(确定性)
计算机能处理的范围内。
描述不依赖与任何一种计算机语言以及具体的是实现手段。
算法的评估:
空间复杂度S(n):根据算法写成的程序在执行时占用存储单元的长度(太大,程序中断)
时间复杂度T(n):根据算法写成的程序在执行时耗费时间的长度。(等不到结果;算乘除法的次数或者选取一种对于研究的问题来说是基本操作的原操作,加减法忽略不计)
为什么都是n的函数:因为两种评估都与问题的规模大小有关系。
Tworst(n)最坏时间复杂度 >= Tavg(n)平均复杂度 平常采用平均复杂度,因为最坏时间复杂度较容易计算
大O表示f(n)是T(n)的上界 大Ω表示f(n)是T(n)的下界
复杂分析小窍门:
若两段算法复杂度分别为T1(n)=O(f1(n))和T2(n)=O(f2(n))则
T1(n)+ T2(n) = max(O(f1(n)),O(f2(n)));
T1(n)* T2(n) = O(f1(n))*O(f2(n));
若T(n)是关于n的k阶多项式,那么 T(n)=O(n的k次方) (取最大)
for循环的时间复杂度 = 循环次数 乘以 代码的复杂度
if-else 时间复杂度 = max(if条件复杂度,两个分支的复杂度)