Algorithm 渐近分析

Algorithm 渐近分析,algorithm,math,asymptotic-complexity,big-theta,Algorithm,Math,Asymptotic Complexity,Big Theta,我很难理解如何把它变成一个公式 for (int i = 1; i <= N; i++) { for (int j = 1; j <= N; j += i) { >(int i=1;i<p>),你的问题实际上可以归结为“谐波级数为1/1+1/2+1/3++1/n的紧界限是什么”,答案是 log n(你可以把它看作是连续的和而不是离散的,并且注意 1 /n < /代码>的积分是 log n < /代码>) 您的谐波级数是整个算法的公式(正如您正确得出的结论)

我很难理解如何把它变成一个公式

    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= N; j += i) {

<代码> >(int i=1;i<p>),你的问题实际上可以归结为“谐波级数为1/1+1/2+1/3++1/n的紧界限是什么”,答案是<代码> log n</代码>(你可以把它看作是连续的和而不是离散的,并且注意<代码> 1 /n < /代码>的积分是<代码> log n < /代码>)

您的谐波级数是整个算法的公式(正如您正确得出的结论)

那么,你的总数是:

N + N/2 + N/3 + ... + N/N = N * (1 + 1/2 + 1/3 + ... + 1/N) = Theta(N * log N)
因此,该算法的严格界限是
N*logn


参见[严格的]数学证明(参见“积分测试”和“发散率”部分)

好吧,你可以有条不紊地使用西格玛符号:


你的问题实际上可以归结为“谐波级数为1/1+1/2+1/3++1/n”的紧界限是什么?答案是<代码> log n</代码>(你可以把它看成是连续的和而不是离散的,并且注意<代码> 1 /n < /代码>的积分是<代码> log n< /代码>)对于第二个循环,基本上是这样。但是作为一个整体,用大θ来思考这个代码的最佳方式是什么。也就是说:我猜第一个循环是N,第二个是谐波级数,但是我一直在做一些这样的问题来了解这个问题,我的数学似乎总是不及格。你似乎误解了什么。谐波级数es(好的,乘以
N
)是整个算法的大θ。注意,对于没有第一个循环的第二个循环,大θ是固定的
N/i
是的,你是对的。正如你在下面指出的,我注意到1/N的积分=ln(N).将公式与我的结果进行比较,得出了非常相似的结论。我以前从未见过这种情况。很有趣。