Time complexity 内部循环和通过调用函数之间的时间复杂度差异

Time complexity 内部循环和通过调用函数之间的时间复杂度差异,time-complexity,Time Complexity,这是一个关于算法复杂性的问题。如果我正在创建一个循环(例如“for”循环),并且想要测试在这个循环中返回的值的素性(在一些操作之后),因此,我运行一个内部循环。相反,如果我创建一个函数来测试素性,然后在第一个循环中调用该函数,时间复杂度仍然保持不变,对吗? 这两种情况的复杂性是什么?怎么计算呢 多亏了代码的复杂性是用空间和时间来衡量的。让我们试着理解时间的复杂性 让我们来看一种测量时间复杂度的方法,它是最著名的,被称为大O形环。根据维基百科,“大O表示法是一种数学表示法,它描述了当参数趋向于某个

这是一个关于算法复杂性的问题。如果我正在创建一个循环(例如“for”循环),并且想要测试在这个循环中返回的值的素性(在一些操作之后),因此,我运行一个内部循环。相反,如果我创建一个函数来测试素性,然后在第一个循环中调用该函数,时间复杂度仍然保持不变,对吗? 这两种情况的复杂性是什么?怎么计算呢


多亏了

代码的复杂性是用空间和时间来衡量的。让我们试着理解时间的复杂性

让我们来看一种测量时间复杂度的方法,它是最著名的,被称为大O形环。根据维基百科,“大O表示法是一种数学表示法,它描述了当参数趋向于某个特定值或无穷大时函数的极限行为。”

假设有一个操作(可能由几行代码执行),其单个执行需要
T
时间单位。时间复杂度是输入值数量的函数,表示为这些输入项执行操作所花费的时间

  • 如果所花费的时间总是
    T
    ,而与输入的数量无关,则称其为常数函数,时间复杂度称为O(1)
  • 如果所花费的时间相对于输入的数量线性增加,则它是线性函数,时间复杂度为
    O(N)
  • 让我们看一个简单的例子

    public int sumOfFirstNNumbersWayOne( int n ){              
        int sum = 0;
         for (int i = 1; i <= n; i++){
               sum += i; // this loops executes as per the number n
         }
         return sum;
    }
    
    
      public int sumOfFirstNNumbersWayTwo( int n ){ 
           int sum = n*(n+1)/2; // the number of times this operation is executed is independent of the input n
          return sum;
     }
    
    sumOfFirstNNumbersWayThree
    的时间压缩率仍然为O(n)

    类似地,假设随着输入数量的增加,一组特定操作的次数呈指数增长,则时间复杂度称为指数


    其他著名的时间复合体有
    O(log(n)),O(n^2),O(nlog(n)),O(n!)
    ,[
    n
    是参考,它可以是我们想要测量时间复杂度的输入数量,它可以是输入数组的大小、输入数量的位数、输入数量的位数、输入字符串的长度、文件中的行数等]

    你还没有告诉我们你在循环什么,所以…显然我们帮不了你我在循环$n=i*i/5$;其中$i$从$1$到$10^4$
     public int sumOfFirstNNumbersWayThree( int n ){ 
         int sum = 0;
         for (int i = 1; i <= n; i++){
               sum = sum( sum, i);
         }
         return sum;
     }
    
    public int sum(int a , int b){ 
         return a+b;
    }