我在理解如何将其转换为公式时遇到麻烦。
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的函数?
因此,您的问题实际上可以简化为“谐波序列1/1 + 1/2 + 1/3 + … + 1 / N的紧界是什么?” 答案是log N(您可以将其视为连续的总和而不是离散的,并且注意的积分1/N是log N)
log N
1/N
您的谐波序列 是 整个算法的公式(如您正确得出的结论)
因此,您的总和:
N + N/2 + N/3 + ... + N/N = N * (1 + 1/2 + 1/3 + ... + 1/N) = Theta(N * log N)
所以算法的严格界限是 N*log N
N*log N
请参见此处的[严格的]数学证明(请参见“积分测试”和“发散率”部分)