一尘不染

渐近分析

algorithm

我在理解如何将其转换为公式时遇到麻烦。

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

我知道会发生什么,对于每一个i ++,j的乘数要少1级。

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的函数?


阅读 248

收藏
2020-07-28

共1个答案

一尘不染

因此,您的问题实际上可以简化为“谐波序列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

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

2020-07-28