我试图找出使用Big O表示法的for循环的复杂性.我之前在其他课程中已经完成了这个,但是这个比其他课程更严格,因为它是在实际的算法上.代码如下:
for(i=n ; i>1 ; i/=2) //for any size n
{
for(j = 1; j < i; j++)
{
x+=a
}
}
和
for(i=1 ; i<=n;i++,x=1) //for any size n
{
for(j = 1; j <= i; j++)
{
for(k = 1; k <= j; x+=a,k*=a)
{
}
}
}
我已经到了,第一个循环具有O(n)复杂性,因为它经过n次列表.至于第二个循环,我有点迷路!
感谢您在分析中提供的帮助.每个循环都在自己的空间中,它们不在一起.
最佳答案 考虑第一个代码片段,
for(i=n ; i>1 ; i/=2) //for any size n
{
for(j = 1; j < i; j++)
{
x+=a
}
}
指令x = a执行总共n n / 2 n / 4 … 1次.
G.P.的第一个log2n项的总和.具有起始项n和公共比率1/2是(n(1-(1/2)log2n))/(1/2).因此,第一代码片段的复杂性是O(n).
现在考虑第二个代码片段,
for(i=1 ; i<=n; i++,x=1)
{
for(j = 1; j <= i; j++)
{
for(k = 1; k <= j; x+=a,k*=a)
{
}
}
}
两个外环一起调用最里面的循环总共n(n 1)/ 2次.最里面的循环最多执行log< sub> a< / sub> n次.因此,第二代码片段的总时间复杂度是O(n2logan).