* author:conowen@大钟
* E-mail:conowen@hotmail.com
复杂度
算法的优劣使用时间复杂度来考量算法的运行时间,使用空间复杂度来考量算法的内存占用。
时间复杂度
算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。
例如f(n) = 2*n^2+3n,在n特别大的时候,第二项3n比起第一项n^2要小很多。于是对于这个函数,f(n)在n->∞的情况下与n^2将近等价,记作f(n)~n^2,忽略低阶项3n和首项系数2。
在 大O符号表示法中,时间复杂度的公式是: T(n) = O( f(n) ),其中f(n) 表示每行代码执行次数之和,而 O 表示正比例关系,这个公式的全称是:算法的渐进时间复杂度。即表示n趋近无穷时的情况。
常用时间复杂度
常数阶O(1) 如哈希表
线性阶O(n)
平方阶O(n²) 如冒泡排序
对数阶O(logn) 如二分法
线性对数阶O(nlogn)
空间复杂度
表示算法的内存占用多少,也是使用大O符号表示法,定义同上。空间复杂度比较常用的有:O(1)、O(n)、O(n²)。