C 嵌套循环的复杂性除以2
我试图用大O表示法来计算for循环的复杂性。我以前在我的其他课程中也做过,但是这个课程比其他课程更严格,因为它是基于实际的算法。代码如下:C 嵌套循环的复杂性除以2,c,loops,big-o,C,Loops,Big O,我试图用大O表示法来计算for循环的复杂性。我以前在我的其他课程中也做过,但是这个课程比其他课程更严格,因为它是基于实际的算法。代码如下: for(i=n ; i>1 ; i/=2) //for any size n { for(j = 1; j < i; j++) { x+=a } } for(i=n;i>1;i/=2)//对于任意大小的n { 对于(j=1;j
for(i=n ; i>1 ; i/=2) //for any size n
{
for(j = 1; j < i; j++)
{
x+=a
}
}
for(i=n;i>1;i/=2)//对于任意大小的n
{
对于(j=1;j
我已经知道第一个循环是O(log_2(n))。至于第二圈,我有点迷路了!感谢您在分析中的帮助。内部循环的总迭代次数为n+n/2+n/4+…+1,约为2n。所以复杂性是O(n)复杂性应该是
O(n)
。它形成一个几何级数(不是精确的,而是近似的)
循环为n+n/2+n/4++1
约为2n
和
O(2n)=O(n)
要正式解决算法的时间复杂度,可以使用以下步骤和Sigma表示法:
另外,看一看Jauhar博士非常有趣的这张幻灯片的最后一张。你怎么能简化总和
n+n/2+n/4+…
?@OliCharlesworth我不明白n+n/2+n/4+…
等于nlogn
@Rüppell's文化:它不简单。@Rüppell's文化:大概是因为有些人认为(不正确)这是正确的答案。@OliCharlesworth如果它是O(n)
,那么它也是O(n*logn)
,所以这没有错。