[英]Asymptotic analysis
我无法理解如何将其变成公式。
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的函数?
所以你的问题实际上可以简化为“谐波系列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*log N
请参阅[严格]数学证明这里 (参见“整体测试”和“背离率”部分)
那么,你可以有条不紊地使用Sigma表示法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.