C ++函数的效率

时间:2013-10-31 17:51:46

标签: c++ performance time-complexity

我被告知以下代码的效率为O(1):

void mystack::Pop_element()
{
    assert ( nelem > 0 );

    nelem--;

    if ( nelem < reserved / 4 ){

        Resize ( reserved / 2 );

    }
}

但我真的不明白为什么,因为Resize具有效率O(n)(事实上,我们不应该知道Resize中的代码)。那么,整个代码不应该具有O(n)效率吗?

1 个答案:

答案 0 :(得分:3)

除极少数情况外,代码的复杂程度为O(1)。

这个想法是当你(程序员)想要使用堆栈时,你初始化堆栈以便“几乎”一直有足够的空间。然后调用Resize,或者至少很少调用。

在特殊情况下迂腐,可以将其称为摊销的常数时间,因为时间复杂度是常数,除非在特殊情况下。

另请参阅:Constant Amortized Time