Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的效率+;功能_C++_Performance_Time Complexity - Fatal编程技术网

C++ C+中的效率+;功能

C++ C+中的效率+;功能,c++,performance,time-complexity,C++,Performance,Time Complexity,我被告知以下代码的效率为O(1): void mystack::Pop_元素() { 断言(nelem>0); 内勒姆--; 如果(nelem

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

void mystack::Pop_元素()
{
断言(nelem>0);
内勒姆--;
如果(nelem<保留/4){
调整大小(保留/2);
}
}

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

除了极少数情况外,代码的复杂性是O(1)

其思想是,当您(程序员)想要使用堆栈时,您可以初始化堆栈以“几乎”始终拥有足够的空间。然后再也不会调用Resize,或者至少很少调用

由于对特殊情况过于迂腐,因此有可能将其称为摊余恒定时间,因为时间复杂性是恒定的,除非在特殊情况下


另请参见:

你的意思是
复杂度
“那么,整个代码不也应该有O(n)效率吗?”需要更正吗?@P0W谢谢,没有注意到我犯了那个错误,请用复杂度替换出现的效率最后一句话可以重写一下,摊余固定时间的意义在于,一系列操作的成本随着操作次数的增加而线性增长,因此每个操作都是近似恒定的(总成本/总操作=K),即使某些操作可能更多,也可能更少。重要的区别在于,昂贵的运营成本的频率必须与相关成本成反比,以便
成本(x)*freq(x)
产生一个常数因子。
void mystack::Pop_element()
{
    assert ( nelem > 0 );

    nelem--;

    if ( nelem < reserved / 4 ){

        Resize ( reserved / 2 );

    }
}