【问题标题】:Time and space complexity of these codes这些代码的时间和空间复杂度
【发布时间】:2021-02-02 18:19:46
【问题描述】:

我刚刚了解了时间和空间的复杂性,我认为我并没有真正掌握它们。我会提出一些代码,如果你们中的一些人可以告诉我它们的时间和空间复杂性以及你如何决定它们,我会问一些代码。

代码 1

public static int nmKomplex(int n, int m){
     int sum = 0;
     for(int i = 1; i < n; i++)
       for(int j = 1; j < m; i++)
         sum += i * j;
     return sum;
}

代码 2

public static void Schleife3(int n){
    int sum = 0;
    for(int i = 1; i <= n; i++)
      for(int j = 1; j<= n; j++)
         sum += i * j;

    for(int i = 1; i <= n; i++)
       sum += i
} 

【问题讨论】:

  • 请不要对文字拍照。只需将原文包含在问题中
  • @JamesZ 我最终扩展了它们

标签: time-complexity big-o space-complexity


【解决方案1】:

第一个代码:

public static int nmKomplex(int n, int m){
     int sum = 0;
     for(int i = 1; i < n; i++)
       for(int j = 1; j < m; i++)
         sum += i * j;
     return sum;
}

TL:DR 时间复杂度 O(n * m) |空间复杂度O(1)

i = 1n 的循环乘以从j=1m 的另一个循环。对于n &gt; 1,第一个循环执行(n - 1) 迭代,乘以执行(m - 1) 迭代的第二个循环。因此,双循环执行nm - n - m + 1迭代,可以用O(n * m)的时间复杂度来表示。

空间复杂度为O(1)常数),因为nm 值的增加不会反映所用空间的增加。

第二个代码:

public static void Schleife3(int n){
    int sum = 0;
    for(int i = 1; i <= n; i++)
      for(int j = 1; j<= n; j++)
         sum += i * j;

    for(int i = 1; i <= n; i++)
       sum += i
} 

TL:DR 时间复杂度 O(n^2) |空间复杂度O(1)

对于 n > 1,第一个循环性能 n 迭代乘以同样性能 n 迭代的第二个循环加上同样性能 n 迭代的第三个循环。因此,时间复杂度为n^2 + n,可以用O(n^2)表示。

空间复杂度为O(1)常数),因为任一输入n 的增加都不会反映所用空间的增加。

【讨论】:

    猜你喜欢
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多