我无法找到理解复杂性。有人可以帮助我理解下面的代码的复杂性和原因。
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);
}
}
解释会很棒。
答案 0 :(得分:2)
原始问题:由于i
的初始值未定义,因此代码的行为是不可预测的。除了复杂性未定义之外,没有办法有效地回答这个问题。无法知道代码将执行多少操作。
更新的问题:它是O(1)。代码将始终完成相同的工作量。
答案 1 :(得分:2)
您可以通过评估操作数来计算此代码片段的时间复杂度,即调用printf()
的次数,为简单起见,我们假设它们是等效的:
假设i
从1
开始(你最初忘了初始化它),外循环运行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开始,复杂性将是恒定的。复杂性总是相对于定义执行次数的变量来表示,这不是这里的情况。
如果应该使用一个术语来描述这种行为,那么它就是“常量”。将有许多执行,但这个数字永远不会改变