内循环仅运行一次时嵌套循环的时间复杂度?

时间:2019-12-19 10:15:52

标签: time-complexity nested-loops

我有以下代码,并试图找出其时间复杂度:

int sum(int m, int n, int K) {
    int s = 0;
    for (int i = 0; i < n; i++) {
        s += i;
        if (i == K % 2) {
            for (int j = 0; j < m; j++) {
                s += j;
            }
        }
    }
    return s;
}

根据代码,外循环在O(n)运行,内循环在O(m)运行。但是,内部循环仅执行一次(当i等于K % 2时)。我不确定只运行一次的时间复杂度是O(nm)还是O(n + m)。目前,我怀疑复杂度应为O(n + m)。有人可以为我解释这种情况吗?

1 个答案:

答案 0 :(得分:2)

它是O( m + n ),因为内部循环只运行一次。

通常将内循环的O( m )复杂度乘以 n 的原因是,通常,内循环执行 n 次。我们应该将每个操作的复杂性乘以完成的次数。在这种情况下,O( m )操作执行一次,因此应乘以1,而不是 n

更具体地说,分配s += i;和比较i == K % 2总共进行了 n 次,分配s += j;进行了 m总共次,因此步骤总数为O( m + n )。没有执行 mn 次或 mn 次的任何倍数的操作。