【发布时间】:2013-09-18 03:37:13
【问题描述】:
我无法理解如何将其转化为公式。
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) -
第二个循环,差不多。但作为一个整体,如何以大角度来思考这段代码的最佳方式。那就是:我猜第一个循环是 N,第二个是谐波级数,但我一直在做一些这样的问题来掌握这个问题,我的数学似乎总是让我失败。
-
你好像误会了什么。谐波级数(好的,乘以
N)是整个算法的大θ。请注意,对于没有第一个循环的第二个循环,big-theta 将是固定的N/i -
是的,没错。正如您在下面指出的那样,我注意到 1/N = ln(N) 的积分。将公式与我的结果进行比较,得出了相当相似的结果。
标签: algorithm math asymptotic-complexity big-theta