【问题标题】:Running time of the function below下面函数的运行时间
【发布时间】:2015-10-26 17:46:36
【问题描述】:

外循环运行n次,但我找不到内循环的运行时间和总运行时间,请您帮忙解决这个问题吗?

def function(n)
    count=0
    if n<=0:
        return
    for i in range(1,n):
        j=1
        While j<n:
            j=j+i
            count = count+1
    print(count)

【问题讨论】:

    标签: python algorithm data-structures big-o time-complexity


    【解决方案1】:

    对于i 的每个值,内部循环运行O(n/i) 次。

    如果我们将 i 的所有值相加,我们会得到:

    n/1 + n/2 + n/3 + ... + n/n = n* (1 + 1/2 + ... + 1/n)
    

    1 + 1/2 + ... + 1/nharmonic number,在O(logn),所以你的代码是O(nlogn)

    【讨论】:

    • 解释有误。如果你看看我的回答,它会告诉你内部循环没有运行n/i 次。 10/7 ~= 1.4, 10/8 = 1.25 在这两种情况下都运行了 2 次。只是一个例子。
    • @LuisÁvila 它运行 floor(n/i) 次,渐近 - n/ifloor(n/i) 之间的差异微不足道。
    • 又不是真的。 10/1 运行 9 次。 floor(10) 不会返回 9。我也尝试过那条路线,但它是错误的。
    • 另外,10/4floor 2 运行 3 次。无论如何,你是对的;)
    • @LuisÁvila 你要把它挑到死吗?它是O(n/i),对于这里的大 O,确切的常数是微不足道的。如果你想要确切的数字,它是1 + floor((n-2)/i)),或者非常接近的数字。
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多