一个算法的复杂度通常由其时间复杂度和空间复杂度来表达。这里,主要复习下时间复杂度的概念及计算。
概念:时间复杂度即一个算法所需运算的次数随问题规模n变化的函数。
常见时间复杂度及对应复杂度关系:c < log2N < n < n * Log2N < n^2 < n^3 < 2^n < 3^n < n!
计算方法:
1)快速求解方法:看循环层数及对应循环次数。
2)最本质的求解方法:计算出算法中所有语句的执行次数的和,其就是一个以n为变量的函数f(n)(一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n);
一个算法花费的时间与算法中语句的执行次数成正比例)。
3)一个姑娘的总结(如何计算算法时间复杂度):
5.对于复杂的算法,可以将它分成几个容易估算的部分,然后利用求和法则和乘法法则技术整个算法的时间复杂度
另外还有以下2个运算法则:
(1)
(2)
可以用以上法则对下面程序段进行简单分析
①for (i=0; i<n; i++)
②
③
④
⑤
第①条与②③④⑤是循环嵌套T1(n)*T2(n)* (T3(n)+ T4(n)* T5(n))= O(n*n*n)即为整个算法的时间复杂度
O(1)<O(log2n)<O(n)<O(n log2 n)<O(n^2)<O(n^3)<O(2^n)