时间复杂度概念

数据结构与算法

用时间复杂度、空间复杂度校验一个程序写的好坏。

算法时间复杂度

在进行算法分析时,语句总的执行次数 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 所占存储空间的函数。

常见排序列表

常见排序列表.jpg

必记的四个:插入排序、堆排序、归并排序、快速排序

排序算法宋词记忆法 【哈哈哈哈哈哈】
排序算法宋词记忆法.jpg

推荐阅读更多精彩内容