C++ 当我计算这个迭代函数并给出O(n^3)时,它是怎样的O(n/2)
我有这个功能C++ 当我计算这个迭代函数并给出O(n^3)时,它是怎样的O(n/2),c++,algorithm,C++,Algorithm,我有这个功能 void A() { for(int i=n/2;i<=n;i++) printf("XXX"); } 我试着用下面的逻辑计算它的复杂度,但我知道它是错误的,正确的值是开/2,根据: i值最初以i=n/2开始;那么i=n/2+1;然后i=n/2+2;>>>i=n/2+n 这将导致执行总数n/2*1+2+3+4+n 这将是n^2定义,因此其值为On^3 i值最初以i=n/2开始;那么i=n/2+1;那么i=n/2+2; i=n/2+n 最终值是i=n/
void A()
{
for(int i=n/2;i<=n;i++)
printf("XXX");
}
我试着用下面的逻辑计算它的复杂度,但我知道它是错误的,正确的值是开/2,根据:
i值最初以i=n/2开始;那么i=n/2+1;然后i=n/2+2;>>>i=n/2+n
这将导致执行总数n/2*1+2+3+4+n
这将是n^2定义,因此其值为On^3
i值最初以i=n/2开始;那么i=n/2+1;那么i=n/2+2;
i=n/2+n
最终值是i=n/2+n/2=n,而不是您假设的n/2+n;因此,推断操作总数是非常容易的:end-start+1,即n-n/2+1=n/2+1,这是一个打开的。这实际上是一个简单的例子,因为我们确切地知道for循环将根据n计算多少次迭代:我将依次取n/2,n/2+1。。。n
循环将精确迭代n-n/2+1=n/2+1+奇偶校验,因此算法复杂性为On/2=On。n既不声明也不初始化;什么是n?代码的运行时是开/2的,因为for循环在n/2到n之间的n/2范围内迭代。我不理解你的推理。我从n/2到n,这是n/2次迭代,给定或取1,所以复杂度为/2,也就是说@Timo我知道它是/2,但我分析循环失败了算术级数1+2+…+n的和是n-1*n/2~n^2。乘以n/2得到n^3也就是说,如果运行时边界是多对数的,通常会忽略常数因子,即On/2=On。@Codor同意,这就是我首先提到的原因。