【发布时间】:2021-12-16 05:47:17
【问题描述】:
在分析这样的代码的时间复杂度时,我对我的假设的正确性有点怀疑。在这段代码中,array.length() 被视为线性复杂度函数。最后一个细节很重要,最初的练习认为它只是一个常量存储值,但我想知道如果不是会发生什么):
void printPairs(int[] array) {
for (int i = 0; i < array.length(), i++) {
for (int j = 0; j < array.length(), j++){
print(array[i], array[j])
}
}
}
所以,如果 array.length 是数组中的一个变量,就像在 java 中一样,那么这一切都只是 O(N^2)。但是如果 array.length() 是一个函数呢?他的实现应该是线性的……然后……起初我认为它应该变成 O(N^4) 的代码,但现在想得更好,我认为只是 O(N^3)。但我也认为这可能是我对这两个假设都错了,它一直是 O(N^2)。
有人可以纠正我吗?谢谢!
【问题讨论】:
-
Ehm,我的理由是,分解了 array.length() 函数的代码会变成这样的“for”结构:for ... for ... (first .length()) for ... for ... ((second .length())) 这就是为什么我坚持认为,看到 3 个级别的标识,它是 O(N^3)。我的推理中到底有什么不好的部分?
-
对于整数数组,没有类似“strlen”的机制,长度被存储。
标签: arrays algorithm time-complexity pseudocode