这可能是一个简单的问题,但无论如何我都会问:
我已写下以下功能:
std::vector<int> V={1,2,3,4,5};
int myFunction()
{
for(int i=V.size();i--;){//Do Stuff};
for int e=V.size();i--;){//Do Stuff};
}
这需要时间复杂度更糟的情况O(n)和空间复杂度更糟的情况O(1)。
是否有两个线性运算(for-loops)会将时间复杂度更改为O(n)以外的其他值?
答案 0 :(得分:4)
没有。它不是。 O(N)
表示aN+b + something weaker than linear N
。
甚至类似:T(N)= 5N+100 + Log(N)
也被视为O(N)
。
比线性N&#34;弱的东西,我的意思是满足等式的任何函数R(N):
lim R(N)/N = 0 ; N-->Inifinity //Use L'Hospital's Rule for solving these kind of limits
所以O(N)
可以写成:
O(N) = aN+b + R(N)
旁注:复杂性不等于效果。虽然(N+N)
仍为O(N)
,但这并不意味着它不会慢于(N)
。性能,最基本的形式,是关于你需要做的事情的数字周期,而不是理论上的复杂性。
然而,至少当N
变为非常大的数字(几乎是无限)时,它应该是相关的。