5

我无法理解如何将其变成公式。

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

我意识到会发生什么,对于每一个 i++,你有 1 级乘法减去 j。

i = 1, 你得到 j = 1, 2, 3, ..., 100

i = 2, 你得到 j = 1, 3, 5, ..., 100

我不确定如何根据 Big-theta 来考虑这一点。

j的总数是N,N/2,N/3,N/4...,N/N(我的结论)

如何最好地尝试将其视为 N 的函数?

4

2 回答 2

9

因此,您的问题实际上可以简化为“谐波级数 1/1 + 1/2 + 1/3 + ... + 1/N 的紧界是多少?” 答案是log N(您可以将其视为连续和而不是离散,并注意积分1/Nlog N

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

所以,你的总和:

N + N/2 + N/3 + ... + N/N = N * (1 + 1/2 + 1/3 + ... + 1/N) = Theta(N * log N)

所以算法的紧界是N*log N

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

于 2013-09-18T03:48:01.340 回答
3

好吧,您可以有条不紊地使用 Sigma 表示法:

在此处输入图像描述

于 2014-04-14T22:03:06.330 回答