【问题标题】:Asymptotic analysis渐近分析
【发布时间】: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


【解决方案1】:

所以您的问题实际上可以简化为“谐波级数 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

参见[严格的]数学证明here(参见“积分检验”和“发散率”部分)

【讨论】:

  • 我以前从未见过。有趣。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-10-28
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2016-10-28
    • 2018-07-21
    相关资源
    最近更新 更多