一个算法的复杂度通常由其时间复杂度和空间复杂度来表达。这里,主要复习下时间复杂度的概念及计算。

概念:时间复杂度即一个算法所需运算的次数随问题规模n变化的函数。

常见时间复杂度及对应复杂度关系:c < log2N < n < n * Log2N < n^2 < n^3 < 2^n < 3^n < n!

计算方法: 

根本上有二:计算一个语句的频度(执行次数)和时间复杂度。

1)快速求解方法:看循环层数及对应循环次数。

2)最本质的求解方法:计算出算法中所有语句的执行次数的和,其就是一个以n为变量的函数f(n)(一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n);

一个算法花费的时间与算法中语句的执行次数成正比例)。 

3)一个姑娘的总结(如何计算算法时间复杂度):

    乘法法则: 是指若算法的2个部分时间复杂度分别为 T1(n)=O(f(n))和 T2(n)=O(g(n)),则          T1*T2=O(f(n)*g(n))

5.对于复杂的算法,可以将它分成几个容易估算的部分,然后利用求和法则和乘法法则技术整个算法的时间复杂度

另外还有以下2个运算法则:

(1)   若g(n)=O(f(n)),则O(f(n))+ O(g(n))= O(f(n))

(2)  O(Cf(n)) = O(f(n)),其中C是一个正常数

可以用以上法则对下面程序段进行简单分析

①for (i=0; i<n; i++)

②    for (j=0; j<n; j++)

        {

③       c[i][j] = 0;

④       for (k=0; k<n; k++)

⑤           c[i][j]= c[i][j]+ a[i][k]* b[k][j];/ * T5(n) = O(1) */

        }

第①条与②③④⑤是循环嵌套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)

相关文章:

  • 2021-11-02
  • 2021-12-23
  • 2021-06-20
  • 2021-05-14
  • 2022-02-18
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-29
  • 2021-10-22
  • 2021-06-09
  • 2022-01-08
  • 2021-12-09
相关资源
相似解决方案