Hello,各位看官好,今天我们来说一个问题,就是如何计算算法复杂度(这里所说的算法复杂度就是时间复杂度)。

       一、时间复杂度的概念

  二、计算时间复杂度的原理以及方法

  三、练习题目

 

  一、时间复杂度的概念

    这里要说一下,时间复杂度其实可以分成三种,分别是最好时间复杂度,最坏时间复杂度,以及准确复杂度,那么我们平时说的是哪一种呢?我们所说的就是最坏时间复杂度,简称大O,

    那么其实其他两种复杂度我们需不需要呢?其实也是需要的,不过我们无需理会他们到底怎么算的,只需要记住他们的标记,其中最好时间复杂度为大Ω,准确时间复杂度为大θ。

  二、时间复杂度的原理以及方法

    计算时间复杂度,以我个人的经验来说,只需要记住三件事情:

      1、首先要看循环几层

      2、需要看循环里面的内容和外面的内容是否有关联

      3、如果一下子看不出来,那么就找出规律,一个一个算。

  我们逐条解说

    1、首先要看循环几层

      1、一般来说循环几层就是n的几次方(前提是判断条件和循环里面的内容没有关系),举例:

public void loop(int n) {
         int result = 0;
        for (int i = 0; i < n; i++) {
              result ++;
        }

        for (int i = 0; i < n; i++) {
             for (int j = 0; i < n; i++) {
                  result ++;
             }
         }
      }

    这里的话就一目了然,最高位两层而且里面的内容和判断条件没有关系,所以他的时间复杂度就是n2

    

    2、需要看循环里面的内容和外面的内容是否有关联

      我们举一个例子:

public void multiplication(int n) {
          int result = 1;
          while (result <= n) {
               result = result * 2;
          }
      }

    这里来说判断条件就跟里面的部分有关联,那么这里就需要看2n >=n,所以他的内容就是log2n。

    3、如果我们不确定他的复杂度是多少,我们就按照规律将写出来,结果自然一目了然。

  三、练习题目

x = n;
    y = 1;
    while(x >= (y-1)*(y-1)) {
        y++;
    }

  这是邓俊峰老师的数据结构书里面的一道练习题,我们可以以此来做一下解题思路:

y=1   x>=0
    y=2  x>=1
    y=3  x>=4
    y=4  x>=9
    y=n x>=n2

    那么我们替换一下参数n=x,x=n(因为这样比较好看),x2=n,结果x=log2n,结束。

 

  以上就是我对算法时间复杂度的理解。