以下简单程序的复杂性是什么?

时间:2016-03-07 07:51:18

标签: c time-complexity

我无法找到理解复杂性。有人可以帮助我理解下面的代码的复杂性和原因。

for (int i = 1; i < n; i++) { // (n is a number chosen by the user)
    for (int j = i - 1; j >= 0; j--) {
        printf("i=%d, j=%d", i, j);
    }
}

解释会很棒。

3 个答案:

答案 0 :(得分:2)

原始问题:由于i的初始值未定义,因此代码的行为是不可预测的。除了复杂性未定义之外,没有办法有效地回答这个问题。无法知道代码将执行多少操作。

更新的问题:它是O(1)。代码将始终完成相同的工作量。

答案 1 :(得分:2)

您可以通过评估操作数来计算此代码片段的时间复杂度,即调用printf()的次数,为简单起见,我们假设它们是等效的:

假设i1开始(你最初忘了初始化它),外循环运行99次,每次迭代,内循环运行i次。据推测,当高斯计算得到的迭代次数为99 * (99 + 1) / 2时,高斯应该已经9岁了。

原始代码的复杂性是 O(1),因为它不依赖于任何变量,但是因为您将代码更新为:

void fun(int n) {
    for (int i = 1; i < n; i++) {
        for (int j = i - 1; j >= 0; j--) {
            printf("i=%d, j=%d", i, j);
         }
    }
}

时间复杂度将为 O(n 2

答案 2 :(得分:2)

假设我从0开始,复杂性将是恒定的。复杂性总是相对于定义执行次数的变量来表示,这不是这里的情况。

如果应该使用一个术语来描述这种行为,那么它就是“常量”。将有许多执行,但这个数字永远不会改变

相关问题