算法复杂度

时间复杂度

算法执行时间的这一变化趋势可表示为输入规模的乙肝函数,称作该算法的时间复杂度(time complexity)。特定算法处理规模为n的问题所需的时间可记作T(n)

渐进复杂度

在评价算法效率时,小规模问题所需的处理时间本来就相对更少,所以此时不同算法的效率差异并不明显;而在处理大规模的问题时,效率的些许差异都将对实际执行效果产生巨大的影响。这种着眼长远、更为注重时间复杂度的总体变化趋势和增长速度的策略与方法,即所谓的渐进分析

大O记号

若存在正的常数c和函数f(n),使得对任何 n >> 2 都有 T(n) ≤ c·f(n)
则可认为在n足够大之后,f(n)给出了t(n)增长速度的一个渐进上界。此时,记之为:
T(n) = O(f(n))
大O记号有以下性质:
(1)对于任一常数c>0, 有O(f(n)) = O(c·f(n))
(2)对于任意常数a>b>0,有(na + nb) = O(na)
前一性质意味着,在大O记号的意义下,函数各项正的常系数可以忽略并等同于1。后一性质意味着,多项式中的低次项均可忽略,只需保留最高次项。
在冒泡排序中,每一轮内循环,需要扫描和比较 n-1 对元素,最多需要交换 n-1 对元素,所以每一轮内循环最多需要执行2(n-1)次基本操作。外循环最多执行n-1论。因此总共执行的基本操作不超过2(n-1)2次,则有
T(n) = O(2(n-1)2)
根据大O记号的性质,进一步简化整理为:
T(n) = O(2n2-4n+2) = O(2n2) = O(n2)。

你可能感兴趣的:(算法复杂度)