我被告知以下代码的效率为O(1):
void mystack::Pop_element()
{
assert ( nelem > 0 );
nelem--;
if ( nelem < reserved / 4 ){
Resize ( reserved / 2 );
}
}
但我真的不明白为什么,因为Resize具有效率O(n)(事实上,我们不应该知道Resize中的代码)。那么,整个代码不应该具有O(n)效率吗?
答案 0 :(得分:3)
除极少数情况外,代码的复杂程度为O(1)。
这个想法是当你(程序员)想要使用堆栈时,你初始化堆栈以便“几乎”一直有足够的空间。然后调用Resize,或者至少很少调用。
在特殊情况下迂腐,可以将其称为摊销的常数时间,因为时间复杂度是常数,除非在特殊情况下。