Big o 这段代码的时间复杂度是多少,其中一个循环以几何方式增长,另一个循环以代数方式衰减?
我有一个猜测,但我不确定 这就是问题所在:Big o 这段代码的时间复杂度是多少,其中一个循环以几何方式增长,另一个循环以代数方式衰减?,big-o,Big O,我有一个猜测,但我不确定 这就是问题所在: for (a = 1 ; a<n ; a= 2*a) do { for (b=n; b > 0; b=b-a) do { } } (a=1;a0;b=b-a)do的{ } } 这是我关于stackoverflow的第一个问题,所以我希望格式是正确的 非常感谢。关于大O符号的推理,有一条有用的格言如下: 当有疑问时,从内到外工作 更具体地说,如果您试图了解循环嵌套的复杂性,请从最内部的循环开始,并用一个简单的语句来替换
for (a = 1 ; a<n ; a= 2*a) do {
for (b=n; b > 0; b=b-a) do {
}
}
(a=1;a0;b=b-a)do的{
}
}
这是我关于stackoverflow的第一个问题,所以我希望格式是正确的
非常感谢。关于大O符号的推理,有一条有用的格言如下: 当有疑问时,从内到外工作 更具体地说,如果您试图了解循环嵌套的复杂性,请从最内部的循环开始,并用一个简单的语句来替换它,该语句总结所做的工作量 在您的情况下,您有以下循环:
for (a = 1 ; a<n ; a= 2*a) do {
for (b=n; b > 0; b=b-a) do {
}
}
这个循环将运行多少次?我们从b
开始,等于n
,每次迭代b
减少a
。这意味着这个循环的迭代次数大约是n
/a
,因此这个循环的复杂性是Θ(n/a)。因此,我们可以用“doΘ(n/a)work”的效果来替换内环,以获得更简单的结构:
for (a = 1 ; a<n ; a= 2*a) do {
do Θ(n / a) work;
}
for(a=1;a更多的是描述复杂性和可伸缩性,而不是实际的运行时。对不起,我指的是复杂性。但是感谢您的注意和回复。您是指b=b-I
,还是b=b-a
?(从“35分钟前询问”)b=b-a,谢谢。
for (a = 1 ; a<n ; a= 2*a) do {
do Θ(n / a) work;
}