algorithm - 这个 if 语句如何影响时间复杂度?

标签 algorithm big-o

我知道前两个循环的时间复杂度为 O(n^3),但我不确定 if 语句如何影响时间复杂度。

int sum = 0;
for(int i = 1; i < n; i++) {
    for(int j = 1; j < i * i; j++) {
        if(j % i == 0) {
            for(int k = 0; k < j; k++) {
                sum++;
            }
        }
    }
}

最佳答案

if语句对该代码的整体复杂性有巨大影响。

不使用 if 的复杂度为 O(n^5),但使用 if 的复杂度为 O(n^4)

j范围为 1 to i*i if 仅当 j % i = 0 时才起作用.

这意味着对于每个 i, j会工作i^2还有i情况下j % i = 0 .

因此,总体复杂度将为 O(n^4) .

为了了解它是如何进行的,我只需编译代码:

   static int count;

   static void rr(int n)
   {
      for (int i = 1; i < n; i++)
      {
         for (int j = 1; j < i * i; j++)
         {
            if (j % i == 0)
            {
               for (int k = 0; k < j; k++)
               {
                  count++;
               }
            }
         }
      }
   }

   public static void main(String[] args)
   {
      for (int n = 50; n < 110; n += 10)
      {
         count = 0;
         rr(n);
         System.out.println("For n = " + n + ", Count: " + count);
      }
   }

这是输出。

与 if

For n = 50, Count: 730100
For n = 60, Count: 1531345
For n = 70, Count: 2860165
For n = 80, Count: 4909060
For n = 90, Count: 7900530
For n = 100, Count: 12087075

没有 if

For n = 50, Count: 29688120
For n = 60, Count: 74520894
For n = 70, Count: 162068718
For n = 80, Count: 317441592
For n = 90, Count: 574089516
For n = 100, Count: 975002490

因此,如果复杂度为 O(n^4)。

关于algorithm - 这个 if 语句如何影响时间复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59868331/

相关文章:

android - 这段列出支持的提供商、服务和算法的代码在 Android 上如何工作?

arrays - 子段中最大值的最小值......在 O(n) 复杂度中

Java 图像旋转 : Is the computed angle correct?

java - 使用 '|' 或 '||' 运算符的递归在基本情况下不返回 false

string - 给定长度 L 找到仅由 as & bs >= L 组成的最短字符串,这样添加一些字符(a 或 b)不会产生新的回文

algorithm - 发现 n! 之间的区别!和一个 2^n 算法

c++ - 如何创建具有运行时间限制的数据结构

algorithm - 渐近时间复杂度

algorithm - 当某物是 Big O 时,是否意味着它正是 Big O 的结果?

c# - 识别矩形