数据结构与算法
用时间复杂度、空间复杂度校验一个程序写的好坏。
算法时间复杂度
在进行算法分析时,语句总的执行次数 T(n) 是关于问题规模 n 的函数,进而分析 T(n) 随 n 的变化情况并确定 T(n) 的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n) = O(f(n)) 。它表示随问题的规模 n 的增大,算法执行时间的增长率和 f(n) 的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中 f(n) 是问题规模 n 的某个函数。
函数的渐近增长:
给定两个函数 f(n) 和 g(n),如果存在一个整数 N ,使得对于所有的 n>N ,f(n)总是比g(n)大,那么,我们说 f(n)的增长渐近快于g(n)。
比如:当 n 的值变得非常大的时候,3n+1 已经没法和 2n2 的结果相比较,最终结果几乎可以忽略不计。
于是我们得出这样一个结论:判断一个算法的效率时,函数中的常数项和其他次项长可以忽略,更应该关注主项(最高项)的阶数。
常见的时间复杂度所耗费的时间从小到大依次是:
常数阶 O(1) 、线性阶 O(n)、平方阶 O(n2)、对数阶 O(logn)、nlogn阶 O(nlogn)、立方阶 O(n3)、指数阶 O(22)
O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
算法的空间复杂度:
算法的空间复杂度通过计算算法所需要的存储空间实现,算法的空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n 为问题规模,f(n) 为语句关于 n 所占存储空间的函数。
常见排序列表
必记的四个:插入排序、堆排序、归并排序、快速排序