复杂度
时间复杂度
时间复杂度(Time Complexity)衡量的是算法执行所需的时间,它描述了算法执行时间随输入规模增长而增长的趋势
算法是由控制结构、基本操作组成,算法的时间性能是这两部分的综合效果,为了方便比较不同算法,通常会选择一种特点问题的基本操作,以此基本操作执行次数作为算法的时间度量
算法中基本操作执行次数,通常为问题规模 n 的某个函数 f(n) T(n) = O(f(n))
计算方法
确定基本操作:首先,需要确定算法中的基本操作。基本操作是算法中执行一次的最基本的操作,可以是简单的赋值、比较、算术运算等。
确定输入规模:然后,确定用于衡量算法性能的输入规模。这可以是问题的大小、数据集的大小等。
设置时间复杂度表达式:根据算法中的循环、递归等结构,设置一个表达式来描述基本操作执行次数与输入规模之间的关系。
简化表达式:根据常见的时间复杂度规则和性质,对表达式进行简化。通常,可以忽略常数项、低阶项和系数。
确定最终时间复杂度:根据简化后的表达式,确定算法的最终时间复杂度。常见的时间复杂度包括O(1)、O(log n)、O(n)、O(n^2)等。
空间复杂度
衡量的是算法执行所需的额外空间,包括数据结构、辅助变量等。它描述了算法所需额外空间随输入规模增长而增长的趋势
- 找到程序中需要占用额外空间的语句,主要是:
- 申明变量
- 创建数据结构
- 递归调用函数时占用栈空间
计算每个语句占用空间的大小,通常是一个变量的大小,一个数组或对象的全部元素大小等
找出占用最大空间的一条语句,其空间大小就是算法空间复杂度