【发布时间】:2015-03-31 08:44:24
【问题描述】:
void push(const Type& e){
if (size() == CAP) {
CAP = CAP + 100;
Type * Snew = new Type[CAP];
for (int i = 0; i < CAP - 100; i++){
Snew[i] = S[i];
}
delete[] S;
S = Snew;
}
TOP++;
S[TOP] = e;
}
这个算法的时间复杂度是多少,为什么?我正在看它,希望我没有错,但我认为由于存在单个 for 循环,它具有线性时间 (O(n)) 复杂性,而且我认为循环之外的所有其他操作都是恒时操作。
【问题讨论】:
-
您是对的,只是您的代码中没有任何
n。时间复杂度为O(CAP)。 -
循环内的 size() 和赋值都可能很复杂,如果没有更多信息,这个问题就无法回答。此外,您可能需要考虑摊销成本:调用函数 n 次的平均成本。这样,假设丢失的代码都是 O(1),您将看到 CAP+100(平均成本 O(n))和 CAP*2(平均成本 O(1))之间的差异。
标签: algorithm time big-o complexity-theory analysis