Algorithm 这个算法的复杂度是多少,我能把它求和到无穷大吗?
这个算法的复杂度是多少? (而g(n)的复杂度是θ(n²)) 我假设你说的比格n的复杂性是 n²+(n/3)²+(n/3²)²+(n/3³)²。。。。。无限远 答案是θ(n²)。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+(
这是真的吗?让我们看看我们手中的系列
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)
值。但是你能说的是,这个数列的和将达到1
,或者<2
,就像这个例子一样。递减数列必须到无穷大,如果我想求和,不是吗?如果不是,我必须用正常的几何方程求和,不是吗?@yair,给我一点时间,我会发布证明。@yair,这个系列的证明在我发布的图片中。谢谢!我就是这么做的,我的讲师没有接受这个答案。他说总和中的值的数目是log3(n),而不是无穷大。我可以假设它是无穷大吗?@yair,不,你不能假设它是无穷大,因为有log3(n)
值。但是你能说的是,这个数列的和将达到1
,或者<2
,就像这个例子一样。递减数列必须到无穷大,如果我想求和,不是吗?如果不是,我必须用正常的几何方程求和,不是吗?@yair,给我一点时间,我会发布证明。@yair,这个系列的证明在我发布的图片中。我可以假设K是无穷大吗?我可以假设K是无穷大吗?