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