Algorithm 这个算法的复杂度是多少,我能把它求和到无穷大吗?

Algorithm 这个算法的复杂度是多少,我能把它求和到无穷大吗?,algorithm,loops,while-loop,time-complexity,logarithm,Algorithm,Loops,While Loop,Time Complexity,Logarithm,这个算法的复杂度是多少? (而g(n)的复杂度是θ(n²)) 我假设你说的比格n的复杂性是 n²+(n/3)²+(n/3²)²+(n/3³)²。。。。。无限远 答案是θ(n²)。 这是真的吗?让我们看看我们手中的系列 Func(n) { i = n while(i>=1) g(i); i = i/3; } 由于[1+(1/3)+(1/3)²+(1/3²)+(1/3³)²….]是一个递减序列,它等于1 因此答案是O(n²) 编辑1: 下面是系列[1+(

这个算法的复杂度是多少? (而g(n)的复杂度是θ(n²)) 我假设你说的比格n的复杂性是

n²+(n/3)²+(n/3²)²+(n/3³)²。。。。。无限远

答案是θ(n²)。
这是真的吗?

让我们看看我们手中的系列

Func(n)
{
   i = n
   while(i>=1)
      g(i);
      i = i/3;
}
由于
[1+(1/3)+(1/3)²+(1/3²)+(1/3³)²….]
是一个递减序列,它等于
1

因此答案是
O(n²)


编辑1:

下面是系列
[1+(1/3)+(1/3)²+(1/3²)²+(1/3³)²….]
之和的证明


让我们看看我们手中的系列

Func(n)
{
   i = n
   while(i>=1)
      g(i);
      i = i/3;
}
由于
[1+(1/3)+(1/3)²+(1/3²)+(1/3³)²….]
是一个递减序列,它等于
1

因此答案是
O(n²)


编辑1:

下面是系列
[1+(1/3)+(1/3)²+(1/3²)²+(1/3³)²….]
之和的证明


正如您所观察到的,循环运行如下

=> n² + (n²/3) + (n/3)² + (n/3²)² + (n/3³)²..... 
taking n² common
=> n² * [ 1 + (1/3) + (1/3)² + (1/3²)² + (1/3³)²..... ]
使用几何级数求和的公式,我们得到所用的总时间是

T(迭代1)+T(迭代2)+…+T(迭代k)

当K是一个可以假定为无穷大的大数时

因为大O符号忽略常数


O(9*n^2/8)=O(n^2)

正如您所观察到的,循环运行如下

=> n² + (n²/3) + (n/3)² + (n/3²)² + (n/3³)²..... 
taking n² common
=> n² * [ 1 + (1/3) + (1/3)² + (1/3²)² + (1/3³)²..... ]
使用几何级数求和的公式,我们得到所用的总时间是

T(迭代1)+T(迭代2)+…+T(迭代k)

当K是一个可以假定为无穷大的大数时

因为大O符号忽略常数


严格地说,
O(9*n^2/8)=O(n^2)

i
是一个整数,它很快就会精确地变成
0
(在
floor(log3(n)
)迭代之后),所以没有理由无限大

无论如何,将
i
视为一个有理数,会得到一个真实公式的近似值,它不会改变渐近行为,仍然是O(n²)。近似值以两种方式出现

  • i/3可能与楼层(i/3)不同

  • 一个人可以增加到无限;小于1的项只会在更坏的情况下增加4/3,这是完全可以忽略的


严格地说,
i
是一个整数,它很快就变成了
0
(在
floor(log3(n)
)迭代之后),因此没有理由无限大

无论如何,将
i
视为一个有理数,会得到一个真实公式的近似值,它不会改变渐近行为,仍然是O(n²)。近似值以两种方式出现

  • i/3可能与楼层(i/3)不同

  • 一个人可以增加到无限;小于1的项只会在更坏的情况下增加4/3,这是完全可以忽略的


谢谢!我就是这么做的,我的讲师没有接受这个答案。他说总和中的值的数目是log3(n),而不是无穷大。我可以假设它是无穷大吗?@yair,不,你不能假设它是无穷大,因为有
log3(n)
值。但是你能说的是,这个数列的和将达到
1
,或者
<2
,就像这个例子一样。递减数列必须到无穷大,如果我想求和,不是吗?如果不是,我必须用正常的几何方程求和,不是吗?@yair,给我一点时间,我会发布证明。@yair,这个系列的证明在我发布的图片中。谢谢!我就是这么做的,我的讲师没有接受这个答案。他说总和中的值的数目是log3(n),而不是无穷大。我可以假设它是无穷大吗?@yair,不,你不能假设它是无穷大,因为有
log3(n)
值。但是你能说的是,这个数列的和将达到
1
,或者
<2
,就像这个例子一样。递减数列必须到无穷大,如果我想求和,不是吗?如果不是,我必须用正常的几何方程求和,不是吗?@yair,给我一点时间,我会发布证明。@yair,这个系列的证明在我发布的图片中。我可以假设K是无穷大吗?我可以假设K是无穷大吗?